Test backend-independent codeΒΆ
Each backend package exports an in-memory mock with the same asynchronous frontend as its live backend.
import pytest
from chatom.slack import MockSlackBackend
@pytest.mark.asyncio
async def test_announcement():
backend = MockSlackBackend()
backend.add_mock_channel("C123", "operations")
await backend.connect()
try:
channel = await backend.fetch_channel(name="operations")
sent = await backend.send_message(channel, "Deployment complete")
finally:
await backend.disconnect()
assert sent.content == "Deployment complete"
assert backend.get_sent_messages() == [sent]
Equivalent mocks are exported as chatom.discord.MockDiscordBackend, chatom.symphony.MockSymphonyBackend, and chatom.telegram.MockTelegramBackend.
Parameterize a common behavior test to verify frontend portability:
@pytest.mark.parametrize(
"backend_factory",
[MockSlackBackend, MockDiscordBackend, MockSymphonyBackend, MockTelegramBackend],
)
@pytest.mark.asyncio
async def test_message_workflow(backend_factory):
backend = backend_factory()
await backend.connect()
try:
assert backend.connected
finally:
await backend.disconnect()