Files
TeleWave/backend/tests/TeleWave.Domain.Tests/Broadcast/ChannelShowTests.cs
T

90 lines
2.5 KiB
C#

using TeleWave.Domain.Broadcast;
using Xunit;
namespace TeleWave.Domain.Tests.Broadcast;
public class ChannelShowTests
{
private static ChannelShow NewShow() =>
Channel
.Create("c", "c", DateTimeOffset.UnixEpoch)
.AddShow(Guid.NewGuid(), 1, BlockMode.Count, 1);
[Fact]
public void Create_HasDefaultPreferredMultiplier_AndNoWindows()
{
var cs = NewShow();
Assert.Equal(ChannelShow.DefaultPreferredWeightMultiplier, cs.PreferredWeightMultiplier);
Assert.Empty(cs.PreferredHours);
Assert.True(cs.IsEnabled);
Assert.Equal(0, cs.NextEpisodeIndex);
}
[Fact]
public void Update_ChangesCoreFields()
{
var cs = NewShow();
cs.Update(9, BlockMode.Duration, 45, false);
Assert.Equal(9, cs.Weight);
Assert.Equal(BlockMode.Duration, cs.BlockMode);
Assert.Equal(45, cs.BlockValue);
Assert.False(cs.IsEnabled);
}
[Fact]
public void SetPreferredHours_ClampsMultiplier_AndNormalizesWindows()
{
var cs = NewShow();
cs.SetPreferredHours(
0, // < 1 → должно стать 1
[
(18, 23), // валидное
(10, 10), // start == end → отбрасывается
(5, 25), // end > 24 → отбрасывается
(-1, 3), // start < 0 → отбрасывается
(18, 23), // дубликат → схлопывается
]
);
Assert.Equal(1, cs.PreferredWeightMultiplier);
var window = Assert.Single(cs.PreferredHours);
Assert.Equal(18, window.StartHour);
Assert.Equal(23, window.EndHour);
}
[Fact]
public void SetPreferredHours_ReplacesPreviousSet()
{
var cs = NewShow();
cs.SetPreferredHours(3, [(1, 2)]);
cs.SetPreferredHours(2, [(8, 9), (20, 22)]);
Assert.Equal(2, cs.PreferredWeightMultiplier);
Assert.Equal(2, cs.PreferredHours.Count);
}
[Fact]
public void IsPreferredAt_ChecksWindows()
{
var cs = NewShow();
cs.SetPreferredHours(3, [(18, 23)]);
Assert.True(cs.IsPreferredAt(18));
Assert.True(cs.IsPreferredAt(22));
Assert.False(cs.IsPreferredAt(23)); // конец исключается
Assert.False(cs.IsPreferredAt(9));
}
[Fact]
public void SetNextEpisodeIndex_MovesCursor()
{
var cs = NewShow();
cs.SetNextEpisodeIndex(5);
Assert.Equal(5, cs.NextEpisodeIndex);
}
}