@@ -1404,7 +1404,7 @@ async def test_webhook_router(self):
14041404
14051405 test_topic = "test-topic"
14061406 test_payload = {"test" : "payload" }
1407- test_endpoint = "http ://example"
1407+ test_endpoint = "https ://example"
14081408 test_attempts = 2
14091409
14101410 test_profile = await create_test_profile (None , await builder .build_context ())
@@ -1449,6 +1449,127 @@ async def test_webhook_router(self):
14491449 test_topic , test_payload , test_endpoint , test_attempts , None
14501450 )
14511451
1452+ async def test_webhook_router_no_outbound_manager (self ):
1453+ builder : ContextBuilder = StubContextBuilder (self .test_settings )
1454+ conductor = test_module .Conductor (builder )
1455+ conductor .outbound_transport_manager = None
1456+
1457+ with mock .patch .object (test_module , "LOGGER" ) as mock_logger :
1458+ conductor .webhook_router (
1459+ "test-topic" , {"test" : "payload" }, "https://example" , 2
1460+ )
1461+ mock_logger .warning .assert_called_once ()
1462+
1463+ async def test_setup_no_transport_mode (self ):
1464+ builder : ContextBuilder = StubContextBuilder (self .test_settings )
1465+ builder .update_settings ({"transport.disabled" : True })
1466+ conductor = test_module .Conductor (builder )
1467+
1468+ test_profile = await create_test_profile (None , await builder .build_context ())
1469+
1470+ with (
1471+ mock .patch .object (
1472+ test_module ,
1473+ "wallet_config" ,
1474+ return_value = (
1475+ test_profile ,
1476+ DIDInfo ("did" , "verkey" , metadata = {}, method = SOV , key_type = ED25519 ),
1477+ ),
1478+ ),
1479+ mock .patch .object (
1480+ test_module , "OutboundTransportManager" , autospec = True
1481+ ) as mock_outbound_mgr ,
1482+ ):
1483+ mock_outbound_mgr .return_value .registered_transports = {
1484+ "test" : mock .MagicMock (schemes = ["http" ])
1485+ }
1486+ await conductor .setup ()
1487+
1488+ # Inbound transports should NOT be set up
1489+ assert conductor .inbound_transport_manager is None
1490+
1491+ # Outbound transport manager should be created
1492+ mock_outbound_mgr .assert_called_once ()
1493+ # HTTP transport should be registered for webhook delivery
1494+ mock_outbound_mgr .return_value .register .assert_called_once_with ("http" )
1495+ # setup() should NOT be called (that registers from config)
1496+ mock_outbound_mgr .return_value .setup .assert_not_awaited ()
1497+
1498+ async def test_start_no_transport_mode (self ):
1499+ builder : ContextBuilder = StubContextBuilder (self .test_settings )
1500+ builder .update_settings ({"transport.disabled" : True })
1501+ conductor = test_module .Conductor (builder )
1502+
1503+ test_profile = await create_test_profile (None , await builder .build_context ())
1504+
1505+ with (
1506+ mock .patch .object (
1507+ test_module ,
1508+ "wallet_config" ,
1509+ return_value = (
1510+ test_profile ,
1511+ DIDInfo ("did" , "verkey" , metadata = {}, method = SOV , key_type = ED25519 ),
1512+ ),
1513+ ),
1514+ mock .patch .object (
1515+ test_module , "OutboundTransportManager" , autospec = True
1516+ ) as mock_outbound_mgr ,
1517+ ):
1518+ mock_outbound_mgr .return_value .registered_transports = {
1519+ "test" : mock .MagicMock (schemes = ["http" ])
1520+ }
1521+ await conductor .setup ()
1522+
1523+ mock_outbound_mgr .return_value .registered_transports = {}
1524+
1525+ await conductor .start ()
1526+
1527+ # Outbound transports should still be started for webhooks
1528+ mock_outbound_mgr .return_value .start .assert_awaited_once_with ()
1529+
1530+ await conductor .stop ()
1531+ mock_outbound_mgr .return_value .stop .assert_awaited_once_with ()
1532+
1533+ async def test_webhook_in_no_transport_mode (self ):
1534+ builder : ContextBuilder = StubContextBuilder (self .test_settings )
1535+ builder .update_settings ({"transport.disabled" : True })
1536+ conductor = test_module .Conductor (builder )
1537+
1538+ test_topic = "test-topic"
1539+ test_payload = {"test" : "payload" }
1540+ test_endpoint = "https://example"
1541+ test_attempts = 2
1542+
1543+ test_profile = await create_test_profile (None , await builder .build_context ())
1544+
1545+ with (
1546+ mock .patch .object (
1547+ test_module ,
1548+ "wallet_config" ,
1549+ return_value = (
1550+ test_profile ,
1551+ DIDInfo ("did" , "verkey" , metadata = {}, method = SOV , key_type = ED25519 ),
1552+ ),
1553+ ),
1554+ mock .patch .object (
1555+ test_module , "OutboundTransportManager" , autospec = True
1556+ ) as mock_outbound_mgr ,
1557+ ):
1558+ mock_outbound_mgr .return_value .registered_transports = {
1559+ "test" : mock .MagicMock (schemes = ["http" ])
1560+ }
1561+ await conductor .setup ()
1562+
1563+ with mock .patch .object (
1564+ conductor .outbound_transport_manager , "enqueue_webhook"
1565+ ) as mock_enqueue :
1566+ conductor .webhook_router (
1567+ test_topic , test_payload , test_endpoint , test_attempts
1568+ )
1569+ mock_enqueue .assert_called_once_with (
1570+ test_topic , test_payload , test_endpoint , test_attempts , None
1571+ )
1572+
14521573 async def test_shutdown_multitenant_profiles (self ):
14531574 builder : ContextBuilder = StubContextBuilder (
14541575 {** self .test_settings , "multitenant.enabled" : True }
0 commit comments