test: add Web TelegramSessionBatchRenderer tests
PR Checks / test-and-build (pull_request) Successful in 28m37s
PR Checks / test-and-build (pull_request) Successful in 28m37s
Mirrors the Bot renderer tests for the duplicated Web renderer so both Telegram consumers are covered against regressions.
This commit is contained in:
@@ -0,0 +1,81 @@
|
|||||||
|
using GmRelay.Shared.Domain;
|
||||||
|
using GmRelay.Shared.Rendering;
|
||||||
|
using GmRelay.Web.Services;
|
||||||
|
|
||||||
|
namespace GmRelay.Bot.Tests.Web.Rendering;
|
||||||
|
|
||||||
|
public sealed class WebTelegramSessionBatchRendererTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Render_ShouldShowStructuredGameCard()
|
||||||
|
{
|
||||||
|
var sessionId = Guid.NewGuid();
|
||||||
|
var sessions = new[]
|
||||||
|
{
|
||||||
|
new SessionBatchDto(
|
||||||
|
sessionId,
|
||||||
|
new DateTime(2026, 6, 13, 16, 0, 0, DateTimeKind.Utc),
|
||||||
|
SessionStatus.Planned,
|
||||||
|
4,
|
||||||
|
"https://vtt.example/game",
|
||||||
|
"Hybrid",
|
||||||
|
"Moscow, Kubik Bar",
|
||||||
|
"Mystery one-shot in Bamberg.",
|
||||||
|
"D\u0026D 5e",
|
||||||
|
240,
|
||||||
|
true)
|
||||||
|
};
|
||||||
|
var participants = new[]
|
||||||
|
{
|
||||||
|
new ParticipantBatchDto(sessionId, "Alice", "alice", ParticipantRegistrationStatus.Active),
|
||||||
|
new ParticipantBatchDto(sessionId, "Bob", null, ParticipantRegistrationStatus.Waitlisted)
|
||||||
|
};
|
||||||
|
|
||||||
|
var view = SessionBatchViewBuilder.Build("Structured Test", sessions, participants);
|
||||||
|
var (text, markup) = TelegramSessionBatchRenderer.Render(view);
|
||||||
|
|
||||||
|
Assert.Contains("🏷", text);
|
||||||
|
Assert.Contains("Система:", text);
|
||||||
|
Assert.Contains("D\u0026amp;D 5e", text);
|
||||||
|
Assert.Contains("Формат:", text);
|
||||||
|
Assert.Contains("Hybrid", text);
|
||||||
|
Assert.Contains("Тип:", text);
|
||||||
|
Assert.Contains("One-shot", text);
|
||||||
|
Assert.Contains("⏱", text);
|
||||||
|
Assert.Contains("Длительность:", text);
|
||||||
|
Assert.Contains("4 ч", text);
|
||||||
|
Assert.Contains("📝", text);
|
||||||
|
Assert.Contains("Описание:", text);
|
||||||
|
Assert.Contains("Mystery one-shot in Bamberg.", text);
|
||||||
|
Assert.Contains("🔗", text);
|
||||||
|
Assert.Contains("Ссылка:", text);
|
||||||
|
Assert.Contains("📍", text);
|
||||||
|
Assert.Contains("Адрес:", text);
|
||||||
|
Assert.Contains("@alice", text);
|
||||||
|
Assert.Contains("Bob", text);
|
||||||
|
Assert.Contains("Лист ожидания", text);
|
||||||
|
|
||||||
|
var buttons = markup.InlineKeyboard.SelectMany(row => row).ToList();
|
||||||
|
Assert.Equal(2, buttons.Count);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void Render_ShouldHandleMissingOptionalFields()
|
||||||
|
{
|
||||||
|
var sessionId = Guid.NewGuid();
|
||||||
|
var sessions = new[] { new SessionBatchDto(sessionId, DateTime.UtcNow, SessionStatus.Planned, 4, "") };
|
||||||
|
var participants = Array.Empty<ParticipantBatchDto>();
|
||||||
|
|
||||||
|
var view = SessionBatchViewBuilder.Build("Minimal", sessions, participants);
|
||||||
|
var (text, _) = TelegramSessionBatchRenderer.Render(view);
|
||||||
|
|
||||||
|
Assert.Contains("📅", text);
|
||||||
|
Assert.Contains("👥", text);
|
||||||
|
Assert.DoesNotContain("Система:", text);
|
||||||
|
Assert.DoesNotContain("Формат:", text);
|
||||||
|
Assert.DoesNotContain("Длительность:", text);
|
||||||
|
Assert.DoesNotContain("Описание:", text);
|
||||||
|
Assert.DoesNotContain("Ссылка:", text);
|
||||||
|
Assert.DoesNotContain("Адрес:", text);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user