using Microsoft.EntityFrameworkCore; using TeleWave.Application.Broadcast; using TeleWave.Application.Broadcast.CreateChannel; using TeleWave.Application.Broadcast.UpdateChannelSettings; using TeleWave.Application.Tests.Support; using TeleWave.Domain.Broadcast; using TeleWave.Domain.Library; using TeleWave.Domain.Media; using Xunit; namespace TeleWave.Application.Tests.Broadcast; public class ChannelHandlersTests { private static readonly DateTimeOffset T0 = new(2026, 1, 1, 0, 0, 0, TimeSpan.Zero); [Fact] public async Task CreateChannel_Succeeds_AndRejectsDuplicateSlug() { var fixture = new TestDb(); await using var db = fixture.New(); var ok = await new CreateChannelCommandHandler(db).Handle( new CreateChannelCommand("News", "news"), CancellationToken.None ); Assert.True(ok.IsSuccess); await db.SaveChangesAsync(CancellationToken.None); var dup = await new CreateChannelCommandHandler(db).Handle( new CreateChannelCommand("Other", "news"), CancellationToken.None ); Assert.False(dup.IsSuccess); Assert.Equal(ChannelErrors.DuplicateSlug, dup.Error); } [Fact] public async Task UpdateChannelSettings_UpdatesBumperChances() { var fixture = new TestDb(); var channel = Channel.Create("c", "c", T0); await using (var seed = fixture.New()) { seed.Channels.Add(channel); await seed.SaveChangesAsync(CancellationToken.None); } await using var db = fixture.New(); var result = await new UpdateChannelSettingsCommandHandler(db).Handle( new UpdateChannelSettingsCommand( channel.Id, "c", true, true, new BumperSettingsInput( BumperFont.Sans, 5, BumperSelection.WeightedRandom, 0.5, 0.2 ), null ), CancellationToken.None ); Assert.True(result.IsSuccess); await db.SaveChangesAsync(CancellationToken.None); await using var verify = fixture.New(); var stored = await verify.Channels.FindAsync(channel.Id); Assert.Equal(0.5, stored!.BumperShowChangeChance); Assert.Equal(0.2, stored.BumperEpisodeChangeChance); Assert.Equal(BumperSelection.WeightedRandom, stored.BumperSelection); } }