VisionApp/tests/test_transcript.py

134 lines
4.4 KiB
Python
Raw Permalink Normal View History

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("<!DOCTYPE html>")
assert "</html>" 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="<script>alert('xss')</script>", timestamp="t")
)
result = generate_transcript(ticket)
assert "<script>" not in result
assert "&lt;script&gt;" in result
def test_image_attachment(self):
ticket = _make_ticket()
ticket.messages.append(
TicketMessage(
author_id=1,
author_name="u",
content="pic",
timestamp="t",
attachments=["https://example.com/image.png"],
)
)
result = generate_transcript(ticket)
assert "<img" in result
assert "image.png" in result
def test_file_attachment(self):
ticket = _make_ticket()
ticket.messages.append(
TicketMessage(
author_id=1,
author_name="u",
content="file",
timestamp="t",
attachments=["https://example.com/doc.pdf"],
)
)
result = generate_transcript(ticket)
assert "<a href=" in result
assert "doc.pdf" in result
def test_closed_ticket_shows_closed_at(self):
ticket = _make_ticket(closed_at="2026-01-02T10:00:00+00:00")
result = generate_transcript(ticket)
assert "Ferme" in result or "Fermé" in result
def test_open_ticket_no_closed_at(self):
ticket = _make_ticket()
result = generate_transcript(ticket)
assert "Ferme" not in result
def test_dark_theme_colors(self):
result = generate_transcript(_make_ticket())
assert "#0b0d11" in result
def test_multiple_messages(self):
ticket = _make_ticket()
for i in range(5):
ticket.messages.append(
TicketMessage(author_id=i, author_name=f"User{i}", content=f"Message {i}", timestamp=f"t{i}")
)
result = generate_transcript(ticket)
for i in range(5):
assert f"Message {i}" in result
def test_footer_text(self):
result = generate_transcript(_make_ticket())
assert "Vision Studio" in result