Add project reference for TeleWave.Infrastructure: include TeleWave.Infrastructure.csproj in TeleWave.Application.Tests project to support additional testing capabilities.

This commit is contained in:
Leonid Pershin
2026-07-25 20:12:04 +03:00
parent ed240ef73c
commit 4611f90d11
18 changed files with 2027 additions and 0 deletions
@@ -0,0 +1,167 @@
using TeleWave.Domain.Broadcast;
using Xunit;
namespace TeleWave.Domain.Tests.Broadcast;
public class ChannelTests
{
private static readonly DateTimeOffset Epoch = new(2026, 1, 1, 0, 0, 0, TimeSpan.Zero);
private static Channel NewChannel() => Channel.Create("News", "news", Epoch);
[Fact]
public void Create_SetsDefaults_AndSeedsDefaultBumperTemplate()
{
var channel = NewChannel();
Assert.NotEqual(Guid.Empty, channel.Id);
Assert.Equal("News", channel.Name);
Assert.Equal("news", channel.Slug);
Assert.True(channel.IsEnabled);
Assert.Equal(Epoch, channel.EpochUtc);
Assert.Equal(AdInsertion.BetweenBlocks, channel.AdInsertion);
Assert.False(channel.BumpersEnabled);
Assert.Equal(BumperSelection.Rotation, channel.BumperSelection);
Assert.Equal(1.0, channel.BumperShowChangeChance);
Assert.Equal(1.0, channel.BumperEpisodeChangeChance);
var template = Assert.Single(channel.BumperTemplates);
Assert.True(template.IsDefault);
Assert.Equal(0, template.Position);
Assert.Single(template.Variants); // дефолтный подблок
}
[Fact]
public void UpdateSettings_ChangesFields()
{
var channel = NewChannel();
var filler = Guid.NewGuid();
channel.UpdateSettings("N2", false, AdInsertion.BetweenEpisodes, 4, true, filler);
Assert.Equal("N2", channel.Name);
Assert.False(channel.IsEnabled);
Assert.Equal(AdInsertion.BetweenEpisodes, channel.AdInsertion);
Assert.Equal(4, channel.AdsPerBreak);
Assert.True(channel.BumpersEnabled);
Assert.Equal(filler, channel.FillerAssetId);
}
[Theory]
[InlineData(-1, 2.0, -5.0, 1.0, 0.0)]
[InlineData(30, 0.3, 0.9, 0.3, 0.9)]
public void UpdateBumperSettings_ClampsChancesAndInterval(
int interval,
double show,
double episode,
double expectedShow,
double expectedEpisode
)
{
var channel = NewChannel();
channel.UpdateBumperSettings(
BumperFont.Serif,
interval,
BumperSelection.WeightedRandom,
show,
episode
);
Assert.Equal(BumperFont.Serif, channel.BumperFont);
Assert.Equal(Math.Max(0, interval), channel.BumperMinIntervalMinutes);
Assert.Equal(BumperSelection.WeightedRandom, channel.BumperSelection);
Assert.Equal(expectedShow, channel.BumperShowChangeChance);
Assert.Equal(expectedEpisode, channel.BumperEpisodeChangeChance);
}
[Fact]
public void AddBumperTemplate_AppendsWithNextPosition()
{
var channel = NewChannel();
var t1 = channel.AddBumperTemplate("Block 2");
var t2 = channel.AddBumperTemplate("Block 3");
Assert.Equal(1, t1.Position);
Assert.Equal(2, t2.Position);
Assert.False(t1.IsDefault);
Assert.Equal(3, channel.BumperTemplates.Count);
Assert.Equal(t1, channel.FindBumperTemplate(t1.Id));
Assert.Null(channel.FindBumperTemplate(Guid.NewGuid()));
}
[Fact]
public void RemoveBumperTemplate_CannotRemoveDefault_CanRemoveOthers()
{
var channel = NewChannel();
var def = channel.BumperTemplates[0];
var extra = channel.AddBumperTemplate("Block 2");
Assert.False(channel.RemoveBumperTemplate(def.Id));
Assert.True(channel.RemoveBumperTemplate(extra.Id));
Assert.False(channel.RemoveBumperTemplate(Guid.NewGuid()));
Assert.Single(channel.BumperTemplates);
}
[Fact]
public void Shows_AddFindRemoveHas()
{
var channel = NewChannel();
var showId = Guid.NewGuid();
var cs = channel.AddShow(showId, 5, BlockMode.Count, 3);
Assert.Equal(showId, cs.ShowId);
Assert.Equal(5, cs.Weight);
Assert.True(channel.HasShow(showId));
Assert.Equal(cs, channel.FindShow(cs.Id));
Assert.True(channel.RemoveShow(cs.Id));
Assert.False(channel.RemoveShow(cs.Id));
Assert.False(channel.HasShow(showId));
}
[Fact]
public void Ads_AppendWithPosition_AndRemove()
{
var channel = NewChannel();
var a1 = channel.AddAd(Guid.NewGuid());
var a2 = channel.AddAd(Guid.NewGuid());
Assert.Equal(0, a1.Position);
Assert.Equal(1, a2.Position);
Assert.True(channel.HasAd(a1.MediaAssetId));
Assert.True(channel.RemoveAd(a1.Id));
Assert.False(channel.RemoveAd(a1.Id));
}
[Fact]
public void AddOverride_OneTime_AndWeekly()
{
var channel = NewChannel();
var one = channel.AddOverride(OverrideMode.Exclusive, Epoch, Epoch.AddHours(2));
Assert.Equal(OverrideRecurrence.OneTime, one.Recurrence);
Assert.Equal(Epoch, one.StartsAtUtc);
var weekly = channel.AddWeeklyOverride(OverrideMode.Boost, 6, 600, 720);
Assert.Equal(OverrideRecurrence.Weekly, weekly.Recurrence);
Assert.Equal(6, weekly.DayOfWeek);
Assert.Equal(600, weekly.StartMinute);
Assert.Equal(2, channel.Overrides.Count);
Assert.True(channel.RemoveOverride(one.Id));
Assert.False(channel.RemoveOverride(Guid.NewGuid()));
}
[Fact]
public void Cursors_AreMovedBySetters()
{
var channel = NewChannel();
channel.SetNextAdIndex(7);
channel.SetNextBumperIndex(3);
Assert.Equal(7, channel.NextAdIndex);
Assert.Equal(3, channel.NextBumperIndex);
}
}