48 lines
2.1 KiB
C#
48 lines
2.1 KiB
C#
using GmRelay.Shared.Domain;
|
|
using GmRelay.Shared.Rendering;
|
|
|
|
namespace GmRelay.Bot.Tests.Rendering;
|
|
|
|
public sealed class SessionBatchRendererTests
|
|
{
|
|
[Fact]
|
|
public void Render_ShouldOrderSessionsAndSkipButtonsForClosedStatuses()
|
|
{
|
|
var firstSessionId = Guid.NewGuid();
|
|
var secondSessionId = Guid.NewGuid();
|
|
var cancelledSessionId = Guid.NewGuid();
|
|
|
|
var sessions = new[]
|
|
{
|
|
new SessionBatchDto(secondSessionId, new DateTime(2026, 4, 27, 18, 0, 0, DateTimeKind.Utc), "Planned"),
|
|
new SessionBatchDto(cancelledSessionId, new DateTime(2026, 4, 28, 18, 0, 0, DateTimeKind.Utc), "Cancelled"),
|
|
new SessionBatchDto(firstSessionId, new DateTime(2026, 4, 26, 18, 0, 0, DateTimeKind.Utc), "RecruitmentClosed")
|
|
};
|
|
var participants = new[]
|
|
{
|
|
new ParticipantBatchDto(secondSessionId, "Alice", "alice"),
|
|
new ParticipantBatchDto(cancelledSessionId, "Bob", null)
|
|
};
|
|
|
|
var result = SessionBatchRenderer.Render("Campaign", sessions, participants);
|
|
var text = result.Text;
|
|
var buttons = result.Markup.InlineKeyboard.SelectMany(row => row).ToList();
|
|
|
|
var firstIndex = text.IndexOf(sessions[2].ScheduledAt.FormatMoscow(), StringComparison.Ordinal);
|
|
var secondIndex = text.IndexOf(sessions[0].ScheduledAt.FormatMoscow(), StringComparison.Ordinal);
|
|
var thirdIndex = text.IndexOf(sessions[1].ScheduledAt.FormatMoscow(), StringComparison.Ordinal);
|
|
|
|
Assert.Contains("Campaign", text);
|
|
Assert.True(firstIndex < secondIndex);
|
|
Assert.True(secondIndex < thirdIndex);
|
|
Assert.Contains("@alice", text);
|
|
Assert.Contains("Bob", text);
|
|
Assert.Single(result.Markup.InlineKeyboard);
|
|
Assert.Collection(
|
|
buttons.Select(button => button.CallbackData),
|
|
callbackData => Assert.Equal($"join_session:{secondSessionId}", callbackData),
|
|
callbackData => Assert.Equal($"cancel_session:{secondSessionId}", callbackData),
|
|
callbackData => Assert.Equal($"reschedule_session:{secondSessionId}", callbackData));
|
|
}
|
|
}
|