b2541c4054
feat: add configurable matrix permalink base, unify user placeholders, and refactor notification rendering
58 lines
1.7 KiB
Python
Executable File
58 lines
1.7 KiB
Python
Executable File
"""Tests for notification and greeting template rendering."""
|
|
|
|
from unittest.mock import AsyncMock, Mock
|
|
|
|
import pytest
|
|
from mautrix.types import EventType, RoomID
|
|
|
|
from community.bot import CommunityBot
|
|
|
|
|
|
@pytest.fixture
|
|
def bot():
|
|
bot = CommunityBot.__new__(CommunityBot)
|
|
bot.client = Mock()
|
|
bot.config = {"matrix_to_base_url": "https://matrix.to"}
|
|
return bot
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_user_display_name_uses_member_displayname(bot):
|
|
member_state = Mock()
|
|
member_state.displayname = "Alice"
|
|
bot.client.get_state_event = AsyncMock(return_value=member_state)
|
|
|
|
result = await bot._get_user_display_name(RoomID("!room:example.org"), "@alice:example.org")
|
|
|
|
assert result == "Alice"
|
|
bot.client.get_state_event.assert_awaited_once_with(
|
|
RoomID("!room:example.org"),
|
|
EventType.ROOM_MEMBER,
|
|
state_key="@alice:example.org",
|
|
)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_user_display_name_falls_back_to_localpart(bot):
|
|
bot.client.get_state_event = AsyncMock(side_effect=Exception("missing"))
|
|
bot.client.parse_user_id = Mock(return_value=("alice", "example.org"))
|
|
|
|
result = await bot._get_user_display_name(RoomID("!room:example.org"), "@alice:example.org")
|
|
|
|
assert result == "alice"
|
|
|
|
|
|
def test_render_message_template_supports_user_id_and_user_link(bot):
|
|
plain, html = bot._render_message_template(
|
|
"{user} / {user_id} / {user_link}",
|
|
"@alice:example.org",
|
|
"Alice",
|
|
"!room:example.org",
|
|
"General",
|
|
)
|
|
|
|
assert plain == "Alice / @alice:example.org / https://matrix.to/#/@alice:example.org"
|
|
assert "Alice / @alice:example.org / " in html
|
|
assert '<a href=' in html
|
|
assert '>Alice</a>' in html
|