Files
TeleWave/backend/tests/TeleWave.Domain.Tests/Programming/GroupTests.cs
T

105 lines
3.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using TeleWave.Domain.Programming;
using Xunit;
namespace TeleWave.Domain.Tests.Programming;
public class GroupTests
{
private static IReadOnlyList<Guid> Order(Group group) =>
group.Items.OrderBy(i => i.Position).Select(i => i.Id).ToList();
[Fact]
public void AddElement_AppendsAndRejectsDuplicates()
{
var group = Group.Create("Боевики 90-х");
var showId = Guid.NewGuid();
Assert.NotNull(group.AddElement(GroupElementKind.Show, showId));
Assert.Null(group.AddElement(GroupElementKind.Show, showId));
Assert.Single(group.Items);
}
[Fact]
public void AddElement_SameIdDifferentKind_AreDistinct()
{
var group = Group.Create("Смешанная");
var id = Guid.NewGuid();
group.AddElement(GroupElementKind.Show, id);
group.AddElement(GroupElementKind.Collection, id);
Assert.Equal(2, group.Items.Count);
}
[Fact]
public void RemoveElement_DropsAllMatchingPositions()
{
var group = Group.Create("Боевики");
var showId = Guid.NewGuid();
group.AddElement(GroupElementKind.Show, showId);
group.AddElement(GroupElementKind.Show, Guid.NewGuid());
var removed = group.RemoveElement(GroupElementKind.Show, showId);
Assert.Equal(1, removed);
Assert.Single(group.Items);
}
[Fact]
public void SetWeight_ClampsNegativeToZero()
{
var group = Group.Create("Боевики");
var item = group.AddElement(GroupElementKind.Show, Guid.NewGuid())!;
group.SetWeight(item.Id, -5);
// Ноль — законный вес («исключить, не удаляя»), отрицательный сломал бы взвешенный выбор.
Assert.Equal(0, item.Weight);
}
[Fact]
public void SetWeight_UnknownItem_ReturnsFalse()
{
var group = Group.Create("Боевики");
Assert.False(group.SetWeight(Guid.NewGuid(), 3));
}
[Fact]
public void Reorder_KeepsUnmentionedAfterRequested()
{
var group = Group.Create("Боевики");
var a = group.AddElement(GroupElementKind.Show, Guid.NewGuid())!;
var b = group.AddElement(GroupElementKind.Show, Guid.NewGuid())!;
var c = group.AddElement(GroupElementKind.Show, Guid.NewGuid())!;
group.Reorder([c.Id]);
Assert.Equal([c.Id, a.Id, b.Id], Order(group));
}
[Fact]
public void SetFilter_TreatsBlankAsAbsent()
{
var group = Group.Create("Боевики");
group.SetFilter(" ");
Assert.Null(group.FilterJson);
}
[Fact]
public void UpdateStats_StoresSnapshot()
{
var group = Group.Create("Боевики");
var at = new DateTimeOffset(2026, 1, 1, 0, 0, 0, TimeSpan.Zero);
group.UpdateStats(3, 42, TimeSpan.FromHours(18), at);
Assert.Equal(3, group.ItemCount);
Assert.Equal(42, group.UnitCount);
Assert.Equal(TimeSpan.FromHours(18), group.TotalDuration);
Assert.Equal(at, group.StatsComputedAt);
}
}