using TeleWave.Application.Media.Stats; using TeleWave.Application.Tests.Support; using TeleWave.Domain.Media; using Xunit; namespace TeleWave.Application.Tests.Media; public class MediaStatsTests { private static MediaAsset Pending(string name) => MediaAsset.Register(name, ".mkv", MediaSource.Upload); private static MediaAsset Processing(string name) { var a = Pending(name); a.MarkProcessing(); return a; } private static MediaAsset Ready(string name) { var a = Pending(name); a.MarkProcessing(); a.MarkReady( new MediaReadyInfo(TimeSpan.FromMinutes(20), 2, 600, 1920, 1080, "h264", "aac", "assets/x") ); return a; } [Fact] public async Task Stats_CountsQueuedAndProcessing_AndAveragesReady_ExcludingGenerated() { var fixture = new TestDb(); await using (var seed = fixture.New()) { seed.MediaAssets.AddRange( Pending("a.mkv"), Pending("b.mkv"), Processing("c.mkv"), Ready("d.mkv"), MediaAsset.RegisterGenerated("Заставка") // Generated — не входит в статистику ); await seed.SaveChangesAsync(CancellationToken.None); } await using var db = fixture.New(); var stats = await new GetMediaStatsQueryHandler(db).Handle( new GetMediaStatsQuery(), CancellationToken.None ); Assert.Equal(2, stats.Queued); // два Pending (Generated исключён) Assert.Equal(1, stats.Processing); Assert.NotNull(stats.AverageProcessingSeconds); Assert.True(stats.AverageProcessingSeconds >= 0); } }