from __future__ import annotations from tickets.data import TicketData, TicketMessage from tickets.transcript import _format_ts, generate_transcript class TestFormatTs: def test_valid_iso(self): result = _format_ts("2026-01-15T10:30:00+00:00") assert result == "15/01/2026 10:30:00" def test_valid_naive_iso(self): result = _format_ts("2026-06-01T12:00:00") assert result == "01/06/2026 12:00:00" def test_invalid_string_returns_as_is(self): assert _format_ts("not-a-date") == "not-a-date" def test_empty_string(self): assert _format_ts("") == "" def test_none_returns_none(self): assert _format_ts(None) is None def _make_ticket(**kwargs) -> TicketData: defaults = dict(channel_id=123, guild_id=456, user_id=789, category_id="support") defaults.update(kwargs) return TicketData(**defaults) class TestGenerateTranscript: def test_returns_html(self): result = generate_transcript(_make_ticket()) assert result.startswith("") assert "" in result def test_contains_channel_id(self): result = generate_transcript(_make_ticket(channel_id=42)) assert "Ticket #42" in result def test_empty_messages(self): ticket = _make_ticket() result = generate_transcript(ticket) assert "Aucun message" in result def test_single_user_message(self): ticket = _make_ticket() ticket.messages.append( TicketMessage(author_id=1, author_name="TestUser", content="Hello!", timestamp="2026-01-01T00:00:00") ) result = generate_transcript(ticket) assert "TestUser" in result assert "Hello!" in result assert 'class="badge badge-staff"' not in result def test_staff_message_has_badge(self): ticket = _make_ticket() ticket.messages.append( TicketMessage( author_id=2, author_name="StaffUser", content="Reply", timestamp="2026-01-01T00:00:00", is_staff=True ) ) result = generate_transcript(ticket) assert "badge-staff" in result assert "STAFF" in result def test_message_content_escaped(self): ticket = _make_ticket() ticket.messages.append( TicketMessage(author_id=1, author_name="x", content="", timestamp="t") ) result = generate_transcript(ticket) assert "