trustgraph/tests/unit/test_gateway/test_dispatch_sender.py
cybermaggedon 5304f96fe6
Fix tests (#593)
* Fix unit/integration/contract tests which were broken by messaging fabric work
2025-12-19 08:53:21 +00:00

120 lines
No EOL
3.8 KiB
Python

"""
Tests for Gateway Service Sender
"""
import pytest
from unittest.mock import MagicMock, AsyncMock, patch
from trustgraph.gateway.dispatch.sender import ServiceSender
class TestServiceSender:
"""Test cases for ServiceSender class"""
@patch('trustgraph.gateway.dispatch.sender.Publisher')
def test_service_sender_initialization(self, mock_publisher):
"""Test ServiceSender initialization"""
mock_backend = MagicMock()
mock_schema = MagicMock()
sender = ServiceSender(
backend=mock_backend,
queue="test-queue",
schema=mock_schema
)
# Verify Publisher was created correctly
mock_publisher.assert_called_once_with(
mock_backend, "test-queue", schema=mock_schema
)
@patch('trustgraph.gateway.dispatch.sender.Publisher')
@pytest.mark.asyncio
async def test_service_sender_start(self, mock_publisher):
"""Test ServiceSender start method"""
mock_pub_instance = AsyncMock()
mock_publisher.return_value = mock_pub_instance
sender = ServiceSender(
backend=MagicMock(),
queue="test-queue",
schema=MagicMock()
)
# Call start
await sender.start()
# Verify publisher start was called
mock_pub_instance.start.assert_called_once()
@patch('trustgraph.gateway.dispatch.sender.Publisher')
@pytest.mark.asyncio
async def test_service_sender_stop(self, mock_publisher):
"""Test ServiceSender stop method"""
mock_pub_instance = AsyncMock()
mock_publisher.return_value = mock_pub_instance
sender = ServiceSender(
backend=MagicMock(),
queue="test-queue",
schema=MagicMock()
)
# Call stop
await sender.stop()
# Verify publisher stop was called
mock_pub_instance.stop.assert_called_once()
@patch('trustgraph.gateway.dispatch.sender.Publisher')
def test_service_sender_to_request_not_implemented(self, mock_publisher):
"""Test ServiceSender to_request method raises RuntimeError"""
sender = ServiceSender(
backend=MagicMock(),
queue="test-queue",
schema=MagicMock()
)
with pytest.raises(RuntimeError, match="Not defined"):
sender.to_request({"test": "request"})
@patch('trustgraph.gateway.dispatch.sender.Publisher')
@pytest.mark.asyncio
async def test_service_sender_process(self, mock_publisher):
"""Test ServiceSender process method"""
mock_pub_instance = AsyncMock()
mock_publisher.return_value = mock_pub_instance
# Create a concrete sender that implements to_request
class ConcreteSender(ServiceSender):
def to_request(self, request):
return {"processed": request}
sender = ConcreteSender(
backend=MagicMock(),
queue="test-queue",
schema=MagicMock()
)
test_request = {"test": "data"}
# Call process
await sender.process(test_request)
# Verify publisher send was called with processed request
mock_pub_instance.send.assert_called_once_with(None, {"processed": test_request})
@patch('trustgraph.gateway.dispatch.sender.Publisher')
def test_service_sender_attributes(self, mock_publisher):
"""Test ServiceSender has correct attributes"""
mock_pub_instance = MagicMock()
mock_publisher.return_value = mock_pub_instance
sender = ServiceSender(
backend=MagicMock(),
queue="test-queue",
schema=MagicMock()
)
# Verify attributes are set correctly
assert sender.pub == mock_pub_instance