using TeleWave.Domain.Broadcast; using Xunit; namespace TeleWave.Domain.Tests.Broadcast; public class BumperTemplateTests { private static BumperTemplate NewTemplate() => Channel.Create("c", "c", DateTimeOffset.UnixEpoch).AddBumperTemplate("Block"); [Fact] public void Create_HasDefaultsAndOneVariant() { var t = NewTemplate(); Assert.Equal(BumperTemplate.DefaultBackgroundColor, t.BackgroundColor); Assert.Null(t.AudioExtension); Assert.Null(t.BackgroundImageId); Assert.Equal(0, t.Revision); var v = Assert.Single(t.Variants); Assert.Equal(BumperTrigger.OnShowChange, v.Trigger); } [Fact] public void AddVariant_AppendsWithNextPosition() { var t = NewTemplate(); var v1 = t.AddVariant("Text 2"); Assert.Equal(1, v1.Position); Assert.Equal(2, t.Variants.Count); Assert.Equal(v1, t.FindVariant(v1.Id)); Assert.Null(t.FindVariant(Guid.NewGuid())); } [Fact] public void RemoveVariant_CannotRemoveLast() { var t = NewTemplate(); var first = t.Variants[0]; Assert.False(t.RemoveVariant(first.Id)); // единственный — нельзя var second = t.AddVariant("Text 2"); Assert.True(t.RemoveVariant(second.Id)); Assert.False(t.RemoveVariant(Guid.NewGuid())); Assert.Single(t.Variants); } [Fact] public void UpdateStyle_ChangesColorsAndName() { var t = NewTemplate(); t.UpdateStyle("New", "0x111111", "0x222222", "0x333333", "black"); Assert.Equal("New", t.Name); Assert.Equal("0x111111", t.BackgroundColor); Assert.Equal("0x333333", t.AccentColor); Assert.Equal("black", t.TextColor); } [Fact] public void SetAudio_BumpsRevision_AndStoresDuration() { var t = NewTemplate(); t.SetAudio(".mp3", 12.5); Assert.Equal(".mp3", t.AudioExtension); Assert.Equal(12.5, t.AudioDurationSeconds); Assert.Equal(1, t.Revision); } [Fact] public void SetAudio_NonPositiveDuration_StoresNull() { var t = NewTemplate(); t.SetAudio(".wav", 0); Assert.Null(t.AudioDurationSeconds); } [Fact] public void ClearAudio_ResetsAndBumpsRevisionOnceWhenPresent() { var t = NewTemplate(); t.SetAudio(".mp3", 5); // rev 1 t.ClearAudio(); // rev 2 Assert.Null(t.AudioExtension); Assert.Equal(2, t.Revision); t.ClearAudio(); // уже пусто — ревизия не двигается Assert.Equal(2, t.Revision); } [Fact] public void BackgroundImage_SetAndClear_BumpRevision() { var t = NewTemplate(); var img = Guid.NewGuid(); t.SetBackgroundImage(img); // rev 1 Assert.Equal(img, t.BackgroundImageId); Assert.Equal(1, t.Revision); t.ClearBackgroundImage(); // rev 2 Assert.Null(t.BackgroundImageId); Assert.Equal(2, t.Revision); t.ClearBackgroundImage(); // уже пусто Assert.Equal(2, t.Revision); } }