Browse Source

replace FluentAssertions with Shouldly

pull/2041/head
Jason Dove 1 week ago
parent
commit
75958e1e3c
No known key found for this signature in database
  1. 6
      ErsatzTV.Core.Tests/Domain/PlayoutItemTests.cs
  2. 22
      ErsatzTV.Core.Tests/Emby/EmbyPathReplacementServiceTests.cs
  3. 2
      ErsatzTV.Core.Tests/ErsatzTV.Core.Tests.csproj
  4. 134
      ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs
  5. 14
      ErsatzTV.Core.Tests/FFmpeg/FFmpegStreamSelectorTests.cs
  6. 38
      ErsatzTV.Core.Tests/FFmpeg/HlsPlaylistFilterTests.cs
  7. 4
      ErsatzTV.Core.Tests/FFmpeg/WatermarkCalculatorTests.cs
  8. 6
      ErsatzTV.Core.Tests/Iptv/ChannelIdentifierTests.cs
  9. 24
      ErsatzTV.Core.Tests/Jellyfin/JellyfinPathReplacementServiceTests.cs
  10. 14
      ErsatzTV.Core.Tests/Jellyfin/JellyfinUrlTests.cs
  11. 22
      ErsatzTV.Core.Tests/Metadata/FallbackMetadataProviderTests.cs
  12. 20
      ErsatzTV.Core.Tests/Plex/PlexPathReplacementServiceTests.cs
  13. 8
      ErsatzTV.Core.Tests/Scheduling/BlockScheduling/BlockPlayoutChangeDetectionTests.cs
  14. 18
      ErsatzTV.Core.Tests/Scheduling/BlockScheduling/EffectiveBlockTests.cs
  15. 18
      ErsatzTV.Core.Tests/Scheduling/ChronologicalContentTests.cs
  16. 14
      ErsatzTV.Core.Tests/Scheduling/CustomOrderContentTests.cs
  17. 32
      ErsatzTV.Core.Tests/Scheduling/MultiPartEpisodeGrouperTests.cs
  18. 6
      ErsatzTV.Core.Tests/Scheduling/PlaylistEnumeratorTests.cs
  19. 1004
      ErsatzTV.Core.Tests/Scheduling/PlayoutBuilderTests.cs
  20. 66
      ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerBaseTests.cs
  21. 686
      ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerDurationTests.cs
  22. 910
      ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerFloodTests.cs
  23. 504
      ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerMultipleTests.cs
  24. 464
      ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerOneTests.cs
  25. 38
      ErsatzTV.Core.Tests/Scheduling/PlayoutTemplateSelectorTests.cs
  26. 16
      ErsatzTV.Core.Tests/Scheduling/RandomizedContentTests.cs
  27. 18
      ErsatzTV.Core.Tests/Scheduling/SeasonEpisodeContentTests.cs
  28. 26
      ErsatzTV.Core.Tests/Scheduling/ShuffledContentTests.cs
  29. 12
      ErsatzTV.FFmpeg.Tests/Capabilities/Vaapi/VaapiCapabilityParserTests.cs
  30. 2
      ErsatzTV.FFmpeg.Tests/ErsatzTV.FFmpeg.Tests.csproj
  31. 6
      ErsatzTV.FFmpeg.Tests/Filter/WatermarkOpacityFilterTests.cs
  32. 42
      ErsatzTV.FFmpeg.Tests/PipelineBuilderBaseTests.cs
  33. 6
      ErsatzTV.Infrastructure.Tests/Data/Repositories/Caching/CachingSearchRepositoryTests.cs
  34. 2
      ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj
  35. 4
      ErsatzTV.Infrastructure.Tests/Metadata/LocalStatisticsProviderTests.cs
  36. 4
      ErsatzTV.Infrastructure.Tests/Search/SearchQueryParserTests.cs
  37. 58
      ErsatzTV.Scanner.Tests/Core/FFmpeg/TranscodingTests.cs
  38. 34
      ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs
  39. 28
      ErsatzTV.Scanner.Tests/Core/Metadata/MovieFolderScannerTests.cs
  40. 38
      ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/ArtistNfoReaderTests.cs
  41. 128
      ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/EpisodeNfoReaderTests.cs
  42. 50
      ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/MovieNfoReaderTests.cs
  43. 44
      ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/MusicVideoNfoReaderTests.cs
  44. 50
      ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/OtherVideoNfoReaderTests.cs
  45. 42
      ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/ShowNfoReaderTests.cs
  46. 2
      ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj

6
ErsatzTV.Core.Tests/Domain/PlayoutItemTests.cs

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
using ErsatzTV.Core.Domain;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Domain;
@ -18,7 +18,7 @@ public class PlayoutItemTests @@ -18,7 +18,7 @@ public class PlayoutItemTests
string actual = item.GetDisplayDuration();
actual.Should().Be("3:05:04");
actual.ShouldBe("3:05:04");
}
[Test]
@ -32,6 +32,6 @@ public class PlayoutItemTests @@ -32,6 +32,6 @@ public class PlayoutItemTests
string actual = item.GetDisplayDuration();
actual.Should().Be("27:05:04");
actual.ShouldBe("27:05:04");
}
}

22
ErsatzTV.Core.Tests/Emby/EmbyPathReplacementServiceTests.cs

@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain; @@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Emby;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.FFmpeg.Runtime;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
@ -42,7 +42,7 @@ public class EmbyPathReplacementServiceTests @@ -42,7 +42,7 @@ public class EmbyPathReplacementServiceTests
0,
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
}
[Test]
@ -74,7 +74,7 @@ public class EmbyPathReplacementServiceTests @@ -74,7 +74,7 @@ public class EmbyPathReplacementServiceTests
0,
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -98,7 +98,7 @@ public class EmbyPathReplacementServiceTests @@ -98,7 +98,7 @@ public class EmbyPathReplacementServiceTests
@"\\192.168.1.100\Something\Some Shared Folder",
@"C:\mnt\something else\Some Shared Folder");
result.Should().Be(@"C:\mnt\something else\Some Shared Folder\Some Movie\Some Movie.mkv");
result.ShouldBe(@"C:\mnt\something else\Some Shared Folder\Some Movie\Some Movie.mkv");
}
[Test]
@ -130,7 +130,7 @@ public class EmbyPathReplacementServiceTests @@ -130,7 +130,7 @@ public class EmbyPathReplacementServiceTests
0,
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -162,7 +162,7 @@ public class EmbyPathReplacementServiceTests @@ -162,7 +162,7 @@ public class EmbyPathReplacementServiceTests
0,
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -194,7 +194,7 @@ public class EmbyPathReplacementServiceTests @@ -194,7 +194,7 @@ public class EmbyPathReplacementServiceTests
0,
@"\\SERVERNAME\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -226,7 +226,7 @@ public class EmbyPathReplacementServiceTests @@ -226,7 +226,7 @@ public class EmbyPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
}
[Test]
@ -258,7 +258,7 @@ public class EmbyPathReplacementServiceTests @@ -258,7 +258,7 @@ public class EmbyPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -290,7 +290,7 @@ public class EmbyPathReplacementServiceTests @@ -290,7 +290,7 @@ public class EmbyPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -322,6 +322,6 @@ public class EmbyPathReplacementServiceTests @@ -322,6 +322,6 @@ public class EmbyPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/Some Movie/Some Movie.mkv");
}
}

2
ErsatzTV.Core.Tests/ErsatzTV.Core.Tests.csproj

@ -9,7 +9,6 @@ @@ -9,7 +9,6 @@
<ItemGroup>
<PackageReference Include="Bugsnag" Version="4.0.0" />
<PackageReference Include="CliWrap" Version="3.8.2" />
<PackageReference Include="FluentAssertions" Version="8.2.0" />
<PackageReference Include="LanguageExt.Core" Version="4.4.9" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
@ -27,6 +26,7 @@ @@ -27,6 +26,7 @@
<PackageReference Include="Serilog" Version="4.2.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.Debug" Version="3.0.0" />
<PackageReference Include="Shouldly" Version="4.3.0" />
</ItemGroup>
<ItemGroup>

134
ErsatzTV.Core.Tests/FFmpeg/FFmpegPlaybackSettingsCalculatorTests.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.FFmpeg;
using ErsatzTV.Core.Interfaces.FFmpeg;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.FFmpeg;
@ -32,7 +32,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -32,7 +32,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.FormatFlags.Should().NotContain("+genpts");
actual.FormatFlags.ShouldNotContain("+genpts");
}
[Test]
@ -57,7 +57,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -57,7 +57,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ThreadCount.Should().Be(7);
actual.ThreadCount.ShouldBe(7);
}
[Test]
@ -78,7 +78,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -78,7 +78,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ThreadCount.Should().Be(7);
actual.ThreadCount.ShouldBe(7);
}
[Test]
@ -100,8 +100,8 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -100,8 +100,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
None);
string[] expected = { "+genpts", "+discardcorrupt", "+igndts" };
actual.FormatFlags.Count.Should().Be(expected.Length);
actual.FormatFlags.Should().Contain(expected);
actual.FormatFlags.Count.ShouldBe(expected.Length);
expected.ShouldBeSubsetOf(actual.FormatFlags);
}
[Test]
@ -123,8 +123,8 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -123,8 +123,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
None);
string[] expected = { "+genpts", "+discardcorrupt", "+igndts" };
actual.FormatFlags.Count.Should().Be(expected.Length);
actual.FormatFlags.Should().Contain(expected);
actual.FormatFlags.Count.ShouldBe(expected.Length);
expected.ShouldBeSubsetOf(actual.FormatFlags);
}
[Test]
@ -145,7 +145,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -145,7 +145,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.RealtimeOutput.Should().BeTrue();
actual.RealtimeOutput.ShouldBeTrue();
}
[Test]
@ -166,7 +166,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -166,7 +166,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.RealtimeOutput.Should().BeTrue();
actual.RealtimeOutput.ShouldBeTrue();
}
[Test]
@ -189,8 +189,8 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -189,8 +189,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.StreamSeek.IsSome.Should().BeTrue();
actual.StreamSeek.IfNone(TimeSpan.Zero).Should().Be(TimeSpan.FromMinutes(5));
actual.StreamSeek.IsSome.ShouldBeTrue();
actual.StreamSeek.IfNone(TimeSpan.Zero).ShouldBe(TimeSpan.FromMinutes(5));
}
[Test]
@ -213,8 +213,8 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -213,8 +213,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.StreamSeek.IsSome.Should().BeTrue();
actual.StreamSeek.IfNone(TimeSpan.Zero).Should().Be(TimeSpan.FromMinutes(5));
actual.StreamSeek.IsSome.ShouldBeTrue();
actual.StreamSeek.IfNone(TimeSpan.Zero).ShouldBe(TimeSpan.FromMinutes(5));
}
[Test]
@ -241,7 +241,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -241,7 +241,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.ScaledSize.IsNone.ShouldBeTrue();
}
[Test]
@ -268,7 +268,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -268,7 +268,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.ScaledSize.IsNone.ShouldBeTrue();
}
[Test]
@ -295,8 +295,8 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -295,8 +295,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeFalse();
actual.ScaledSize.IsNone.ShouldBeTrue();
actual.PadToDesiredResolution.ShouldBeFalse();
}
[Test]
@ -323,8 +323,8 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -323,8 +323,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeTrue();
actual.ScaledSize.IsNone.ShouldBeTrue();
actual.PadToDesiredResolution.ShouldBeTrue();
}
[Test]
@ -351,9 +351,9 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -351,9 +351,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
None);
IDisplaySize scaledSize = actual.ScaledSize.IfNone(new MediaVersion { Width = 0, Height = 0 });
scaledSize.Width.Should().Be(1280);
scaledSize.Height.Should().Be(554);
actual.PadToDesiredResolution.Should().BeTrue();
scaledSize.Width.ShouldBe(1280);
scaledSize.Height.ShouldBe(554);
actual.PadToDesiredResolution.ShouldBeTrue();
}
[Test]
@ -381,9 +381,9 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -381,9 +381,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
None);
IDisplaySize scaledSize = actual.ScaledSize.IfNone(new MediaVersion { Width = 0, Height = 0 });
scaledSize.Width.Should().Be(1280);
scaledSize.Height.Should().Be(976);
actual.PadToDesiredResolution.Should().BeFalse();
scaledSize.Width.ShouldBe(1280);
scaledSize.Height.ShouldBe(976);
actual.PadToDesiredResolution.ShouldBeFalse();
}
[Test]
@ -411,9 +411,9 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -411,9 +411,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
None);
IDisplaySize scaledSize = actual.ScaledSize.IfNone(new MediaVersion { Width = 0, Height = 0 });
scaledSize.Width.Should().Be(1694);
scaledSize.Height.Should().Be(720);
actual.PadToDesiredResolution.Should().BeFalse();
scaledSize.Width.ShouldBe(1694);
scaledSize.Height.ShouldBe(720);
actual.PadToDesiredResolution.ShouldBeFalse();
}
[Test]
@ -440,8 +440,8 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -440,8 +440,8 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeFalse();
actual.ScaledSize.IsNone.ShouldBeTrue();
actual.PadToDesiredResolution.ShouldBeFalse();
}
@ -470,9 +470,9 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -470,9 +470,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeTrue();
actual.VideoFormat.Should().Be(FFmpegProfileVideoFormat.H264);
actual.ScaledSize.IsNone.ShouldBeTrue();
actual.PadToDesiredResolution.ShouldBeTrue();
actual.VideoFormat.ShouldBe(FFmpegProfileVideoFormat.H264);
}
[Test]
@ -502,9 +502,9 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -502,9 +502,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeFalse();
actual.VideoFormat.Should().Be(FFmpegProfileVideoFormat.H264);
actual.ScaledSize.IsNone.ShouldBeTrue();
actual.PadToDesiredResolution.ShouldBeFalse();
actual.VideoFormat.ShouldBe(FFmpegProfileVideoFormat.H264);
}
[Test]
@ -533,9 +533,9 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -533,9 +533,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeFalse();
actual.VideoFormat.Should().Be(FFmpegProfileVideoFormat.Copy);
actual.ScaledSize.IsNone.ShouldBeTrue();
actual.PadToDesiredResolution.ShouldBeFalse();
actual.VideoFormat.ShouldBe(FFmpegProfileVideoFormat.Copy);
}
[Test]
@ -564,9 +564,9 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -564,9 +564,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeFalse();
actual.VideoFormat.Should().Be(FFmpegProfileVideoFormat.H264);
actual.ScaledSize.IsNone.ShouldBeTrue();
actual.PadToDesiredResolution.ShouldBeFalse();
actual.VideoFormat.ShouldBe(FFmpegProfileVideoFormat.H264);
}
[Test]
@ -594,9 +594,9 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -594,9 +594,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeTrue();
actual.VideoBitrate.IfNone(0).Should().Be(2525);
actual.ScaledSize.IsNone.ShouldBeTrue();
actual.PadToDesiredResolution.ShouldBeTrue();
actual.VideoBitrate.IfNone(0).ShouldBe(2525);
}
[Test]
@ -625,9 +625,9 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -625,9 +625,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeFalse();
actual.VideoBitrate.IfNone(0).Should().Be(2525);
actual.ScaledSize.IsNone.ShouldBeTrue();
actual.PadToDesiredResolution.ShouldBeFalse();
actual.VideoBitrate.IfNone(0).ShouldBe(2525);
}
[Test]
@ -655,9 +655,9 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -655,9 +655,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeTrue();
actual.VideoBufferSize.IfNone(0).Should().Be(2525);
actual.ScaledSize.IsNone.ShouldBeTrue();
actual.PadToDesiredResolution.ShouldBeTrue();
actual.VideoBufferSize.IfNone(0).ShouldBe(2525);
}
[Test]
@ -686,9 +686,9 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -686,9 +686,9 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.ScaledSize.IsNone.Should().BeTrue();
actual.PadToDesiredResolution.Should().BeFalse();
actual.VideoBufferSize.IfNone(0).Should().Be(2525);
actual.ScaledSize.IsNone.ShouldBeTrue();
actual.PadToDesiredResolution.ShouldBeFalse();
actual.VideoBufferSize.IfNone(0).ShouldBe(2525);
}
[Test]
@ -712,7 +712,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -712,7 +712,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.AudioFormat.Should().Be(FFmpegProfileAudioFormat.Aac);
actual.AudioFormat.ShouldBe(FFmpegProfileAudioFormat.Aac);
}
[Test]
@ -736,7 +736,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -736,7 +736,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.AudioFormat.Should().Be(FFmpegProfileAudioFormat.Aac);
actual.AudioFormat.ShouldBe(FFmpegProfileAudioFormat.Aac);
}
[Test]
@ -760,7 +760,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -760,7 +760,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.AudioFormat.Should().Be(FFmpegProfileAudioFormat.Copy);
actual.AudioFormat.ShouldBe(FFmpegProfileAudioFormat.Copy);
}
[Test]
@ -785,7 +785,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -785,7 +785,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.AudioBitrate.IfNone(0).Should().Be(2424);
actual.AudioBitrate.IfNone(0).ShouldBe(2424);
}
[Test]
@ -810,7 +810,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -810,7 +810,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.AudioBufferSize.IfNone(0).Should().Be(2424);
actual.AudioBufferSize.IfNone(0).ShouldBe(2424);
}
[Test]
@ -835,7 +835,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -835,7 +835,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.AudioChannels.IfNone(0).Should().Be(6);
actual.AudioChannels.IfNone(0).ShouldBe(6);
}
[Test]
@ -860,7 +860,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -860,7 +860,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.AudioSampleRate.IfNone(0).Should().Be(48);
actual.AudioSampleRate.IfNone(0).ShouldBe(48);
}
[Test]
@ -884,7 +884,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -884,7 +884,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.AudioChannels.IfNone(0).Should().Be(6);
actual.AudioChannels.IfNone(0).ShouldBe(6);
}
[Test]
@ -908,7 +908,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -908,7 +908,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.AudioSampleRate.IfNone(0).Should().Be(48);
actual.AudioSampleRate.IfNone(0).ShouldBe(48);
}
[Test]
@ -938,7 +938,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -938,7 +938,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.AudioDuration.IfNone(TimeSpan.MinValue).Should().Be(TimeSpan.FromMinutes(2));
actual.AudioDuration.IfNone(TimeSpan.MinValue).ShouldBe(TimeSpan.FromMinutes(2));
}
[Test]
@ -962,7 +962,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -962,7 +962,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.NormalizeLoudnessMode.Should().Be(NormalizeLoudnessMode.LoudNorm);
actual.NormalizeLoudnessMode.ShouldBe(NormalizeLoudnessMode.LoudNorm);
}
}
@ -988,7 +988,7 @@ public class FFmpegPlaybackSettingsCalculatorTests @@ -988,7 +988,7 @@ public class FFmpegPlaybackSettingsCalculatorTests
false,
None);
actual.HardwareAcceleration.Should().Be(HardwareAccelerationKind.Qsv);
actual.HardwareAcceleration.ShouldBe(HardwareAccelerationKind.Qsv);
}
}

14
ErsatzTV.Core.Tests/FFmpeg/FFmpegStreamSelectorTests.cs

@ -3,7 +3,7 @@ using ErsatzTV.Core.FFmpeg; @@ -3,7 +3,7 @@ using ErsatzTV.Core.FFmpeg;
using ErsatzTV.Core.Interfaces.Metadata;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Infrastructure.Scripting;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
@ -64,10 +64,10 @@ public class FFmpegStreamSelectorTests @@ -64,10 +64,10 @@ public class FFmpegStreamSelectorTests
Substitute.For<ILogger<FFmpegStreamSelector>>());
Option<MediaStream> selectedStream = await selector.SelectAudioStream(audioVersion, StreamingMode.TransportStream, channel, "jpn", "Whatever");
selectedStream.IsSome.Should().BeTrue();
selectedStream.IsSome.ShouldBeTrue();
foreach (MediaStream stream in selectedStream)
{
stream.Language.Should().Be("ja");
stream.Language.ShouldBe("ja");
}
}
@ -119,10 +119,10 @@ public class FFmpegStreamSelectorTests @@ -119,10 +119,10 @@ public class FFmpegStreamSelectorTests
Substitute.For<ILogger<FFmpegStreamSelector>>());
Option<MediaStream> selectedStream = await selector.SelectAudioStream(audioVersion, StreamingMode.TransportStream, channel, null, channel.PreferredAudioTitle);
selectedStream.IsSome.Should().BeTrue();
selectedStream.IsSome.ShouldBeTrue();
foreach (MediaStream stream in selectedStream)
{
stream.Language.Should().Be("ja");
stream.Language.ShouldBe("ja");
}
}
@ -166,10 +166,10 @@ public class FFmpegStreamSelectorTests @@ -166,10 +166,10 @@ public class FFmpegStreamSelectorTests
channel,
"heb",
ChannelSubtitleMode.Any);
selectedStream.IsSome.Should().BeTrue();
selectedStream.IsSome.ShouldBeTrue();
foreach (Subtitle stream in selectedStream)
{
stream.Language.Should().Be("he");
stream.Language.ShouldBe("he");
}
}
}

38
ErsatzTV.Core.Tests/FFmpeg/HlsPlaylistFilterTests.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
using ErsatzTV.Core.FFmpeg;
using ErsatzTV.Core.Interfaces.FFmpeg;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
@ -42,9 +42,9 @@ live001139.ts").Split(Environment.NewLine); @@ -42,9 +42,9 @@ live001139.ts").Split(Environment.NewLine);
TrimPlaylistResult result = _hlsPlaylistFilter.TrimPlaylist(start, start.AddSeconds(-30), input);
result.PlaylistStart.Should().Be(start);
result.Sequence.Should().Be(1137);
result.Playlist.Should().Be(
result.PlaylistStart.ShouldBe(start);
result.Sequence.ShouldBe(1137);
result.Playlist.ShouldBe(
NormalizeLineEndings(
@"#EXTM3U
#EXT-X-VERSION:6
@ -87,9 +87,9 @@ live001139.ts").Split(Environment.NewLine); @@ -87,9 +87,9 @@ live001139.ts").Split(Environment.NewLine);
TrimPlaylistResult result = _hlsPlaylistFilter.TrimPlaylist(start, start.AddSeconds(-30), input, 2);
result.PlaylistStart.Should().Be(start);
result.Sequence.Should().Be(1137);
result.Playlist.Should().Be(
result.PlaylistStart.ShouldBe(start);
result.Sequence.ShouldBe(1137);
result.Playlist.ShouldBe(
NormalizeLineEndings(
@"#EXTM3U
#EXT-X-VERSION:6
@ -134,9 +134,9 @@ live001139.ts").Split(Environment.NewLine); @@ -134,9 +134,9 @@ live001139.ts").Split(Environment.NewLine);
int.MaxValue,
true);
result.PlaylistStart.Should().Be(start);
result.Sequence.Should().Be(1137);
result.Playlist.Should().Be(
result.PlaylistStart.ShouldBe(start);
result.Sequence.ShouldBe(1137);
result.Playlist.ShouldBe(
NormalizeLineEndings(
@"#EXTM3U
#EXT-X-VERSION:6
@ -180,9 +180,9 @@ live001139.ts").Split(Environment.NewLine); @@ -180,9 +180,9 @@ live001139.ts").Split(Environment.NewLine);
TrimPlaylistResult result = _hlsPlaylistFilter.TrimPlaylist(start, start.AddSeconds(6), input, 1);
result.PlaylistStart.Should().Be(start.AddSeconds(8));
result.Sequence.Should().Be(1139);
result.Playlist.Should().Be(
result.PlaylistStart.ShouldBe(start.AddSeconds(8));
result.Sequence.ShouldBe(1139);
result.Playlist.ShouldBe(
NormalizeLineEndings(
@"#EXTM3U
#EXT-X-VERSION:6
@ -220,9 +220,9 @@ live001139.ts").Split(Environment.NewLine); @@ -220,9 +220,9 @@ live001139.ts").Split(Environment.NewLine);
TrimPlaylistResult result = _hlsPlaylistFilter.TrimPlaylist(start, start.AddSeconds(6), input);
result.PlaylistStart.Should().Be(start);
result.Sequence.Should().Be(1137);
result.Playlist.Should().Be(
result.PlaylistStart.ShouldBe(start);
result.Sequence.ShouldBe(1137);
result.Playlist.ShouldBe(
NormalizeLineEndings(
@"#EXTM3U
#EXT-X-VERSION:6
@ -508,9 +508,9 @@ live000082.ts").Split(Environment.NewLine); @@ -508,9 +508,9 @@ live000082.ts").Split(Environment.NewLine);
TrimPlaylistResult result = _hlsPlaylistFilter.TrimPlaylist(start, start.AddSeconds(220), input);
// result.PlaylistStart.Should().Be(start);
result.Sequence.Should().Be(56);
result.Playlist.Should().Be(
// result.PlaylistStart.ShouldBe(start);
result.Sequence.ShouldBe(56);
result.Playlist.ShouldBe(
NormalizeLineEndings(
@"#EXTM3U
#EXT-X-VERSION:6

4
ErsatzTV.Core.Tests/FFmpeg/WatermarkCalculatorTests.cs

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
using ErsatzTV.Core.FFmpeg;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.FFmpeg;
@ -18,6 +18,6 @@ public class WatermarkCalculatorTests @@ -18,6 +18,6 @@ public class WatermarkCalculatorTests
15,
10);
actual.Should().HaveCount(0);
actual.Count.ShouldBe(0);
}
}

6
ErsatzTV.Core.Tests/Iptv/ChannelIdentifierTests.cs

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
using ErsatzTV.Core.Iptv;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Iptv;
@ -16,7 +16,7 @@ public class ChannelIdentifierTests @@ -16,7 +16,7 @@ public class ChannelIdentifierTests
public void TestLegacy(string channelNumber, string expected)
{
string actual = ChannelIdentifier.LegacyFromNumber(channelNumber);
actual.Should().Be(expected);
actual.ShouldBe(expected);
}
[TestCase("1.23", "C1.23.150.ersatztv.org")]
@ -28,6 +28,6 @@ public class ChannelIdentifierTests @@ -28,6 +28,6 @@ public class ChannelIdentifierTests
public void TestNew(string channelNumber, string expected)
{
string actual = ChannelIdentifier.FromNumber(channelNumber);
actual.Should().Be(expected);
actual.ShouldBe(expected);
}
}

24
ErsatzTV.Core.Tests/Jellyfin/JellyfinPathReplacementServiceTests.cs

@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain; @@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Jellyfin;
using ErsatzTV.FFmpeg.Runtime;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
@ -42,7 +42,7 @@ public class JellyfinPathReplacementServiceTests @@ -42,7 +42,7 @@ public class JellyfinPathReplacementServiceTests
0,
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
}
[Test]
@ -74,7 +74,7 @@ public class JellyfinPathReplacementServiceTests @@ -74,7 +74,7 @@ public class JellyfinPathReplacementServiceTests
0,
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -98,7 +98,7 @@ public class JellyfinPathReplacementServiceTests @@ -98,7 +98,7 @@ public class JellyfinPathReplacementServiceTests
@"\\192.168.1.100\Something\Some Shared Folder",
@"C:\mnt\something else\Some Shared Folder");
result.Should().Be(@"C:\mnt\something else\Some Shared Folder\Some Movie\Some Movie.mkv");
result.ShouldBe(@"C:\mnt\something else\Some Shared Folder\Some Movie\Some Movie.mkv");
}
[Test]
@ -130,7 +130,7 @@ public class JellyfinPathReplacementServiceTests @@ -130,7 +130,7 @@ public class JellyfinPathReplacementServiceTests
0,
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -162,7 +162,7 @@ public class JellyfinPathReplacementServiceTests @@ -162,7 +162,7 @@ public class JellyfinPathReplacementServiceTests
0,
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -194,7 +194,7 @@ public class JellyfinPathReplacementServiceTests @@ -194,7 +194,7 @@ public class JellyfinPathReplacementServiceTests
0,
@"\\SERVERNAME\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -226,7 +226,7 @@ public class JellyfinPathReplacementServiceTests @@ -226,7 +226,7 @@ public class JellyfinPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
}
[Test]
@ -258,7 +258,7 @@ public class JellyfinPathReplacementServiceTests @@ -258,7 +258,7 @@ public class JellyfinPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -290,7 +290,7 @@ public class JellyfinPathReplacementServiceTests @@ -290,7 +290,7 @@ public class JellyfinPathReplacementServiceTests
0,
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -322,7 +322,7 @@ public class JellyfinPathReplacementServiceTests @@ -322,7 +322,7 @@ public class JellyfinPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -354,6 +354,6 @@ public class JellyfinPathReplacementServiceTests @@ -354,6 +354,6 @@ public class JellyfinPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/Some Movie/Some Movie.mkv");
}
}

14
ErsatzTV.Core.Tests/Jellyfin/JellyfinUrlTests.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Jellyfin;
using FluentAssertions;
using Shouldly;
using Flurl;
using NUnit.Framework;
@ -23,7 +23,7 @@ public class JellyfinUrlTests @@ -23,7 +23,7 @@ public class JellyfinUrlTests
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
url.ToString().Should().Be("https://some.jellyfin.server/Items/2/Images/3?tag=4");
url.ToString().ShouldBe("https://some.jellyfin.server/Items/2/Images/3?tag=4");
}
[Test]
@ -41,7 +41,7 @@ public class JellyfinUrlTests @@ -41,7 +41,7 @@ public class JellyfinUrlTests
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
url.ToString().Should().Be("https://some.jellyfin.server/Items/2/Images/3?tag=4");
url.ToString().ShouldBe("https://some.jellyfin.server/Items/2/Images/3?tag=4");
}
[Test]
@ -59,7 +59,7 @@ public class JellyfinUrlTests @@ -59,7 +59,7 @@ public class JellyfinUrlTests
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
url.ToString().Should().Be("https://some.jellyfin.server:1000/Items/2/Images/3?tag=4");
url.ToString().ShouldBe("https://some.jellyfin.server:1000/Items/2/Images/3?tag=4");
}
[Test]
@ -77,7 +77,7 @@ public class JellyfinUrlTests @@ -77,7 +77,7 @@ public class JellyfinUrlTests
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
url.ToString().Should().Be("https://some.jellyfin.server:1000/Items/2/Images/3?tag=4");
url.ToString().ShouldBe("https://some.jellyfin.server:1000/Items/2/Images/3?tag=4");
}
[Test]
@ -95,7 +95,7 @@ public class JellyfinUrlTests @@ -95,7 +95,7 @@ public class JellyfinUrlTests
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
url.ToString().Should().Be("https://some.jellyfin.server/jellyfin/Items/2/Images/3?tag=4");
url.ToString().ShouldBe("https://some.jellyfin.server/jellyfin/Items/2/Images/3?tag=4");
}
[Test]
@ -113,6 +113,6 @@ public class JellyfinUrlTests @@ -113,6 +113,6 @@ public class JellyfinUrlTests
Url url = JellyfinUrl.ForArtwork(Some(mediaSource), artwork);
url.ToString().Should().Be("https://some.jellyfin.server/jellyfin/Items/2/Images/3?tag=4");
url.ToString().ShouldBe("https://some.jellyfin.server/jellyfin/Items/2/Images/3?tag=4");
}
}

22
ErsatzTV.Core.Tests/Metadata/FallbackMetadataProviderTests.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
using Bugsnag;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Metadata;
using FluentAssertions;
using Shouldly;
using NSubstitute;
using NUnit.Framework;
@ -65,10 +65,10 @@ public class FallbackMetadataProviderTests @@ -65,10 +65,10 @@ public class FallbackMetadataProviderTests
}
});
metadata.Count.Should().Be(1);
metadata.Count.ShouldBe(1);
// TODO: how can we test season number? do we need to?
// metadata.Season.Should().Be(season);
metadata.Head().EpisodeNumber.Should().Be(episode);
// metadata.Season.ShouldBe(season);
metadata.Head().EpisodeNumber.ShouldBe(episode);
}
[TestCase("Awesome Show - S01_BLAH.mkv", 0)]
@ -91,8 +91,8 @@ public class FallbackMetadataProviderTests @@ -91,8 +91,8 @@ public class FallbackMetadataProviderTests
}
});
metadata.Count.Should().Be(1);
metadata.Head().EpisodeNumber.Should().Be(episode);
metadata.Count.ShouldBe(1);
metadata.Head().EpisodeNumber.ShouldBe(episode);
}
[Test]
@ -122,8 +122,8 @@ public class FallbackMetadataProviderTests @@ -122,8 +122,8 @@ public class FallbackMetadataProviderTests
}
});
metadata.Count.Should().Be(2);
metadata.Map(m => m.EpisodeNumber).Should().BeEquivalentTo(new[] { episode1, episode2 });
metadata.Count.ShouldBe(2);
metadata.Map(m => m.EpisodeNumber).ShouldBe([episode1, episode2]);
}
[Test]
@ -147,8 +147,8 @@ public class FallbackMetadataProviderTests @@ -147,8 +147,8 @@ public class FallbackMetadataProviderTests
}
});
metadata.Should().NotBeNull();
metadata.Title.Should().Be(expectedTitle);
metadata.ShouldNotBeNull();
metadata.Title.ShouldBe(expectedTitle);
}
[Test]
@ -172,6 +172,6 @@ public class FallbackMetadataProviderTests @@ -172,6 +172,6 @@ public class FallbackMetadataProviderTests
public void GetSeasonNumberForFolder_ShouldHandleVariousFormats(string folder, int? season)
{
Option<int> actual = _fallbackMetadataProvider.GetSeasonNumberForFolder(folder);
actual.Should<Option<int>>().Be(Optional(season));
actual.ShouldBe(Optional(season));
}
}

20
ErsatzTV.Core.Tests/Plex/PlexPathReplacementServiceTests.cs

@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain; @@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Plex;
using ErsatzTV.FFmpeg.Runtime;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
@ -42,7 +42,7 @@ public class PlexPathReplacementServiceTests @@ -42,7 +42,7 @@ public class PlexPathReplacementServiceTests
0,
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
}
[Test]
@ -74,7 +74,7 @@ public class PlexPathReplacementServiceTests @@ -74,7 +74,7 @@ public class PlexPathReplacementServiceTests
0,
@"C:\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -106,7 +106,7 @@ public class PlexPathReplacementServiceTests @@ -106,7 +106,7 @@ public class PlexPathReplacementServiceTests
0,
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -138,7 +138,7 @@ public class PlexPathReplacementServiceTests @@ -138,7 +138,7 @@ public class PlexPathReplacementServiceTests
0,
@"\\192.168.1.100\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -170,7 +170,7 @@ public class PlexPathReplacementServiceTests @@ -170,7 +170,7 @@ public class PlexPathReplacementServiceTests
0,
@"\\SERVERNAME\Something\Some Shared Folder\Some Movie\Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -202,7 +202,7 @@ public class PlexPathReplacementServiceTests @@ -202,7 +202,7 @@ public class PlexPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
result.ShouldBe(@"C:\Something Else\Some Shared Folder\Some Movie\Some Movie.mkv");
}
[Test]
@ -234,7 +234,7 @@ public class PlexPathReplacementServiceTests @@ -234,7 +234,7 @@ public class PlexPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something else/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -266,7 +266,7 @@ public class PlexPathReplacementServiceTests @@ -266,7 +266,7 @@ public class PlexPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
}
[Test]
@ -298,6 +298,6 @@ public class PlexPathReplacementServiceTests @@ -298,6 +298,6 @@ public class PlexPathReplacementServiceTests
0,
@"/mnt/something/Some Shared Folder/Some Movie/Some Movie.mkv");
result.Should().Be(@"/Some Movie/Some Movie.mkv");
result.ShouldBe(@"/Some Movie/Some Movie.mkv");
}
}

8
ErsatzTV.Core.Tests/Scheduling/BlockScheduling/BlockPlayoutChangeDetectionTests.cs

@ -2,7 +2,7 @@ using ErsatzTV.Core.Domain; @@ -2,7 +2,7 @@ using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Domain.Scheduling;
using ErsatzTV.Core.Scheduling;
using ErsatzTV.Core.Scheduling.BlockScheduling;
using FluentAssertions;
using Shouldly;
using Newtonsoft.Json;
using NUnit.Framework;
@ -21,7 +21,7 @@ public static class BlockPlayoutChangeDetectionTests @@ -21,7 +21,7 @@ public static class BlockPlayoutChangeDetectionTests
// test case: block has moved from one time to another time, nothing after
// test case: block has moved from one time to another time, same block after
// test case: block has moved from one time to another time, different block with same collection after
// test case: block was moved from one time to another time, different block with different collection after
// test case: block was moved from one time to another time, different block with different collection after
// test case: block was removed, nothing after
// test case: block was removed, same block after
@ -79,10 +79,10 @@ public static class BlockPlayoutChangeDetectionTests @@ -79,10 +79,10 @@ public static class BlockPlayoutChangeDetectionTests
collectionEtags);
// nothing to schedule
result.Item1.Should().HaveCount(0);
result.Item1.Count.ShouldBe(0);
// do not need to remove any playout items or history
result.Item2.Should().HaveCount(0);
result.Item2.Count.ShouldBe(0);
}
private static List<Block> Blocks(DateTimeOffset dateUpdated)

18
ErsatzTV.Core.Tests/Scheduling/BlockScheduling/EffectiveBlockTests.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
using ErsatzTV.Core.Domain.Scheduling;
using ErsatzTV.Core.Scheduling.BlockScheduling;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Scheduling.BlockScheduling;
@ -64,7 +64,7 @@ public static class EffectiveBlockTests @@ -64,7 +64,7 @@ public static class EffectiveBlockTests
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, start, 5);
result.Should().HaveCount(0);
result.Count.ShouldBe(0);
}
[Test]
@ -89,16 +89,16 @@ public static class EffectiveBlockTests @@ -89,16 +89,16 @@ public static class EffectiveBlockTests
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, start, 5);
result.Should().HaveCount(3);
result.Count.ShouldBe(3);
result[0].Start.DayOfWeek.Should().Be(DayOfWeek.Monday);
result[0].Start.Date.Should().Be(GetLocalDate(2024, 1, 15).Date);
result[0].Start.DayOfWeek.ShouldBe(DayOfWeek.Monday);
result[0].Start.Date.ShouldBe(GetLocalDate(2024, 1, 15).Date);
result[1].Start.DayOfWeek.Should().Be(DayOfWeek.Wednesday);
result[1].Start.Date.Should().Be(GetLocalDate(2024, 1, 17).Date);
result[1].Start.DayOfWeek.ShouldBe(DayOfWeek.Wednesday);
result[1].Start.Date.ShouldBe(GetLocalDate(2024, 1, 17).Date);
result[2].Start.DayOfWeek.Should().Be(DayOfWeek.Friday);
result[2].Start.Date.Should().Be(GetLocalDate(2024, 1, 19).Date);
result[2].Start.DayOfWeek.ShouldBe(DayOfWeek.Friday);
result[2].Start.Date.ShouldBe(GetLocalDate(2024, 1, 19).Date);
}
// TODO: test when clocks spring forward

18
ErsatzTV.Core.Tests/Scheduling/ChronologicalContentTests.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Scheduling;
@ -23,8 +23,8 @@ public class ChronologicalContentTests @@ -23,8 +23,8 @@ public class ChronologicalContentTests
for (var i = 1; i <= 10; i++)
{
chronologicalContent.Current.IsSome.Should().BeTrue();
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
chronologicalContent.Current.IsSome.ShouldBeTrue();
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
chronologicalContent.MoveNext();
}
}
@ -39,7 +39,7 @@ public class ChronologicalContentTests @@ -39,7 +39,7 @@ public class ChronologicalContentTests
for (var i = 0; i < 10; i++)
{
chronologicalContent.State.Index.Should().Be(i % 10);
chronologicalContent.State.Index.ShouldBe(i % 10);
chronologicalContent.MoveNext();
}
}
@ -54,9 +54,9 @@ public class ChronologicalContentTests @@ -54,9 +54,9 @@ public class ChronologicalContentTests
for (var i = 6; i <= 10; i++)
{
chronologicalContent.Current.IsSome.Should().BeTrue();
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
chronologicalContent.State.Index.Should().Be(i - 1);
chronologicalContent.Current.IsSome.ShouldBeTrue();
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
chronologicalContent.State.Index.ShouldBe(i - 1);
chronologicalContent.MoveNext();
}
}
@ -69,8 +69,8 @@ public class ChronologicalContentTests @@ -69,8 +69,8 @@ public class ChronologicalContentTests
var chronologicalContent = new ChronologicalMediaCollectionEnumerator(contents, state);
chronologicalContent.State.Index.Should().Be(0);
chronologicalContent.State.Seed.Should().Be(0);
chronologicalContent.State.Index.ShouldBe(0);
chronologicalContent.State.Seed.ShouldBe(0);
}
private static List<MediaItem> Episodes(int count) =>

14
ErsatzTV.Core.Tests/Scheduling/CustomOrderContentTests.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Scheduling;
@ -23,8 +23,8 @@ public class CustomOrderContentTests @@ -23,8 +23,8 @@ public class CustomOrderContentTests
for (var i = 10; i >= 1; i--)
{
customOrderContent.Current.IsSome.Should().BeTrue();
customOrderContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
customOrderContent.Current.IsSome.ShouldBeTrue();
customOrderContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
customOrderContent.MoveNext();
}
}
@ -40,7 +40,7 @@ public class CustomOrderContentTests @@ -40,7 +40,7 @@ public class CustomOrderContentTests
for (var i = 0; i < 10; i++)
{
customOrderContent.State.Index.Should().Be(i % 10);
customOrderContent.State.Index.ShouldBe(i % 10);
customOrderContent.MoveNext();
}
}
@ -56,9 +56,9 @@ public class CustomOrderContentTests @@ -56,9 +56,9 @@ public class CustomOrderContentTests
for (var i = 5; i >= 1; i--)
{
customOrderContent.Current.IsSome.Should().BeTrue();
customOrderContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
customOrderContent.State.Index.Should().Be(5 - i + 5); // 5 through 10
customOrderContent.Current.IsSome.ShouldBeTrue();
customOrderContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
customOrderContent.State.Index.ShouldBe(5 - i + 5); // 5 through 10
customOrderContent.MoveNext();
}
}

32
ErsatzTV.Core.Tests/Scheduling/MultiPartEpisodeGrouperTests.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Scheduling;
@ -24,7 +24,7 @@ public class MultiPartEpisodeGrouperTests @@ -24,7 +24,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
result.Count.Should().Be(3);
result.Count.ShouldBe(3);
ShouldHaveOneItem(result, mediaItems[0]);
ShouldHaveTwoItems(result, mediaItems[1], mediaItems[2]);
ShouldHaveOneItem(result, mediaItems[3]);
@ -47,7 +47,7 @@ public class MultiPartEpisodeGrouperTests @@ -47,7 +47,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
result.Count.Should().Be(2);
result.Count.ShouldBe(2);
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]);
ShouldHaveOneItem(result, mediaItems[2]);
}
@ -68,7 +68,7 @@ public class MultiPartEpisodeGrouperTests @@ -68,7 +68,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
result.Count.Should().Be(2);
result.Count.ShouldBe(2);
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]);
ShouldHaveOneItem(result, mediaItems[2]);
}
@ -89,7 +89,7 @@ public class MultiPartEpisodeGrouperTests @@ -89,7 +89,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
result.Count.Should().Be(2);
result.Count.ShouldBe(2);
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]);
ShouldHaveOneItem(result, mediaItems[2]);
}
@ -117,7 +117,7 @@ public class MultiPartEpisodeGrouperTests @@ -117,7 +117,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
result.Count.Should().Be(3);
result.Count.ShouldBe(3);
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]);
ShouldHaveOneItem(result, mediaItems[2]);
ShouldHaveTwoItems(result, mediaItems[3], mediaItems[4]);
@ -140,7 +140,7 @@ public class MultiPartEpisodeGrouperTests @@ -140,7 +140,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
result.Count.Should().Be(2);
result.Count.ShouldBe(2);
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]);
ShouldHaveTwoItems(result, mediaItems[2], mediaItems[3]);
}
@ -162,7 +162,7 @@ public class MultiPartEpisodeGrouperTests @@ -162,7 +162,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
result.Count.Should().Be(3);
result.Count.ShouldBe(3);
ShouldHaveOneItem(result, mediaItems[0]);
ShouldHaveOneItem(result, mediaItems[1]);
ShouldHaveTwoItems(result, mediaItems[2], mediaItems[3]);
@ -185,7 +185,7 @@ public class MultiPartEpisodeGrouperTests @@ -185,7 +185,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
result.Count.Should().Be(3);
result.Count.ShouldBe(3);
ShouldHaveOneItem(result, mediaItems[0]);
ShouldHaveTwoItems(result, mediaItems[1], mediaItems[2]);
ShouldHaveOneItem(result, mediaItems[3]);
@ -208,7 +208,7 @@ public class MultiPartEpisodeGrouperTests @@ -208,7 +208,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
result.Count.Should().Be(4);
result.Count.ShouldBe(4);
ShouldHaveOneItem(result, mediaItems[0]);
ShouldHaveOneItem(result, mediaItems[1]);
ShouldHaveOneItem(result, mediaItems[2]);
@ -232,7 +232,7 @@ public class MultiPartEpisodeGrouperTests @@ -232,7 +232,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
result.Count.Should().Be(3);
result.Count.ShouldBe(3);
ShouldHaveOneItem(result, mediaItems[0]);
ShouldHaveTwoItems(result, mediaItems[1], mediaItems[2]);
ShouldHaveOneItem(result, mediaItems[3]);
@ -259,7 +259,7 @@ public class MultiPartEpisodeGrouperTests @@ -259,7 +259,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false);
result.Count.Should().Be(3);
result.Count.ShouldBe(3);
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[2]);
ShouldHaveOneItem(result, mediaItems[1]);
ShouldHaveOneItem(result, mediaItems[3]);
@ -286,7 +286,7 @@ public class MultiPartEpisodeGrouperTests @@ -286,7 +286,7 @@ public class MultiPartEpisodeGrouperTests
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, true);
result.Count.Should().Be(2);
result.Count.ShouldBe(2);
ShouldHaveMultipleItems(result, mediaItems[0], new List<MediaItem> { mediaItems[1], mediaItems[2] });
ShouldHaveOneItem(result, mediaItems[3]);
}
@ -313,14 +313,14 @@ public class MultiPartEpisodeGrouperTests @@ -313,14 +313,14 @@ public class MultiPartEpisodeGrouperTests
private static void ShouldHaveOneItem(IEnumerable<GroupedMediaItem> result, MediaItem item) =>
result.Filter(g => g.First == item && Optional(g.Additional).Flatten().HeadOrNone() == None)
.Should().HaveCount(1);
.Count().ShouldBe(1);
private static void ShouldHaveTwoItems(
IEnumerable<GroupedMediaItem> result,
MediaItem first,
MediaItem additional) =>
result.Filter(g => g.First == first && Optional(g.Additional).Flatten().HeadOrNone() == Some(additional))
.Should().HaveCount(1);
.Count().ShouldBe(1);
private static void ShouldHaveMultipleItems(
IEnumerable<GroupedMediaItem> result,
@ -329,5 +329,5 @@ public class MultiPartEpisodeGrouperTests @@ -329,5 +329,5 @@ public class MultiPartEpisodeGrouperTests
result.Filter(
g => g.First == first && g.Additional != null && g.Additional.Count == additional.Count &&
additional.ForAll(g.Additional.Contains))
.Should().HaveCount(1);
.Count().ShouldBe(1);
}

6
ErsatzTV.Core.Tests/Scheduling/PlaylistEnumeratorTests.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using NSubstitute;
using NUnit.Framework;
@ -71,7 +71,7 @@ public class PlaylistEnumeratorTests @@ -71,7 +71,7 @@ public class PlaylistEnumeratorTests
totalLength += 1;
}
totalLength.Should().Be(8);
totalLength.ShouldBe(8);
}
[Test]
@ -135,7 +135,7 @@ public class PlaylistEnumeratorTests @@ -135,7 +135,7 @@ public class PlaylistEnumeratorTests
totalLength += 1;
}
totalLength.Should().Be(8);
totalLength.ShouldBe(8);
}
private static Movie FakeMovie(int id) => new()

1004
ErsatzTV.Core.Tests/Scheduling/PlayoutBuilderTests.cs

File diff suppressed because it is too large Load Diff

66
ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerBaseTests.cs

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
using ErsatzTV.Core.Domain.Filler;
using ErsatzTV.Core.Interfaces.Scheduling;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
@ -61,7 +61,7 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase @@ -61,7 +61,7 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
true,
_cancellationToken);
playoutItems.Count.Should().Be(1);
playoutItems.Count.ShouldBe(1);
}
[Test]
@ -114,7 +114,7 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase @@ -114,7 +114,7 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
true,
_cancellationToken);
playoutItems.Count.Should().Be(1);
playoutItems.Count.ShouldBe(1);
}
[Test]
@ -181,13 +181,13 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase @@ -181,13 +181,13 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
true,
_cancellationToken);
playoutItems.Count.Should().Be(3);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[1].MediaItemId.Should().Be(3);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(6));
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(11));
playoutItems.Count.ShouldBe(3);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[1].MediaItemId.ShouldBe(3);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(6));
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(11));
}
[Test]
@ -273,27 +273,27 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase @@ -273,27 +273,27 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
true,
_cancellationToken);
playoutItems.Count.Should().Be(5);
playoutItems.Count.ShouldBe(5);
// content chapter 1
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
// mid-roll 1
playoutItems[1].MediaItemId.Should().Be(3);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(6));
playoutItems[1].MediaItemId.ShouldBe(3);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(6));
// mid-roll 2
playoutItems[2].MediaItemId.Should().Be(4);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(11));
playoutItems[2].MediaItemId.ShouldBe(4);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(11));
// content chapter 2
playoutItems[3].MediaItemId.Should().Be(1);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(16));
playoutItems[3].MediaItemId.ShouldBe(1);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(16));
// post-roll
playoutItems[4].MediaItemId.Should().Be(5);
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(55));
playoutItems[4].MediaItemId.ShouldBe(5);
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(55));
}
[Test]
@ -379,27 +379,27 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase @@ -379,27 +379,27 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
true,
_cancellationToken);
playoutItems.Count.Should().Be(5);
playoutItems.Count.ShouldBe(5);
// content chapter 1
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
// mid-roll 1
playoutItems[1].MediaItemId.Should().Be(3);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(6));
playoutItems[1].MediaItemId.ShouldBe(3);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(6));
// content chapter 2
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(11));
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(11));
// post-roll 1
playoutItems[3].MediaItemId.Should().Be(5);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(50));
playoutItems[3].MediaItemId.ShouldBe(5);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(50));
// post-roll 2
playoutItems[4].MediaItemId.Should().Be(6);
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime + TimeSpan.FromMinutes(55));
playoutItems[4].MediaItemId.ShouldBe(6);
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime + TimeSpan.FromMinutes(55));
}
}
@ -428,7 +428,7 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase @@ -428,7 +428,7 @@ public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
DateTimeOffset result =
PlayoutModeSchedulerBase<ProgramScheduleItem>.GetStartTimeAfter(state, scheduleItem);
result.Should().Be(DateTime.Today.AddHours(6));
result.ShouldBe(DateTime.Today.AddHours(6));
}
}

686
ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerDurationTests.cs

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Domain.Filler;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using NUnit.Framework;
using Serilog;
@ -68,40 +68,40 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase @@ -68,40 +68,40 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2); // one guide group here because of custom title
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(3);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
playoutItems[0].CustomTitle.Should().Be("CustomTitle");
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
playoutItems[1].GuideGroup.Should().Be(1);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
playoutItems[1].CustomTitle.Should().Be("CustomTitle");
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
playoutItems[2].GuideGroup.Should().Be(1);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
playoutItems[2].CustomTitle.Should().Be("CustomTitle");
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(2); // one guide group here because of custom title
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(3);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[0].CustomTitle.ShouldBe("CustomTitle");
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
playoutItems[1].GuideGroup.ShouldBe(1);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[1].CustomTitle.ShouldBe("CustomTitle");
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
playoutItems[2].GuideGroup.ShouldBe(1);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
playoutItems[2].CustomTitle.ShouldBe("CustomTitle");
}
[Test]
@ -141,40 +141,40 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase @@ -141,40 +141,40 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(3);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
playoutItems[0].CustomTitle.Should().Be("Custom Title");
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
playoutItems[1].GuideGroup.Should().Be(1);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
playoutItems[1].CustomTitle.Should().Be("Custom Title");
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
playoutItems[2].GuideGroup.Should().Be(1);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
playoutItems[2].CustomTitle.Should().Be("Custom Title");
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(2);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(3);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[0].CustomTitle.ShouldBe("Custom Title");
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
playoutItems[1].GuideGroup.ShouldBe(1);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[1].CustomTitle.ShouldBe("Custom Title");
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
playoutItems[2].GuideGroup.ShouldBe(1);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
playoutItems[2].CustomTitle.ShouldBe("Custom Title");
}
[Test]
@ -213,37 +213,37 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase @@ -213,37 +213,37 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(3);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(3);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
}
[Test]
@ -283,39 +283,39 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase @@ -283,39 +283,39 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
_cancellationToken);
// duration block should end after exact duration, with gap
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator.State.Index.Should().Be(1);
enumerator.State.Index.ShouldBe(1);
playoutItems.Count.Should().Be(3);
playoutItems.Count.ShouldBe(3);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
// offline should not set guide finish
playoutItems[2].GuideFinish.HasValue.Should().BeFalse();
playoutItems[2].GuideFinish.HasValue.ShouldBeFalse();
}
[Test]
@ -365,44 +365,44 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase @@ -365,44 +365,44 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(4);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.Should().Be(3);
playoutItems[3].FillerKind.Should().Be(FillerKind.Fallback);
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(4);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.ShouldBe(3);
playoutItems[3].FillerKind.ShouldBe(FillerKind.Fallback);
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
}
[Test]
@ -452,56 +452,56 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase @@ -452,56 +452,56 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(6);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.Should().Be(3);
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
playoutItems[4].MediaItemId.Should().Be(4);
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
playoutItems[4].GuideGroup.Should().Be(3);
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
playoutItems[5].MediaItemId.Should().Be(3);
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
playoutItems[5].GuideGroup.Should().Be(3);
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(6);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.ShouldBe(3);
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[4].MediaItemId.ShouldBe(4);
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
playoutItems[4].GuideGroup.ShouldBe(3);
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[5].MediaItemId.ShouldBe(3);
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
playoutItems[5].GuideGroup.ShouldBe(3);
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
}
[Test]
@ -551,56 +551,56 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase @@ -551,56 +551,56 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(6);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.Should().Be(3);
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
playoutItems[4].MediaItemId.Should().Be(4);
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[4].GuideGroup.Should().Be(3);
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[4].GuideFinish.HasValue.Should().BeFalse();
playoutItems[5].MediaItemId.Should().Be(3);
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[5].GuideGroup.Should().Be(3);
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[5].GuideFinish.HasValue.Should().BeFalse();
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(6);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.ShouldBe(3);
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[4].MediaItemId.ShouldBe(4);
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[4].GuideGroup.ShouldBe(3);
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[4].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[5].MediaItemId.ShouldBe(3);
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[5].GuideGroup.ShouldBe(3);
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[5].GuideFinish.HasValue.ShouldBeFalse();
}
[Test]
@ -667,63 +667,63 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase @@ -667,63 +667,63 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
enumerator3.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(7);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.Should().BeFalse();
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.Should().BeFalse();
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.Should().BeTrue();
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.Should().Be(3);
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[3].GuideFinish.HasValue.Should().BeFalse();
playoutItems[4].MediaItemId.Should().Be(4);
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[4].GuideGroup.Should().Be(3);
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[4].GuideFinish.HasValue.Should().BeFalse();
playoutItems[5].MediaItemId.Should().Be(3);
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[5].GuideGroup.Should().Be(3);
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[5].GuideFinish.HasValue.Should().BeFalse();
playoutItems[6].MediaItemId.Should().Be(5);
playoutItems[6].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutItems[6].GuideGroup.Should().Be(3);
playoutItems[6].FillerKind.Should().Be(FillerKind.Fallback);
playoutItems[6].GuideFinish.HasValue.Should().BeFalse();
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
enumerator3.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(7);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[0].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].GuideFinish.HasValue.ShouldBeTrue();
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.ShouldBe(3);
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[3].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[4].MediaItemId.ShouldBe(4);
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[4].GuideGroup.ShouldBe(3);
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[4].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[5].MediaItemId.ShouldBe(3);
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[5].GuideGroup.ShouldBe(3);
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[5].GuideFinish.HasValue.ShouldBeFalse();
playoutItems[6].MediaItemId.ShouldBe(5);
playoutItems[6].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutItems[6].GuideGroup.ShouldBe(3);
playoutItems[6].FillerKind.ShouldBe(FillerKind.Fallback);
playoutItems[6].GuideFinish.HasValue.ShouldBeFalse();
}
[Test]
@ -818,25 +818,25 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase @@ -818,25 +818,25 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddMinutes(30));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddMinutes(30));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
// THIS IS THE KEY TEST - needs to be exactly 30 minutes
(playoutItems.Last().FinishOffset - playoutItems.First().StartOffset).Should().Be(TimeSpan.FromMinutes(30));
(playoutItems.Last().FinishOffset - playoutItems.First().StartOffset).ShouldBe(TimeSpan.FromMinutes(30));
// playoutBuilderState.NextGuideGroup.Should().Be(3);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
// playoutBuilderState.NextGuideGroup.ShouldBe(3);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
enumerator3.State.Index.Should().Be(0);
enumerator4.State.Index.Should().Be(1);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
enumerator3.State.Index.ShouldBe(0);
enumerator4.State.Index.ShouldBe(1);
playoutItems.Count.Should().Be(12);
playoutItems.Count.ShouldBe(12);
}
[Test]
@ -882,17 +882,17 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase @@ -882,17 +882,17 @@ public class PlayoutModeSchedulerDurationTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutItems.Should().BeEmpty();
playoutItems.ShouldBeEmpty();
playoutBuilderState.CurrentTime.Should().Be(HardStop(scheduleItemsEnumerator));
playoutBuilderState.CurrentTime.ShouldBe(HardStop(scheduleItemsEnumerator));
playoutBuilderState.NextGuideGroup.Should().Be(1);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(1);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator.State.Index.Should().Be(0);
enumerator.State.Index.ShouldBe(0);
}
}

910
ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerFloodTests.cs

File diff suppressed because it is too large Load Diff

504
ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerMultipleTests.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Domain.Filler;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
@ -60,37 +60,37 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase @@ -60,37 +60,37 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2); // one guide group here because of custom title
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(3);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].CustomTitle.Should().Be("CustomTitle");
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
playoutItems[1].GuideGroup.Should().Be(1);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].CustomTitle.Should().Be("CustomTitle");
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
playoutItems[2].GuideGroup.Should().Be(1);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].CustomTitle.Should().Be("CustomTitle");
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(2); // one guide group here because of custom title
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(3);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[0].CustomTitle.ShouldBe("CustomTitle");
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
playoutItems[1].GuideGroup.ShouldBe(1);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].CustomTitle.ShouldBe("CustomTitle");
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
playoutItems[2].GuideGroup.ShouldBe(1);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].CustomTitle.ShouldBe("CustomTitle");
}
[Test]
@ -135,34 +135,34 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase @@ -135,34 +135,34 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator.State.Index.Should().Be(1);
enumerator.State.Index.ShouldBe(1);
playoutItems.Count.Should().Be(3);
playoutItems.Count.ShouldBe(3);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
}
[Test]
@ -218,50 +218,50 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase @@ -218,50 +218,50 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(6);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.Should().Be(3);
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[4].MediaItemId.Should().Be(4);
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
playoutItems[4].GuideGroup.Should().Be(3);
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[5].MediaItemId.Should().Be(3);
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
playoutItems[5].GuideGroup.Should().Be(3);
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(6);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.ShouldBe(3);
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[4].MediaItemId.ShouldBe(4);
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
playoutItems[4].GuideGroup.ShouldBe(3);
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[5].MediaItemId.ShouldBe(3);
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
playoutItems[5].GuideGroup.ShouldBe(3);
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
}
[Test]
@ -317,40 +317,40 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase @@ -317,40 +317,40 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
playoutItems.Count.Should().Be(4);
playoutItems.Count.ShouldBe(4);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.Should().Be(3);
playoutItems[3].FillerKind.Should().Be(FillerKind.Fallback);
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.ShouldBe(3);
playoutItems[3].FillerKind.ShouldBe(FillerKind.Fallback);
}
[Test]
@ -406,50 +406,50 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase @@ -406,50 +406,50 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(6);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.Should().Be(3);
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[4].MediaItemId.Should().Be(4);
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[4].GuideGroup.Should().Be(3);
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[5].MediaItemId.Should().Be(3);
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[5].GuideGroup.Should().Be(3);
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(6);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.ShouldBe(3);
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[4].MediaItemId.ShouldBe(4);
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[4].GuideGroup.ShouldBe(3);
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[5].MediaItemId.ShouldBe(3);
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[5].GuideGroup.ShouldBe(3);
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
}
[Test]
@ -522,56 +522,56 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase @@ -522,56 +522,56 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
enumerator3.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(7);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.Should().Be(3);
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[4].MediaItemId.Should().Be(4);
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[4].GuideGroup.Should().Be(3);
playoutItems[4].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[5].MediaItemId.Should().Be(3);
playoutItems[5].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[5].GuideGroup.Should().Be(3);
playoutItems[5].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[6].MediaItemId.Should().Be(5);
playoutItems[6].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutItems[6].GuideGroup.Should().Be(3);
playoutItems[6].FillerKind.Should().Be(FillerKind.Fallback);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
enumerator3.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(7);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddMinutes(55));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(1, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[3].GuideGroup.ShouldBe(3);
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[4].MediaItemId.ShouldBe(4);
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[4].GuideGroup.ShouldBe(3);
playoutItems[4].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[5].MediaItemId.ShouldBe(3);
playoutItems[5].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[5].GuideGroup.ShouldBe(3);
playoutItems[5].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[6].MediaItemId.ShouldBe(5);
playoutItems[6].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutItems[6].GuideGroup.ShouldBe(3);
playoutItems[6].FillerKind.ShouldBe(FillerKind.Fallback);
}
[Test]
@ -644,36 +644,36 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase @@ -644,36 +644,36 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(4);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(4);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(0);
enumerator3.State.Index.Should().Be(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(0);
enumerator3.State.Index.ShouldBe(0);
playoutItems.Count.Should().Be(3);
playoutItems.Count.ShouldBe(3);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(2);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
playoutItems[1].GuideGroup.Should().Be(2);
playoutItems[1].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].MediaItemId.ShouldBe(2);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
playoutItems[1].GuideGroup.ShouldBe(2);
playoutItems[1].FillerKind.ShouldBe(FillerKind.None);
playoutItems[2].MediaItemId.Should().Be(1);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.AddHours(2));
playoutItems[2].GuideGroup.Should().Be(3);
playoutItems[2].FillerKind.Should().Be(FillerKind.None);
playoutItems[2].MediaItemId.ShouldBe(1);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.AddHours(2));
playoutItems[2].GuideGroup.ShouldBe(3);
playoutItems[2].FillerKind.ShouldBe(FillerKind.None);
}
[Test]
@ -724,18 +724,18 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase @@ -724,18 +724,18 @@ public class PlayoutModeSchedulerMultipleTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutItems.Should().BeEmpty();
playoutItems.ShouldBeEmpty();
playoutBuilderState.CurrentTime.Should().Be(HardStop(scheduleItemsEnumerator));
playoutBuilderState.CurrentTime.ShouldBe(HardStop(scheduleItemsEnumerator));
playoutBuilderState.NextGuideGroup.Should().Be(1);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(1);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator.State.Index.Should().Be(0);
enumerator.State.Index.ShouldBe(0);
}
protected override ProgramScheduleItem NextScheduleItem => new ProgramScheduleItemOne

464
ErsatzTV.Core.Tests/Scheduling/PlayoutModeSchedulerOneTests.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Domain.Filler;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
@ -53,25 +53,25 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase @@ -53,25 +53,25 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(1));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(1));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(2);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator.State.Index.Should().Be(1);
enumerator.State.Index.ShouldBe(1);
playoutItems.Count.Should().Be(1);
playoutItems.Count.ShouldBe(1);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].CustomTitle.Should().Be("CustomTitle");
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[0].CustomTitle.ShouldBe("CustomTitle");
}
[Test]
@ -136,26 +136,26 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase @@ -136,26 +136,26 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(1));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(1));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(2);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(0);
enumerator3.State.Index.Should().Be(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(0);
enumerator3.State.Index.ShouldBe(0);
playoutItems.Count.Should().Be(1);
playoutItems.Count.ShouldBe(1);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
}
[Test]
@ -204,40 +204,40 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase @@ -204,40 +204,40 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(2);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
playoutItems.Count.Should().Be(4);
playoutItems.Count.ShouldBe(4);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(3);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[1].GuideGroup.Should().Be(1);
playoutItems[1].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[1].MediaItemId.ShouldBe(3);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[1].GuideGroup.ShouldBe(1);
playoutItems[1].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[2].MediaItemId.Should().Be(4);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(1);
playoutItems[2].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[2].MediaItemId.ShouldBe(4);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(1);
playoutItems[2].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
playoutItems[3].GuideGroup.Should().Be(1);
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
playoutItems[3].GuideGroup.ShouldBe(1);
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
}
[Test]
@ -286,30 +286,30 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase @@ -286,30 +286,30 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(2);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
playoutItems.Count.Should().Be(2);
playoutItems.Count.ShouldBe(2);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(3);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.AddHours(1));
playoutItems[1].GuideGroup.Should().Be(1);
playoutItems[1].FillerKind.Should().Be(FillerKind.Fallback);
playoutItems[1].MediaItemId.ShouldBe(3);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.AddHours(1));
playoutItems[1].GuideGroup.ShouldBe(1);
playoutItems[1].FillerKind.ShouldBe(FillerKind.Fallback);
}
[Test]
@ -358,40 +358,40 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase @@ -358,40 +358,40 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(2);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
playoutItems.Count.Should().Be(4);
playoutItems.Count.ShouldBe(4);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(3);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[1].GuideGroup.Should().Be(1);
playoutItems[1].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[1].MediaItemId.ShouldBe(3);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[1].GuideGroup.ShouldBe(1);
playoutItems[1].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[2].MediaItemId.Should().Be(4);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[2].GuideGroup.Should().Be(1);
playoutItems[2].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[2].MediaItemId.ShouldBe(4);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[2].GuideGroup.ShouldBe(1);
playoutItems[2].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[3].GuideGroup.Should().Be(1);
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[3].GuideGroup.ShouldBe(1);
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
}
[Test]
@ -456,46 +456,46 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase @@ -456,46 +456,46 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
enumerator3.State.Index.Should().Be(1);
playoutItems.Count.Should().Be(5);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(3);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[1].GuideGroup.Should().Be(1);
playoutItems[1].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[2].MediaItemId.Should().Be(4);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[2].GuideGroup.Should().Be(1);
playoutItems[2].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[3].GuideGroup.Should().Be(1);
playoutItems[3].FillerKind.Should().Be(FillerKind.Tail);
playoutItems[4].MediaItemId.Should().Be(5);
playoutItems[4].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutItems[4].GuideGroup.Should().Be(1);
playoutItems[4].FillerKind.Should().Be(FillerKind.Fallback);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(2);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
enumerator3.State.Index.ShouldBe(1);
playoutItems.Count.ShouldBe(5);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.ShouldBe(3);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[1].GuideGroup.ShouldBe(1);
playoutItems[1].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[2].MediaItemId.ShouldBe(4);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 49, 0)));
playoutItems[2].GuideGroup.ShouldBe(1);
playoutItems[2].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 53, 0)));
playoutItems[3].GuideGroup.ShouldBe(1);
playoutItems[3].FillerKind.ShouldBe(FillerKind.Tail);
playoutItems[4].MediaItemId.ShouldBe(5);
playoutItems[4].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 57, 0)));
playoutItems[4].GuideGroup.ShouldBe(1);
playoutItems[4].FillerKind.ShouldBe(FillerKind.Fallback);
}
[Test]
@ -560,26 +560,26 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase @@ -560,26 +560,26 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(2);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(0);
enumerator3.State.Index.Should().Be(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(0);
enumerator3.State.Index.ShouldBe(0);
playoutItems.Count.Should().Be(1);
playoutItems.Count.ShouldBe(1);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
}
[Test]
@ -646,40 +646,40 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase @@ -646,40 +646,40 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(2);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
playoutItems.Count.Should().Be(4);
playoutItems.Count.ShouldBe(4);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(3);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[1].GuideGroup.Should().Be(1);
playoutItems[1].FillerKind.Should().Be(FillerKind.PostRoll);
playoutItems[1].MediaItemId.ShouldBe(3);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[1].GuideGroup.ShouldBe(1);
playoutItems[1].FillerKind.ShouldBe(FillerKind.PostRoll);
playoutItems[2].MediaItemId.Should().Be(4);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(1);
playoutItems[2].FillerKind.Should().Be(FillerKind.PostRoll);
playoutItems[2].MediaItemId.ShouldBe(4);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(1);
playoutItems[2].FillerKind.ShouldBe(FillerKind.PostRoll);
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
playoutItems[3].GuideGroup.Should().Be(1);
playoutItems[3].FillerKind.Should().Be(FillerKind.PostRoll);
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
playoutItems[3].GuideGroup.ShouldBe(1);
playoutItems[3].FillerKind.ShouldBe(FillerKind.PostRoll);
}
[Test]
@ -746,41 +746,41 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase @@ -746,41 +746,41 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutBuilderState.CurrentTime.Should().Be(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.Should().Be(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.Should().Be(2);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
enumerator1.State.Index.Should().Be(1);
enumerator2.State.Index.Should().Be(1);
enumerator3.State.Index.Should().Be(0);
playoutItems.Count.Should().Be(4);
playoutItems[0].MediaItemId.Should().Be(1);
playoutItems[0].StartOffset.Should().Be(startState.CurrentTime);
playoutItems[0].GuideGroup.Should().Be(1);
playoutItems[0].FillerKind.Should().Be(FillerKind.None);
playoutItems[1].MediaItemId.Should().Be(3);
playoutItems[1].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[1].GuideGroup.Should().Be(1);
playoutItems[1].FillerKind.Should().Be(FillerKind.PostRoll);
playoutItems[2].MediaItemId.Should().Be(4);
playoutItems[2].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
playoutItems[2].GuideGroup.Should().Be(1);
playoutItems[2].FillerKind.Should().Be(FillerKind.PostRoll);
playoutItems[3].MediaItemId.Should().Be(3);
playoutItems[3].StartOffset.Should().Be(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
playoutItems[3].GuideGroup.Should().Be(1);
playoutItems[3].FillerKind.Should().Be(FillerKind.PostRoll);
playoutBuilderState.CurrentTime.ShouldBe(startState.CurrentTime.AddHours(3));
playoutItems.Last().FinishOffset.ShouldBe(playoutBuilderState.CurrentTime);
playoutBuilderState.NextGuideGroup.ShouldBe(2);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator1.State.Index.ShouldBe(1);
enumerator2.State.Index.ShouldBe(1);
enumerator3.State.Index.ShouldBe(0);
playoutItems.Count.ShouldBe(4);
playoutItems[0].MediaItemId.ShouldBe(1);
playoutItems[0].StartOffset.ShouldBe(startState.CurrentTime);
playoutItems[0].GuideGroup.ShouldBe(1);
playoutItems[0].FillerKind.ShouldBe(FillerKind.None);
playoutItems[1].MediaItemId.ShouldBe(3);
playoutItems[1].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 45, 0)));
playoutItems[1].GuideGroup.ShouldBe(1);
playoutItems[1].FillerKind.ShouldBe(FillerKind.PostRoll);
playoutItems[2].MediaItemId.ShouldBe(4);
playoutItems[2].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 50, 0)));
playoutItems[2].GuideGroup.ShouldBe(1);
playoutItems[2].FillerKind.ShouldBe(FillerKind.PostRoll);
playoutItems[3].MediaItemId.ShouldBe(3);
playoutItems[3].StartOffset.ShouldBe(startState.CurrentTime.Add(new TimeSpan(2, 55, 0)));
playoutItems[3].GuideGroup.ShouldBe(1);
playoutItems[3].FillerKind.ShouldBe(FillerKind.PostRoll);
}
[Test]
@ -825,18 +825,18 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase @@ -825,18 +825,18 @@ public class PlayoutModeSchedulerOneTests : SchedulerTestBase
HardStop(scheduleItemsEnumerator),
_cancellationToken);
playoutItems.Should().BeEmpty();
playoutItems.ShouldBeEmpty();
playoutBuilderState.CurrentTime.Should().Be(HardStop(scheduleItemsEnumerator));
playoutBuilderState.CurrentTime.ShouldBe(HardStop(scheduleItemsEnumerator));
playoutBuilderState.NextGuideGroup.Should().Be(1);
playoutBuilderState.DurationFinish.IsNone.Should().BeTrue();
playoutBuilderState.InFlood.Should().BeFalse();
playoutBuilderState.MultipleRemaining.IsNone.Should().BeTrue();
playoutBuilderState.InDurationFiller.Should().BeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.Should().Be(0);
playoutBuilderState.NextGuideGroup.ShouldBe(1);
playoutBuilderState.DurationFinish.IsNone.ShouldBeTrue();
playoutBuilderState.InFlood.ShouldBeFalse();
playoutBuilderState.MultipleRemaining.IsNone.ShouldBeTrue();
playoutBuilderState.InDurationFiller.ShouldBeFalse();
playoutBuilderState.ScheduleItemsEnumerator.State.Index.ShouldBe(0);
enumerator.State.Index.Should().Be(0);
enumerator.State.Index.ShouldBe(0);
}
protected override ProgramScheduleItem NextScheduleItem => new ProgramScheduleItemOne

38
ErsatzTV.Core.Tests/Scheduling/PlayoutTemplateSelectorTests.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
using ErsatzTV.Core.Domain.Scheduling;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Scheduling;
@ -31,7 +31,7 @@ public static class PlayoutTemplateSelectorTests @@ -31,7 +31,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 3, 31, 0, 0, 0, Offset));
result.IsNone.Should().BeTrue();
result.IsNone.ShouldBeTrue();
}
[Test]
@ -53,7 +53,7 @@ public static class PlayoutTemplateSelectorTests @@ -53,7 +53,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset));
result.IsSome.Should().BeTrue();
result.IsSome.ShouldBeTrue();
}
[Test]
@ -75,7 +75,7 @@ public static class PlayoutTemplateSelectorTests @@ -75,7 +75,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 4, 20, 0, 0, 0, Offset));
result.IsSome.Should().BeTrue();
result.IsSome.ShouldBeTrue();
}
[Test]
@ -97,7 +97,7 @@ public static class PlayoutTemplateSelectorTests @@ -97,7 +97,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset));
result.IsSome.Should().BeTrue();
result.IsSome.ShouldBeTrue();
}
[Test]
@ -119,7 +119,7 @@ public static class PlayoutTemplateSelectorTests @@ -119,7 +119,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 6, 16, 0, 0, 0, Offset));
result.IsNone.Should().BeTrue();
result.IsNone.ShouldBeTrue();
}
[Test]
@ -141,7 +141,7 @@ public static class PlayoutTemplateSelectorTests @@ -141,7 +141,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
result.IsNone.Should().BeTrue();
result.IsNone.ShouldBeTrue();
}
[Test]
@ -163,7 +163,7 @@ public static class PlayoutTemplateSelectorTests @@ -163,7 +163,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));
result.IsSome.Should().BeTrue();
result.IsSome.ShouldBeTrue();
}
[Test]
@ -185,7 +185,7 @@ public static class PlayoutTemplateSelectorTests @@ -185,7 +185,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
result.IsSome.Should().BeTrue();
result.IsSome.ShouldBeTrue();
}
[Test]
@ -207,7 +207,7 @@ public static class PlayoutTemplateSelectorTests @@ -207,7 +207,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));
result.IsNone.Should().BeTrue();
result.IsNone.ShouldBeTrue();
}
[Test]
@ -229,7 +229,7 @@ public static class PlayoutTemplateSelectorTests @@ -229,7 +229,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 6, 14, 0, 0, 0, Offset));
result.IsNone.Should().BeTrue();
result.IsNone.ShouldBeTrue();
}
[Test]
@ -251,7 +251,7 @@ public static class PlayoutTemplateSelectorTests @@ -251,7 +251,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset));
result.IsSome.Should().BeTrue();
result.IsSome.ShouldBeTrue();
}
[Test]
@ -273,7 +273,7 @@ public static class PlayoutTemplateSelectorTests @@ -273,7 +273,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 7, 20, 0, 0, 0, Offset));
result.IsSome.Should().BeTrue();
result.IsSome.ShouldBeTrue();
}
[Test]
@ -295,7 +295,7 @@ public static class PlayoutTemplateSelectorTests @@ -295,7 +295,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset));
result.IsSome.Should().BeTrue();
result.IsSome.ShouldBeTrue();
}
[Test]
@ -317,7 +317,7 @@ public static class PlayoutTemplateSelectorTests @@ -317,7 +317,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2024, 4, 2, 0, 0, 0, Offset));
result.IsNone.Should().BeTrue();
result.IsNone.ShouldBeTrue();
}
[Test]
@ -339,7 +339,7 @@ public static class PlayoutTemplateSelectorTests @@ -339,7 +339,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
result.IsNone.Should().BeTrue();
result.IsNone.ShouldBeTrue();
}
[Test]
@ -361,7 +361,7 @@ public static class PlayoutTemplateSelectorTests @@ -361,7 +361,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));
result.IsSome.Should().BeTrue();
result.IsSome.ShouldBeTrue();
}
[Test]
@ -383,7 +383,7 @@ public static class PlayoutTemplateSelectorTests @@ -383,7 +383,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset));
result.IsSome.Should().BeTrue();
result.IsSome.ShouldBeTrue();
}
[Test]
@ -405,7 +405,7 @@ public static class PlayoutTemplateSelectorTests @@ -405,7 +405,7 @@ public static class PlayoutTemplateSelectorTests
new List<PlayoutTemplate> { template },
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset));
result.IsNone.Should().BeTrue();
result.IsNone.ShouldBeTrue();
}
}
}

16
ErsatzTV.Core.Tests/Scheduling/RandomizedContentTests.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Scheduling;
@ -34,14 +34,14 @@ public class RandomizedContentTests @@ -34,14 +34,14 @@ public class RandomizedContentTests
var list = new List<int>();
for (var i = 1; i <= 10; i++)
{
randomizedContent.Current.IsSome.Should().BeTrue();
randomizedContent.Current.IsSome.ShouldBeTrue();
randomizedContent.Current.Do(c => list.Add(c.Id));
randomizedContent.MoveNext();
}
list.Should().NotEqual(new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
list.Should().NotEqual(new[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 });
list.ShouldNotBe([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
list.ShouldNotBe([10, 9, 8, 7, 6, 5, 4, 3, 2, 1]);
}
[Test]
@ -54,7 +54,7 @@ public class RandomizedContentTests @@ -54,7 +54,7 @@ public class RandomizedContentTests
for (var i = 1; i <= 10; i++)
{
randomizedContent.State.Index.Should().Be(i);
randomizedContent.State.Index.ShouldBe(i);
randomizedContent.MoveNext();
}
@ -70,10 +70,10 @@ public class RandomizedContentTests @@ -70,10 +70,10 @@ public class RandomizedContentTests
for (var i = 6; i <= 99; i++)
{
randomizedContent.Current.IsSome.Should().BeTrue();
randomizedContent.Current.IsSome.ShouldBeTrue();
// this test data setup/expectation is confusing
randomizedContent.Current.Map(c => c.Id).IfNone(-1).Should().Be(_expected[i - 2]);
randomizedContent.State.Index.Should().Be(i);
randomizedContent.Current.Map(c => c.Id).IfNone(-1).ShouldBe(_expected[i - 2]);
randomizedContent.State.Index.ShouldBe(i);
randomizedContent.MoveNext();
}

18
ErsatzTV.Core.Tests/Scheduling/SeasonEpisodeContentTests.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Scheduling;
@ -23,8 +23,8 @@ public class SeasonEpisodeContentTests @@ -23,8 +23,8 @@ public class SeasonEpisodeContentTests
for (var i = 1; i <= 10; i++)
{
chronologicalContent.Current.IsSome.Should().BeTrue();
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
chronologicalContent.Current.IsSome.ShouldBeTrue();
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
chronologicalContent.MoveNext();
}
}
@ -39,7 +39,7 @@ public class SeasonEpisodeContentTests @@ -39,7 +39,7 @@ public class SeasonEpisodeContentTests
for (var i = 0; i < 10; i++)
{
chronologicalContent.State.Index.Should().Be(i % 10);
chronologicalContent.State.Index.ShouldBe(i % 10);
chronologicalContent.MoveNext();
}
}
@ -54,9 +54,9 @@ public class SeasonEpisodeContentTests @@ -54,9 +54,9 @@ public class SeasonEpisodeContentTests
for (var i = 6; i <= 10; i++)
{
chronologicalContent.Current.IsSome.Should().BeTrue();
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
chronologicalContent.State.Index.Should().Be(i - 1);
chronologicalContent.Current.IsSome.ShouldBeTrue();
chronologicalContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
chronologicalContent.State.Index.ShouldBe(i - 1);
chronologicalContent.MoveNext();
}
}
@ -69,8 +69,8 @@ public class SeasonEpisodeContentTests @@ -69,8 +69,8 @@ public class SeasonEpisodeContentTests
var chronologicalContent = new SeasonEpisodeMediaCollectionEnumerator(contents, state);
chronologicalContent.State.Index.Should().Be(0);
chronologicalContent.State.Seed.Should().Be(0);
chronologicalContent.State.Index.ShouldBe(0);
chronologicalContent.State.Seed.ShouldBe(0);
}
private static List<MediaItem> Episodes(int count) =>

26
ErsatzTV.Core.Tests/Scheduling/ShuffledContentTests.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Scheduling;
@ -30,7 +30,7 @@ public class ShuffledContentTests @@ -30,7 +30,7 @@ public class ShuffledContentTests
var list = new List<int>();
for (var i = 1; i <= 1000; i++)
{
shuffledContent.Current.IsSome.Should().BeTrue();
shuffledContent.Current.IsSome.ShouldBeTrue();
shuffledContent.Current.Do(x => list.Add(x.Id));
shuffledContent.MoveNext();
}
@ -57,12 +57,12 @@ public class ShuffledContentTests @@ -57,12 +57,12 @@ public class ShuffledContentTests
var list = new List<int>();
for (var i = 1; i <= 10; i++)
{
shuffledContent.Current.IsSome.Should().BeTrue();
shuffledContent.Current.IsSome.ShouldBeTrue();
shuffledContent.Current.Do(x => list.Add(x.Id));
shuffledContent.MoveNext();
}
list.Should().Equal(1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
list.ShouldBe([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]);
}
[Test]
@ -78,13 +78,13 @@ public class ShuffledContentTests @@ -78,13 +78,13 @@ public class ShuffledContentTests
var list = new List<int>();
for (var i = 1; i <= 10; i++)
{
shuffledContent.Current.IsSome.Should().BeTrue();
shuffledContent.Current.IsSome.ShouldBeTrue();
shuffledContent.Current.Do(x => list.Add(x.Id));
shuffledContent.MoveNext();
}
list.Should().NotEqual(new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
list.Should().BeEquivalentTo(new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
list.ShouldNotBe([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
list.ShouldBe([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], ignoreOrder: true);
}
[Test]
@ -98,7 +98,7 @@ public class ShuffledContentTests @@ -98,7 +98,7 @@ public class ShuffledContentTests
for (var i = 0; i < 10; i++)
{
shuffledContent.State.Index.Should().Be(i);
shuffledContent.State.Index.ShouldBe(i);
shuffledContent.MoveNext();
}
}
@ -114,9 +114,9 @@ public class ShuffledContentTests @@ -114,9 +114,9 @@ public class ShuffledContentTests
for (var i = 6; i <= 10; i++)
{
shuffledContent.Current.IsSome.Should().BeTrue();
shuffledContent.Current.Map(x => x.Id).IfNone(-1).Should().Be(i);
shuffledContent.State.Index.Should().Be(i - 1);
shuffledContent.Current.IsSome.ShouldBeTrue();
shuffledContent.Current.Map(x => x.Id).IfNone(-1).ShouldBe(i);
shuffledContent.State.Index.ShouldBe(i - 1);
shuffledContent.MoveNext();
}
}
@ -130,8 +130,8 @@ public class ShuffledContentTests @@ -130,8 +130,8 @@ public class ShuffledContentTests
var groupedMediaItems = contents.Map(mi => new GroupedMediaItem(mi, null)).ToList();
var shuffledContent = new ShuffledMediaCollectionEnumerator(groupedMediaItems, state, _cancellationToken);
shuffledContent.State.Index.Should().Be(0);
shuffledContent.State.Seed.Should().NotBe(MagicSeed);
shuffledContent.State.Index.ShouldBe(0);
shuffledContent.State.Seed.ShouldNotBe(MagicSeed);
}
private static List<MediaItem> Episodes(int count) =>

12
ErsatzTV.FFmpeg.Tests/Capabilities/Vaapi/VaapiCapabilityParserTests.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Linq;
using ErsatzTV.FFmpeg.Capabilities.Vaapi;
using FluentAssertions;
using Shouldly;
using NUnit.Framework;
namespace ErsatzTV.FFmpeg.Tests.Capabilities.Vaapi;
@ -185,8 +185,8 @@ VAProfileNone/VAEntrypointVideoProc @@ -185,8 +185,8 @@ VAProfileNone/VAEntrypointVideoProc
List<VaapiProfileEntrypoint> brief = VaapiCapabilityParser.Parse(BriefOutput);
List<VaapiProfileEntrypoint> full = VaapiCapabilityParser.ParseFull(FullOutput);
brief.Count.Should().Be(20);
full.Count.Should().Be(20);
brief.Count.ShouldBe(20);
full.Count.ShouldBe(20);
}
[Test]
@ -194,11 +194,11 @@ VAProfileNone/VAEntrypointVideoProc @@ -194,11 +194,11 @@ VAProfileNone/VAEntrypointVideoProc
{
List<VaapiProfileEntrypoint> full = VaapiCapabilityParser.ParseFull(FullOutput);
full.Count.Should().Be(20);
full.Count(e => e.VaapiEntrypoint.StartsWith("VAEntrypointEnc")).Should().BeGreaterThan(0);
full.Count.ShouldBe(20);
full.Count(e => e.VaapiEntrypoint.StartsWith("VAEntrypointEnc")).ShouldBeGreaterThan(0);
foreach (VaapiProfileEntrypoint entrypoint in full.Where(e => e.VaapiEntrypoint.StartsWith("VAEntrypointEnc")))
{
entrypoint.RateControlModes.Count.Should().BeGreaterThan(0);
entrypoint.RateControlModes.Count.ShouldBeGreaterThan(0);
}
}
}

2
ErsatzTV.FFmpeg.Tests/ErsatzTV.FFmpeg.Tests.csproj

@ -8,12 +8,12 @@ @@ -8,12 +8,12 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="8.2.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="NUnit" Version="4.3.2" />
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
<PackageReference Include="Shouldly" Version="4.3.0" />
<PackageReference Include="System.IO.FileSystem.Primitives" Version="4.3.0" />
<PackageReference Include="System.Text.Encoding.Extensions" Version="4.3.0" />
<PackageReference Include="System.Runtime.Handles" Version="4.3.0" />

6
ErsatzTV.FFmpeg.Tests/Filter/WatermarkOpacityFilterTests.cs

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
using System.Collections.Generic;
using ErsatzTV.FFmpeg.Filter;
using ErsatzTV.FFmpeg.State;
using FluentAssertions;
using Shouldly;
using LanguageExt;
using NUnit.Framework;
@ -26,7 +26,7 @@ public class WatermarkOpacityFilterTests @@ -26,7 +26,7 @@ public class WatermarkOpacityFilterTests
75,
false));
filter.Filter.Should().Be("format=yuva420p|yuva444p|yuva422p|rgba|abgr|bgra|gbrap|ya8,colorchannelmixer=aa=0.75");
filter.Filter.ShouldBe("format=yuva420p|yuva444p|yuva422p|rgba|abgr|bgra|gbrap|ya8,colorchannelmixer=aa=0.75");
}
[Test]
@ -44,6 +44,6 @@ public class WatermarkOpacityFilterTests @@ -44,6 +44,6 @@ public class WatermarkOpacityFilterTests
75,
false));
filter.Filter.Should().Be("format=yuva420p|yuva444p|yuva422p|rgba|abgr|bgra|gbrap|ya8,colorchannelmixer=aa=0.75");
filter.Filter.ShouldBe("format=yuva420p|yuva444p|yuva422p|rgba|abgr|bgra|gbrap|ya8,colorchannelmixer=aa=0.75");
}
}

42
ErsatzTV.FFmpeg.Tests/PipelineBuilderBaseTests.cs

@ -8,7 +8,7 @@ using ErsatzTV.FFmpeg.OutputFormat; @@ -8,7 +8,7 @@ using ErsatzTV.FFmpeg.OutputFormat;
using ErsatzTV.FFmpeg.Pipeline;
using ErsatzTV.FFmpeg.Preset;
using ErsatzTV.FFmpeg.State;
using FluentAssertions;
using Shouldly;
using LanguageExt;
using Microsoft.Extensions.Logging;
using NSubstitute;
@ -110,11 +110,11 @@ public class PipelineBuilderBaseTests @@ -110,11 +110,11 @@ public class PipelineBuilderBaseTests
_logger);
FFmpegPipeline result = builder.Build(ffmpegState, desiredState);
result.PipelineSteps.Should().HaveCountGreaterThan(0);
result.PipelineSteps.Should().Contain(ps => ps is EncoderLibx265);
result.PipelineSteps.Count.ShouldBeGreaterThan(0);
result.PipelineSteps.ShouldContain(ps => ps is EncoderLibx265);
string command = PrintCommand(videoInputFile, audioInputFile, None, None, result);
command.Should().Be(
command.ShouldBe(
"-threads 1 -nostdin -hide_banner -nostats -loglevel error -fflags +genpts+discardcorrupt+igndts -ss 00:00:01 -c:v h264 -readrate 1.0 -i /tmp/whatever.mkv -filter_complex [0:1]aresample=async=1:first_pts=0[a] -map 0:0 -map [a] -muxdelay 0 -muxpreload 0 -movflags +faststart -flags cgop -bf 0 -sc_threshold 0 -video_track_timescale 90000 -b:v 2000k -maxrate:v 2000k -bufsize:v 4000k -c:v libx265 -tag:v hvc1 -x265-params log-level=error -c:a aac -b:a 320k -maxrate:a 320k -bufsize:a 640k -ar 48k -f mpegts -mpegts_flags +initial_discontinuity pipe:1");
}
@ -206,11 +206,11 @@ public class PipelineBuilderBaseTests @@ -206,11 +206,11 @@ public class PipelineBuilderBaseTests
_logger);
FFmpegPipeline result = builder.Build(ffmpegState, desiredState);
result.PipelineSteps.Should().HaveCountGreaterThan(0);
result.PipelineSteps.Should().Contain(ps => ps is EncoderLibx265);
result.PipelineSteps.Count.ShouldBeGreaterThan(0);
result.PipelineSteps.ShouldContain(ps => ps is EncoderLibx265);
string command = PrintCommand(videoInputFile, audioInputFile, None, None, result);
command.Should().Be(
command.ShouldBe(
"-threads 1 -nostdin -hide_banner -nostats -loglevel error -fflags +genpts+discardcorrupt+igndts -ss 00:00:01 -c:v h264 -readrate 1.0 -i /tmp/whatever.mkv -filter_complex [0:1]aresample=async=1:first_pts=0[a] -map 0:0 -map [a] -muxdelay 0 -muxpreload 0 -movflags +faststart -flags cgop -bf 0 -sc_threshold 0 -video_track_timescale 90000 -b:v 2000k -maxrate:v 2000k -bufsize:v 4000k -c:v libx265 -tag:v hvc1 -x265-params log-level=error -c:a aac -ac 6 -b:a 320k -maxrate:a 320k -bufsize:a 640k -ar 48k -f mpegts -mpegts_flags +initial_discontinuity pipe:1");
}
@ -233,11 +233,11 @@ public class PipelineBuilderBaseTests @@ -233,11 +233,11 @@ public class PipelineBuilderBaseTests
_logger);
FFmpegPipeline result = builder.Concat(concatInputFile, FFmpegState.Concat(false, "Some Channel"));
result.PipelineSteps.Should().HaveCountGreaterThan(0);
result.PipelineSteps.Count.ShouldBeGreaterThan(0);
string command = PrintCommand(None, None, None, concatInputFile, result);
command.Should().Be(
command.ShouldBe(
"-nostdin -hide_banner -nostats -loglevel error -fflags +genpts+discardcorrupt+igndts -f concat -safe 0 -protocol_whitelist file,http,tcp,https,tcp,tls -probesize 32 -readrate 1.0 -stream_loop -1 -i http://localhost:8080/ffmpeg/concat/1 -muxdelay 0 -muxpreload 0 -movflags +faststart -flags cgop -sc_threshold 0 -c copy -map_metadata -1 -metadata service_provider=\"ErsatzTV\" -metadata service_name=\"Some Channel\" -f mpegts -mpegts_flags +initial_discontinuity pipe:1");
}
@ -262,11 +262,11 @@ public class PipelineBuilderBaseTests @@ -262,11 +262,11 @@ public class PipelineBuilderBaseTests
_logger);
FFmpegPipeline result = builder.WrapSegmenter(concatInputFile, FFmpegState.Concat(false, "Some Channel"));
result.PipelineSteps.Should().HaveCountGreaterThan(0);
result.PipelineSteps.Count.ShouldBeGreaterThan(0);
string command = PrintCommand(None, None, None, concatInputFile, result);
command.Should().Be(
command.ShouldBe(
"-nostdin -threads 1 -hide_banner -loglevel error -nostats -fflags +genpts+discardcorrupt+igndts -readrate 1.0 -i http://localhost:8080/iptv/channel/1.m3u8?mode=segmenter -map 0 -c copy -metadata service_provider=\"ErsatzTV\" -metadata service_name=\"Some Channel\" -f mpegts pipe:1");
}
@ -358,15 +358,15 @@ public class PipelineBuilderBaseTests @@ -358,15 +358,15 @@ public class PipelineBuilderBaseTests
_logger);
FFmpegPipeline result = builder.Build(ffmpegState, desiredState);
result.PipelineSteps.Should().HaveCountGreaterThan(0);
result.PipelineSteps.Should().Contain(ps => ps is EncoderCopyVideo);
result.PipelineSteps.Should().Contain(ps => ps is EncoderCopyAudio);
videoInputFile.InputOptions.Should().Contain(io => io is ReadrateInputOption);
result.PipelineSteps.Count.ShouldBeGreaterThan(0);
result.PipelineSteps.ShouldContain(ps => ps is EncoderCopyVideo);
result.PipelineSteps.ShouldContain(ps => ps is EncoderCopyAudio);
videoInputFile.InputOptions.ShouldContain(io => io is ReadrateInputOption);
string command = PrintCommand(videoInputFile, audioInputFile, None, None, result);
// 0.4.0 reference: "-nostdin -threads 1 -hide_banner -loglevel error -nostats -fflags +genpts+discardcorrupt+igndts -re -ss 00:14:33.6195516 -i /tmp/whatever.mkv -map 0:0 -map 0:a -c:v copy -flags cgop -sc_threshold 0 -c:a copy -movflags +faststart -muxdelay 0 -muxpreload 0 -metadata service_provider="ErsatzTV" -metadata service_name="ErsatzTV" -t 00:06:39.6934484 -f mpegts -mpegts_flags +initial_discontinuity pipe:1"
command.Should().Be(
command.ShouldBe(
"-nostdin -hide_banner -nostats -loglevel error -fflags +genpts+discardcorrupt+igndts -readrate 1.0 -i /tmp/whatever.mkv -map 0:0 -map 0:1 -muxdelay 0 -muxpreload 0 -movflags +faststart+frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov+delay_moov -flags cgop -sc_threshold 0 -c:v copy -c:a copy -f mp4 pipe:1");
}
@ -448,13 +448,13 @@ public class PipelineBuilderBaseTests @@ -448,13 +448,13 @@ public class PipelineBuilderBaseTests
_logger);
FFmpegPipeline result = builder.Build(ffmpegState, desiredState);
result.PipelineSteps.Should().HaveCountGreaterThan(0);
result.PipelineSteps.Should().Contain(ps => ps is EncoderCopyVideo);
result.PipelineSteps.Should().Contain(ps => ps is EncoderCopyAudio);
result.PipelineSteps.Count.ShouldBeGreaterThan(0);
result.PipelineSteps.ShouldContain(ps => ps is EncoderCopyVideo);
result.PipelineSteps.ShouldContain(ps => ps is EncoderCopyAudio);
string command = PrintCommand(videoInputFile, audioInputFile, None, None, result);
command.Should().Be(
command.ShouldBe(
"-nostdin -hide_banner -nostats -loglevel error -fflags +genpts+discardcorrupt+igndts -readrate 1.0 -i /tmp/whatever.mkv -map 0:0 -map 0:a -muxdelay 0 -muxpreload 0 -movflags +faststart+frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov+delay_moov -flags cgop -sc_threshold 0 -c:v copy -c:a copy -f mp4 pipe:1");
}
@ -497,7 +497,7 @@ public class PipelineBuilderBaseTests @@ -497,7 +497,7 @@ public class PipelineBuilderBaseTests
string command = PrintCommand(videoInputFile, None, None, None, result);
command.Should().Be(
command.ShouldBe(
"-nostdin -hide_banner -nostats -loglevel error -i /test/input/file.png -vf scale=-1:200:force_original_aspect_ratio=decrease /test/output/file.jpg");
}

6
ErsatzTV.Infrastructure.Tests/Data/Repositories/Caching/CachingSearchRepositoryTests.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Infrastructure.Data.Repositories.Caching;
using FluentAssertions;
using Shouldly;
using LanguageExt;
using NSubstitute;
using NUnit.Framework;
@ -25,9 +25,9 @@ public class CachingSearchRepositoryTests @@ -25,9 +25,9 @@ public class CachingSearchRepositoryTests
var repo = new CachingSearchRepository(searchRepo);
List<string> result1 = await repo.GetAllThreeLetterLanguageCodes(englishMediaCodes);
result1.Should().BeEquivalentTo(englishResult);
result1.ShouldBeEquivalentTo(englishResult);
List<string> result2 = await repo.GetAllThreeLetterLanguageCodes(frenchMediaCodes);
result2.Should().BeEquivalentTo(frenchResult);
result2.ShouldBeEquivalentTo(frenchResult);
}
}

2
ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj

@ -9,7 +9,6 @@ @@ -9,7 +9,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="8.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="NUnit" Version="4.3.2" />
@ -22,6 +21,7 @@ @@ -22,6 +21,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Shouldly" Version="4.3.0" />
</ItemGroup>
<ItemGroup>

4
ErsatzTV.Infrastructure.Tests/Metadata/LocalStatisticsProviderTests.cs

@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain; @@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Metadata;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Infrastructure.Metadata;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
@ -43,6 +43,6 @@ public class LocalStatisticsProviderTests @@ -43,6 +43,6 @@ public class LocalStatisticsProviderTests
MediaVersion result = provider.ProjectToMediaVersion("test", input);
result.Duration.Should().Be(TimeSpan.FromSeconds(123.45));
result.Duration.ShouldBe(TimeSpan.FromSeconds(123.45));
}
}

4
ErsatzTV.Infrastructure.Tests/Search/SearchQueryParserTests.cs

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
using ErsatzTV.Infrastructure.Search;
using FluentAssertions;
using Shouldly;
using Lucene.Net.Search;
using NUnit.Framework;
@ -17,7 +17,7 @@ public class SearchQueryParserTests @@ -17,7 +17,7 @@ public class SearchQueryParserTests
public void Test(string input, string expected)
{
Query result = SearchQueryParser.ParseQuery(input);
result.ToString().Should().Be(expected);
result.ToString().ShouldBe(expected);
}
}
}

58
ErsatzTV.Scanner.Tests/Core/FFmpeg/TranscodingTests.cs

@ -25,7 +25,7 @@ using ErsatzTV.FFmpeg.State; @@ -25,7 +25,7 @@ using ErsatzTV.FFmpeg.State;
using ErsatzTV.Infrastructure.Images;
using ErsatzTV.Infrastructure.Metadata;
using ErsatzTV.Infrastructure.Runtime;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
using NSubstitute;
@ -109,18 +109,18 @@ public class TranscodingTests @@ -109,18 +109,18 @@ public class TranscodingTests
{
public static Watermark[] Watermarks =
[
Watermark.None
//Watermark.PermanentOpaqueScaled,
// Watermark.PermanentOpaqueActualSize,
//Watermark.PermanentTransparentScaled
// Watermark.PermanentTransparentActualSize
Watermark.None,
Watermark.PermanentOpaqueScaled,
Watermark.PermanentOpaqueActualSize,
Watermark.PermanentTransparentScaled,
Watermark.PermanentTransparentActualSize
];
public static Subtitle[] Subtitles =
[
Subtitle.None
//Subtitle.Picture,
//Subtitle.Text
Subtitle.None,
Subtitle.Picture,
Subtitle.Text
];
public static Padding[] Paddings =
@ -199,7 +199,7 @@ public class TranscodingTests @@ -199,7 +199,7 @@ public class TranscodingTests
[
HardwareAccelerationKind.None,
//HardwareAccelerationKind.Nvenc,
HardwareAccelerationKind.Vaapi
//HardwareAccelerationKind.Vaapi
//HardwareAccelerationKind.Qsv,
// HardwareAccelerationKind.VideoToolbox,
// HardwareAccelerationKind.Amf
@ -209,7 +209,7 @@ public class TranscodingTests @@ -209,7 +209,7 @@ public class TranscodingTests
[
StreamingMode.TransportStream,
//StreamingMode.HttpLiveStreamingSegmenter,
StreamingMode.HttpLiveStreamingSegmenterV2
//StreamingMode.HttpLiveStreamingSegmenterV2
];
public static string[] FilesToTest => [string.Empty];
@ -484,7 +484,7 @@ public class TranscodingTests @@ -484,7 +484,7 @@ public class TranscodingTests
if (videoScanKind == VideoScanKind.Interlaced)
{
v.VideoScanKind.Should().Be(VideoScanKind.Interlaced, file);
v.VideoScanKind.ShouldBe(VideoScanKind.Interlaced, file);
}
var subtitleStreams = v.Streams
@ -559,7 +559,7 @@ public class TranscodingTests @@ -559,7 +559,7 @@ public class TranscodingTests
bool hasDeinterlaceFilter = filterChain.VideoFilterSteps.Any(
s => s is YadifFilter or YadifCudaFilter or DeinterlaceQsvFilter or DeinterlaceVaapiFilter);
hasDeinterlaceFilter.Should().Be(videoScanKind == VideoScanKind.Interlaced);
hasDeinterlaceFilter.ShouldBe(videoScanKind == VideoScanKind.Interlaced);
bool hasScaling = filterChain.VideoFilterSteps.Filter(
s => s is ScaleFilter or ScaleCudaFilter or ScaleQsvFilter or ScaleVaapiFilter)
@ -569,7 +569,7 @@ public class TranscodingTests @@ -569,7 +569,7 @@ public class TranscodingTests
// TODO: sometimes scaling is used for pixel format, so this is harder to assert the absence
if (profileResolution.Width != 1920 && profileResolution.Width != 640)
{
hasScaling.Should().BeTrue();
hasScaling.ShouldBeTrue();
}
// TODO: bit depth
@ -577,16 +577,16 @@ public class TranscodingTests @@ -577,16 +577,16 @@ public class TranscodingTests
bool hasPadding = filterChain.VideoFilterSteps.Any(s => s is PadFilter);
// TODO: optimize out padding
// hasPadding.Should().Be(padding == Padding.WithPadding);
// hasPadding.ShouldBe(padding == Padding.WithPadding);
if (padding is Padding.WithPadding && scalingBehavior is not ScalingBehavior.Crop)
{
hasPadding.Should().BeTrue();
hasPadding.ShouldBeTrue();
}
bool hasCrop = filterChain.VideoFilterSteps.Any(s => s is CropFilter);
if (scalingBehavior is ScalingBehavior.Crop)
{
hasCrop.Should().BeTrue();
hasCrop.ShouldBeTrue();
}
bool hasSubtitleFilters =
@ -597,12 +597,12 @@ public class TranscodingTests @@ -597,12 +597,12 @@ public class TranscodingTests
or OverlaySubtitleQsvFilter
or OverlaySubtitleVaapiFilter);
hasSubtitleFilters.Should().Be(subtitle != Subtitle.None);
hasSubtitleFilters.ShouldBe(subtitle != Subtitle.None);
bool hasWatermarkFilters = filterChain.WatermarkOverlayFilterSteps.Any(
s => s is OverlayWatermarkFilter or OverlayWatermarkCudaFilter or OverlayWatermarkQsvFilter);
hasWatermarkFilters.Should().Be(watermark != Watermark.None);
hasWatermarkFilters.ShouldBe(watermark != Watermark.None);
}
FFmpegLibraryProcessService service = GetService();
@ -780,7 +780,7 @@ public class TranscodingTests @@ -780,7 +780,7 @@ public class TranscodingTests
? p1.StandardError
: p1.StandardOutput;
p1.ExitCode.Should().Be(0, output);
p1.ExitCode.ShouldBe(0, output);
switch (subtitle)
{
@ -813,7 +813,7 @@ public class TranscodingTests @@ -813,7 +813,7 @@ public class TranscodingTests
}
}
p2.ExitCode.Should().Be(0);
p2.ExitCode.ShouldBe(0);
await SetInterlacedFlag(tempFileName, sourceFile, file, videoScanKind == VideoScanKind.Interlaced);
@ -850,7 +850,7 @@ public class TranscodingTests @@ -850,7 +850,7 @@ public class TranscodingTests
}
}
p.ExitCode.Should().Be(0);
p.ExitCode.ShouldBe(0);
}
private static string GetStringSha256Hash(string text)
@ -956,7 +956,7 @@ public class TranscodingTests @@ -956,7 +956,7 @@ public class TranscodingTests
if (profileAcceleration != HardwareAccelerationKind.None && isUnsupported)
{
result.ExitCode.Should().Be(1, $"Error message with successful exit code? {process.Arguments}");
result.ExitCode.ShouldBe(1, $"Error message with successful exit code? {process.Arguments}");
Assert.Warn($"Unsupported on this hardware: ffmpeg {process.Arguments}");
}
else if (error.Contains("Impossible to convert between"))
@ -973,7 +973,7 @@ public class TranscodingTests @@ -973,7 +973,7 @@ public class TranscodingTests
' ',
process.Arguments.Split(" ").Map(a => a.Contains('[') ? $"\"{a}\"" : a));
result.ExitCode.Should().Be(0, error + Environment.NewLine + arguments);
result.ExitCode.ShouldBe(0, error + Environment.NewLine + arguments);
if (result.ExitCode == 0)
{
Console.WriteLine(process.Arguments);
@ -998,11 +998,11 @@ public class TranscodingTests @@ -998,11 +998,11 @@ public class TranscodingTests
MediaVersion v = getFinalMediaVersion();
// verify de-interlace
v.VideoScanKind.Should().NotBe(VideoScanKind.Interlaced);
v.VideoScanKind.ShouldNotBe(VideoScanKind.Interlaced);
// verify resolution
v.Height.Should().Be(profileResolution.Height);
v.Width.Should().Be(profileResolution.Width);
v.Height.ShouldBe(profileResolution.Height);
v.Width.ShouldBe(profileResolution.Width);
foreach (MediaStream videoStream in v.Streams.Filter(s => s.MediaStreamKind == MediaStreamKind.Video))
{
@ -1014,7 +1014,7 @@ public class TranscodingTests @@ -1014,7 +1014,7 @@ public class TranscodingTests
_ => PixelFormat.YUV420P
};
videoStream.PixelFormat.Should().Be(expectedPixelFormat);
videoStream.PixelFormat.ShouldBe(expectedPixelFormat);
// verify colors
var colorParams = new ColorParams(
@ -1032,7 +1032,7 @@ public class TranscodingTests @@ -1032,7 +1032,7 @@ public class TranscodingTests
(profileAcceleration != HardwareAccelerationKind.Vaapi || vaapiDriver != VaapiDriver.RadeonSI) &&
streamingMode != StreamingMode.HttpLiveStreamingSegmenterV2)
{
colorParams.IsBt709.Should().BeTrue($"{colorParams}");
colorParams.IsBt709.ShouldBeTrue($"{colorParams}");
}
}
}

34
ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs

@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain; @@ -3,7 +3,7 @@ using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Scanner.Core.Metadata;
using ErsatzTV.Scanner.Tests.Core.Fakes;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using NSubstitute;
using NUnit.Framework;
@ -57,14 +57,14 @@ public class LocalSubtitlesProviderTests @@ -57,14 +57,14 @@ public class LocalSubtitlesProviderTests
@"/Movies/Avatar (2009)/Avatar (2009).mkv",
true);
result.Count.Should().Be(5);
result.Count(s => s.Language == "eng").Should().Be(3);
result.Count(s => s.Language == "deu").Should().Be(2);
result.Count(s => s.Forced).Should().Be(2);
result.Count(s => s.SDH).Should().Be(2);
result.Count(s => s.Codec == "subrip").Should().Be(4);
result.Count(s => s.Codec == "ass").Should().Be(1);
result.All(s => s.Path.Contains(@"/Movies/Avatar (2009)/")).Should().BeTrue();
result.Count.ShouldBe(5);
result.Count(s => s.Language == "eng").ShouldBe(3);
result.Count(s => s.Language == "deu").ShouldBe(2);
result.Count(s => s.Forced).ShouldBe(2);
result.Count(s => s.SDH).ShouldBe(2);
result.Count(s => s.Codec == "subrip").ShouldBe(4);
result.Count(s => s.Codec == "ass").ShouldBe(1);
result.All(s => s.Path.Contains(@"/Movies/Avatar (2009)/")).ShouldBeTrue();
}
[Test]
@ -102,13 +102,13 @@ public class LocalSubtitlesProviderTests @@ -102,13 +102,13 @@ public class LocalSubtitlesProviderTests
@"/Movies/Avatar (2009)/Avatar (2009).mkv",
false);
result.Count.Should().Be(7);
result.Count(s => s.Language == "eng").Should().Be(5);
result.Count(s => s.Language == "deu").Should().Be(2);
result.Count(s => s.Forced).Should().Be(3);
result.Count(s => s.SDH).Should().Be(3);
result.Count(s => s.Codec == "subrip").Should().Be(5);
result.Count(s => s.Codec == "ass").Should().Be(2);
result.Count(s => s.Path.Contains(@"/Movies/Avatar (2009)/")).Should().Be(0);
result.Count.ShouldBe(7);
result.Count(s => s.Language == "eng").ShouldBe(5);
result.Count(s => s.Language == "deu").ShouldBe(2);
result.Count(s => s.Forced).ShouldBe(3);
result.Count(s => s.SDH).ShouldBe(3);
result.Count(s => s.Codec == "subrip").ShouldBe(5);
result.Count(s => s.Codec == "ass").ShouldBe(2);
result.Count(s => s.Path.Contains(@"/Movies/Avatar (2009)/")).ShouldBe(0);
}
}

28
ErsatzTV.Scanner.Tests/Core/Metadata/MovieFolderScannerTests.cs

@ -11,7 +11,7 @@ using ErsatzTV.Scanner.Core.Interfaces.FFmpeg; @@ -11,7 +11,7 @@ using ErsatzTV.Scanner.Core.Interfaces.FFmpeg;
using ErsatzTV.Scanner.Core.Interfaces.Metadata;
using ErsatzTV.Scanner.Core.Metadata;
using ErsatzTV.Scanner.Tests.Core.Fakes;
using FluentAssertions;
using Shouldly;
using MediatR;
using Microsoft.Extensions.Logging;
using NSubstitute;
@ -109,7 +109,7 @@ public class MovieFolderScannerTests @@ -109,7 +109,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _movieRepository.Received(1).GetOrAdd(
Arg.Any<LibraryPath>(),
@ -153,7 +153,7 @@ public class MovieFolderScannerTests @@ -153,7 +153,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _movieRepository.Received(1).GetOrAdd(
Arg.Any<LibraryPath>(),
@ -196,7 +196,7 @@ public class MovieFolderScannerTests @@ -196,7 +196,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _movieRepository.Received(1).GetOrAdd(
Arg.Any<LibraryPath>(),
@ -240,7 +240,7 @@ public class MovieFolderScannerTests @@ -240,7 +240,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _movieRepository.Received(1).GetOrAdd(
Arg.Any<LibraryPath>(),
@ -288,7 +288,7 @@ public class MovieFolderScannerTests @@ -288,7 +288,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _movieRepository.Received(1).GetOrAdd(
Arg.Any<LibraryPath>(),
@ -337,7 +337,7 @@ public class MovieFolderScannerTests @@ -337,7 +337,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _movieRepository.Received(1).GetOrAdd(
Arg.Any<LibraryPath>(),
@ -386,7 +386,7 @@ public class MovieFolderScannerTests @@ -386,7 +386,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _movieRepository.Received(1).GetOrAdd(
Arg.Any<LibraryPath>(),
@ -434,7 +434,7 @@ public class MovieFolderScannerTests @@ -434,7 +434,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _movieRepository.Received(1).GetOrAdd(
Arg.Any<LibraryPath>(),
@ -478,7 +478,7 @@ public class MovieFolderScannerTests @@ -478,7 +478,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _movieRepository.Received(1).GetOrAdd(
Arg.Any<LibraryPath>(),
@ -524,7 +524,7 @@ public class MovieFolderScannerTests @@ -524,7 +524,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _movieRepository.Received(1).GetOrAdd(
Arg.Any<LibraryPath>(),
@ -564,7 +564,7 @@ public class MovieFolderScannerTests @@ -564,7 +564,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _movieRepository.Received(1).GetOrAdd(
Arg.Any<LibraryPath>(),
@ -609,7 +609,7 @@ public class MovieFolderScannerTests @@ -609,7 +609,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _mediaItemRepository.Received(1).FlagFileNotFound(Arg.Any<LibraryPath>(), Arg.Any<string>());
await _mediaItemRepository.Received(1).FlagFileNotFound(libraryPath, oldMoviePath);
@ -638,7 +638,7 @@ public class MovieFolderScannerTests @@ -638,7 +638,7 @@ public class MovieFolderScannerTests
1,
CancellationToken.None);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
await _mediaItemRepository.Received(1).FlagFileNotFound(Arg.Any<LibraryPath>(), Arg.Any<string>());
await _mediaItemRepository.Received(1).FlagFileNotFound(libraryPath, oldMoviePath);

38
ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/ArtistNfoReaderTests.cs

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
using Bugsnag;
using ErsatzTV.Core;
using ErsatzTV.Scanner.Core.Metadata.Nfo;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using Microsoft.IO;
using NSubstitute;
@ -44,7 +44,7 @@ public class ArtistNfoReaderTests @@ -44,7 +44,7 @@ public class ArtistNfoReaderTests
Either<BaseError, ArtistNfo> result = await _artistNfoReader.Read(stream);
result.IsLeft.Should().BeTrue();
result.IsLeft.ShouldBeTrue();
}
[Test]
@ -54,7 +54,7 @@ public class ArtistNfoReaderTests @@ -54,7 +54,7 @@ public class ArtistNfoReaderTests
Either<BaseError, ArtistNfo> result = await _artistNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
}
[Test]
@ -67,7 +67,7 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -67,7 +67,7 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, ArtistNfo> result = await _artistNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
}
[Test]
@ -121,14 +121,14 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -121,14 +121,14 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, ArtistNfo> result = await _artistNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (ArtistNfo nfo in result.RightToSeq())
{
nfo.Name.Should().Be("Billy Joel");
nfo.Disambiguation.Should().BeNullOrEmpty();
nfo.Genres.Should().BeEquivalentTo(new List<string> { "Pop/Rock" });
nfo.Styles.Should().BeEquivalentTo(
nfo.Name.ShouldBe("Billy Joel");
nfo.Disambiguation.ShouldBeNullOrEmpty();
nfo.Genres.ShouldBeEquivalentTo(new List<string> { "Pop/Rock" });
nfo.Styles.ShouldBeEquivalentTo(
new List<string>
{
"Album Rock",
@ -137,7 +137,7 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -137,7 +137,7 @@ https://www.themoviedb.org/movie/11-star-wars"));
"Soft Rock",
"Keyboard"
});
nfo.Moods.Should().BeEquivalentTo(
nfo.Moods.ShouldBeEquivalentTo(
new List<string>
{
"Amiable/Good-Natured",
@ -150,7 +150,7 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -150,7 +150,7 @@ https://www.themoviedb.org/movie/11-star-wars"));
"Cynical/Sarcastic",
"Earnest"
});
nfo.Biography.Should().Be(
nfo.Biography.ShouldBe(
NormalizeLineEndingsLF(
@"William Martin ""Billy"" Joel (born May 9, 1949, New York, USA) is an American pianist, singer-songwriter, and composer. Since releasing his first hit song, ""Piano Man"", in 1973, Joel has become the sixth-best-selling recording artist and the third-best-selling solo artist in the United States, according to the RIAA. His compilation album Greatest Hits Vol. 1 & 2 is the third-best-selling album in the United States by discs shipped.
Joel had Top 40 hits in the 1970s, 1980s, and 1990s, achieving 33 Top 40 hits in the United States, all of which he wrote himself. He is also a six-time Grammy Award winner, a 23-time Grammy nominee and one of the world's best-selling artists of all time, having sold over 150 million records worldwide. He was inducted into the Songwriter's Hall of Fame (1992), the Rock and Roll Hall of Fame (1999), and the Long Island Music Hall of Fame (2006). In 2008, Billboard magazine released a list of the Hot 100 All-Time Top Artists to celebrate the US singles chart's 50th anniversary, with Billy Joel positioned at No. 23. With the exception of the 2007 songs ""All My Life"" and ""Christmas in Fallujah"", Joel stopped writing and recording popular music after 1993's River of Dreams, but he continued to tour extensively until 2010. Joel was born in the Bronx, May 9, 1949 and raised in Hicksville, New York in a Levitt home. His father, Howard (born Helmuth), was born in Germany, the son of German merchant and manufacturer Karl Amson Joel, who, after the advent of the Nazi regime, emigrated to Switzerland and later to the United States. Billy Joel's mother, Rosalind Nyman, was born in England to Philip and Rebecca Nyman. Both of Joel's parents were Jewish. They divorced in 1960, and his father moved to Vienna, Austria. Billy has a sister, Judith Joel, and a half-brother, Alexander Joel, who is an acclaimed classical conductor in Europe and currently chief musical director of the Staatstheater Braunschweig.
@ -167,10 +167,10 @@ Joel attended Hicksville High School in 1967, but he did not graduate with his c @@ -167,10 +167,10 @@ Joel attended Hicksville High School in 1967, but he did not graduate with his c
Either<BaseError, ArtistNfo> result = await _artistNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (ArtistNfo nfo in result.RightToSeq())
{
nfo.Disambiguation.Should().Be("Test Disambiguation");
nfo.Disambiguation.ShouldBe("Test Disambiguation");
}
}
@ -184,10 +184,10 @@ Joel attended Hicksville High School in 1967, but he did not graduate with his c @@ -184,10 +184,10 @@ Joel attended Hicksville High School in 1967, but he did not graduate with his c
"ArtistInvalidCharacters1.nfo");
Either<BaseError, ArtistNfo> result = await _artistNfoReader.ReadFromFile(sourceFile);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (ArtistNfo nfo in result.RightToSeq())
{
nfo.Name.Should().Be("Test Name");
nfo.Name.ShouldBe("Test Name");
}
}
@ -201,12 +201,12 @@ Joel attended Hicksville High School in 1967, but he did not graduate with his c @@ -201,12 +201,12 @@ Joel attended Hicksville High School in 1967, but he did not graduate with his c
"ArtistInvalidCharacters2.nfo");
Either<BaseError, ArtistNfo> result = await _artistNfoReader.ReadFromFile(sourceFile);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (ArtistNfo nfo in result.RightToSeq())
{
nfo.Name.Should().Be("Test Name");
nfo.Moods.Should().BeEquivalentTo(new List<string> { "Test Mood" });
nfo.Styles.Count.Should().Be(1);
nfo.Name.ShouldBe("Test Name");
nfo.Moods.ShouldBeEquivalentTo(new List<string> { "Test Mood" });
nfo.Styles.Count.ShouldBe(1);
}
}

128
ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/EpisodeNfoReaderTests.cs

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
using Bugsnag;
using ErsatzTV.Core;
using ErsatzTV.Scanner.Core.Metadata.Nfo;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging;
using Microsoft.IO;
using NSubstitute;
@ -48,10 +48,10 @@ public class EpisodeNfoReaderTests @@ -48,10 +48,10 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(1);
list.Count.ShouldBe(1);
}
}
@ -77,14 +77,14 @@ public class EpisodeNfoReaderTests @@ -77,14 +77,14 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(2);
list.All(nfo => nfo.ShowTitle == "show").Should().BeTrue();
list.All(nfo => nfo.Season == 1).Should().BeTrue();
list.Count(nfo => nfo.Title == "episode-one" && nfo.Episode == 1).Should().Be(1);
list.Count(nfo => nfo.Title == "episode-two" && nfo.Episode == 2).Should().Be(1);
list.Count.ShouldBe(2);
list.All(nfo => nfo.ShowTitle == "show").ShouldBeTrue();
list.All(nfo => nfo.Season == 1).ShouldBeTrue();
list.Count(nfo => nfo.Title == "episode-one" && nfo.Episode == 1).ShouldBe(1);
list.Count(nfo => nfo.Title == "episode-two" && nfo.Episode == 2).ShouldBe(1);
}
}
@ -102,13 +102,13 @@ public class EpisodeNfoReaderTests @@ -102,13 +102,13 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(1);
list[0].UniqueIds.Count.Should().Be(2);
list[0].UniqueIds.Count(id => id.Default && id.Type == "tvdb" && id.Guid == "12345").Should().Be(1);
list[0].UniqueIds.Count(id => !id.Default && id.Type == "imdb" && id.Guid == "tt54321").Should().Be(1);
list.Count.ShouldBe(1);
list[0].UniqueIds.Count.ShouldBe(2);
list[0].UniqueIds.Count(id => id.Default && id.Type == "tvdb" && id.Guid == "12345").ShouldBe(1);
list[0].UniqueIds.Count(id => !id.Default && id.Type == "imdb" && id.Guid == "tt54321").ShouldBe(1);
}
}
@ -125,11 +125,11 @@ public class EpisodeNfoReaderTests @@ -125,11 +125,11 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(1);
list[0].ContentRating.Should().BeNullOrEmpty();
list.Count.ShouldBe(1);
list[0].ContentRating.ShouldBeNullOrEmpty();
}
}
@ -149,12 +149,12 @@ public class EpisodeNfoReaderTests @@ -149,12 +149,12 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(2);
list.Count(nfo => nfo.ContentRating == "US:Something").Should().Be(1);
list.Count(nfo => nfo.ContentRating == "US:Something / US:SomethingElse").Should().Be(1);
list.Count.ShouldBe(2);
list.Count(nfo => nfo.ContentRating == "US:Something").ShouldBe(1);
list.Count(nfo => nfo.ContentRating == "US:Something / US:SomethingElse").ShouldBe(1);
}
}
@ -171,11 +171,11 @@ public class EpisodeNfoReaderTests @@ -171,11 +171,11 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(1);
list[0].Plot.Should().BeNullOrEmpty();
list.Count.ShouldBe(1);
list[0].Plot.ShouldBeNullOrEmpty();
}
}
@ -192,11 +192,11 @@ public class EpisodeNfoReaderTests @@ -192,11 +192,11 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(1);
list[0].Plot.Should().Be("Some Plot");
list.Count.ShouldBe(1);
list[0].Plot.ShouldBe("Some Plot");
}
}
@ -222,15 +222,15 @@ public class EpisodeNfoReaderTests @@ -222,15 +222,15 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(1);
list[0].Actors.Count.Should().Be(2);
list.Count.ShouldBe(1);
list[0].Actors.Count.ShouldBe(2);
list[0].Actors.Count(a => a.Name == "Name 1" && a.Role == "Role 1" && a.Thumb == "Thumb 1")
.Should().Be(1);
.ShouldBe(1);
list[0].Actors.Count(a => a.Name == "Name 2" && a.Role == "Role 2" && a.Thumb == "Thumb 2")
.Should().Be(1);
.ShouldBe(1);
}
}
@ -251,13 +251,13 @@ public class EpisodeNfoReaderTests @@ -251,13 +251,13 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(2);
list.Count(nfo => nfo.Writers.Count == 1 && nfo.Writers[0] == "Writer 1").Should().Be(1);
list.Count.ShouldBe(2);
list.Count(nfo => nfo.Writers.Count == 1 && nfo.Writers[0] == "Writer 1").ShouldBe(1);
list.Count(nfo => nfo.Writers.Count == 2 && nfo.Writers[0] == "Writer 2" && nfo.Writers[1] == "Writer 3")
.Should().Be(1);
.ShouldBe(1);
}
}
@ -278,15 +278,15 @@ public class EpisodeNfoReaderTests @@ -278,15 +278,15 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(2);
list.Count(nfo => nfo.Directors.Count == 1 && nfo.Directors[0] == "Director 1").Should().Be(1);
list.Count.ShouldBe(2);
list.Count(nfo => nfo.Directors.Count == 1 && nfo.Directors[0] == "Director 1").ShouldBe(1);
list.Count(
nfo => nfo.Directors.Count == 2 && nfo.Directors[0] == "Director 2" &&
nfo.Directors[1] == "Director 3")
.Should().Be(1);
.ShouldBe(1);
}
}
@ -307,12 +307,12 @@ public class EpisodeNfoReaderTests @@ -307,12 +307,12 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(2);
list.Count(nfo => nfo.Genres is ["Genre 1"]).Should().Be(1);
list.Count(nfo => nfo.Genres is ["Genre 2", "Genre 3"]).Should().Be(1);
list.Count.ShouldBe(2);
list.Count(nfo => nfo.Genres is ["Genre 1"]).ShouldBe(1);
list.Count(nfo => nfo.Genres is ["Genre 2", "Genre 3"]).ShouldBe(1);
}
}
@ -333,12 +333,12 @@ public class EpisodeNfoReaderTests @@ -333,12 +333,12 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(2);
list.Count(nfo => nfo.Tags is ["Tag 1"]).Should().Be(1);
list.Count(nfo => nfo.Tags is ["Tag 2", "Tag 3"]).Should().Be(1);
list.Count.ShouldBe(2);
list.Count(nfo => nfo.Tags is ["Tag 1"]).ShouldBe(1);
list.Count(nfo => nfo.Tags is ["Tag 2", "Tag 3"]).ShouldBe(1);
}
}
@ -434,25 +434,25 @@ public class EpisodeNfoReaderTests @@ -434,25 +434,25 @@ public class EpisodeNfoReaderTests
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (EpisodeNfo nfo in result.RightToSeq().Flatten())
{
nfo.ShowTitle.Should().Be("WandaVision");
nfo.Title.Should().Be("Filmed Before a Live Studio Audience");
nfo.Episode.Should().Be(1);
nfo.Season.Should().Be(1);
nfo.ContentRating.Should().Be("Australia:TV-14");
nfo.ShowTitle.ShouldBe("WandaVision");
nfo.Title.ShouldBe("Filmed Before a Live Studio Audience");
nfo.Episode.ShouldBe(1);
nfo.Season.ShouldBe(1);
nfo.ContentRating.ShouldBe("Australia:TV-14");
nfo.Aired.IsSome.Should().BeTrue();
nfo.Aired.IsSome.ShouldBeTrue();
foreach (DateTime aired in nfo.Aired)
{
aired.Should().Be(new DateTime(2021, 01, 15));
aired.ShouldBe(new DateTime(2021, 01, 15));
}
nfo.Plot.Should().Be(
nfo.Plot.ShouldBe(
"Wanda and Vision struggle to conceal their powers during dinner with Vision’s boss and his wife.");
nfo.Actors.Should().BeEquivalentTo(
nfo.Actors.ShouldBeEquivalentTo(
new List<ActorNfo>
{
new()
@ -466,9 +466,9 @@ public class EpisodeNfoReaderTests @@ -466,9 +466,9 @@ public class EpisodeNfoReaderTests
Thumb = "https://image.tmdb.org/t/p/original/rrfyo9z1wW5nY9ZsFlj1Ozfj9g2.jpg"
}
});
nfo.Writers.Should().BeEquivalentTo(new List<string> { "Jac Schaeffer" });
nfo.Directors.Should().BeEquivalentTo(new List<string> { "Matt Shakman" });
nfo.UniqueIds.Should().BeEquivalentTo(
nfo.Writers.ShouldBeEquivalentTo(new List<string> { "Jac Schaeffer" });
nfo.Directors.ShouldBeEquivalentTo(new List<string> { "Matt Shakman" });
nfo.UniqueIds.ShouldBeEquivalentTo(
new List<UniqueIdNfo>
{
new() { Type = "imdb", Guid = "tt9601584", Default = false },
@ -488,11 +488,11 @@ public class EpisodeNfoReaderTests @@ -488,11 +488,11 @@ public class EpisodeNfoReaderTests
"EpisodeInvalidCharacters.nfo");
Either<BaseError, List<EpisodeNfo>> result = await _episodeNfoReader.ReadFromFile(sourceFile);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (List<EpisodeNfo> list in result.RightToSeq())
{
list.Count.Should().Be(1);
list[0].Title.Should().Be("Test Title");
list.Count.ShouldBe(1);
list[0].Title.ShouldBe("Test Title");
}
}
}

50
ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/MovieNfoReaderTests.cs

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
using Bugsnag;
using ErsatzTV.Core;
using ErsatzTV.Scanner.Core.Metadata.Nfo;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.IO;
using NSubstitute;
@ -29,7 +29,7 @@ public class MovieNfoReaderTests @@ -29,7 +29,7 @@ public class MovieNfoReaderTests
Either<BaseError, MovieNfo> result = await _movieNfoReader.Read(stream);
result.IsLeft.Should().BeTrue();
result.IsLeft.ShouldBeTrue();
}
[Test]
@ -39,7 +39,7 @@ public class MovieNfoReaderTests @@ -39,7 +39,7 @@ public class MovieNfoReaderTests
Either<BaseError, MovieNfo> result = await _movieNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
}
[Test]
@ -52,7 +52,7 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -52,7 +52,7 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, MovieNfo> result = await _movieNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
}
[Test]
@ -170,29 +170,29 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -170,29 +170,29 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, MovieNfo> result = await _movieNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (MovieNfo nfo in result.RightToSeq())
{
nfo.Title.Should().Be("Zack Snyder's Justice League");
nfo.SortTitle.Should().Be("Justice League 2");
nfo.Outline.Should().BeNullOrEmpty();
nfo.Year.Should().Be(2021);
nfo.ContentRating.Should().Be("Australia:M");
nfo.Title.ShouldBe("Zack Snyder's Justice League");
nfo.SortTitle.ShouldBe("Justice League 2");
nfo.Outline.ShouldBeNullOrEmpty();
nfo.Year.ShouldBe(2021);
nfo.ContentRating.ShouldBe("Australia:M");
nfo.Premiered.IsSome.Should().BeTrue();
nfo.Premiered.IsSome.ShouldBeTrue();
foreach (DateTime premiered in nfo.Premiered)
{
premiered.Should().Be(new DateTime(2021, 03, 18));
premiered.ShouldBe(new DateTime(2021, 03, 18));
}
nfo.Plot.Should().Be(
nfo.Plot.ShouldBe(
"Determined to ensure Superman's ultimate sacrifice was not in vain, Bruce Wayne aligns forces with Diana Prince with plans to recruit a team of metahumans to protect the world from an approaching threat of catastrophic proportions.");
// nfo.Tagline.Should().BeNullOrEmpty();
nfo.Genres.Should().BeEquivalentTo(new List<string> { "SuperHero" });
nfo.Tags.Should().BeEquivalentTo(new List<string> { "TV Recording" });
nfo.Studios.Should().BeEquivalentTo(new List<string> { "Warner Bros. Pictures" });
nfo.Actors.Should().BeEquivalentTo(
// nfo.Tagline.ShouldBeNullOrEmpty();
nfo.Genres.ShouldBeEquivalentTo(new List<string> { "SuperHero" });
nfo.Tags.ShouldBeEquivalentTo(new List<string> { "TV Recording" });
nfo.Studios.ShouldBeEquivalentTo(new List<string> { "Warner Bros. Pictures" });
nfo.Actors.ShouldBeEquivalentTo(
new List<ActorNfo>
{
new()
@ -211,9 +211,9 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -211,9 +211,9 @@ https://www.themoviedb.org/movie/11-star-wars"));
Thumb = "https://image.tmdb.org/t/p/original/fysvehTvU6bE3JgxaOTRfvQJzJ4.jpg"
}
});
nfo.Writers.Should().BeEquivalentTo(new List<string> { "Chris Terrio" });
nfo.Directors.Should().BeEquivalentTo(new List<string> { "Zack Snyder" });
nfo.UniqueIds.Should().BeEquivalentTo(
nfo.Writers.ShouldBeEquivalentTo(new List<string> { "Chris Terrio" });
nfo.Directors.ShouldBeEquivalentTo(new List<string> { "Zack Snyder" });
nfo.UniqueIds.ShouldBeEquivalentTo(
new List<UniqueIdNfo>
{
new() { Type = "imdb", Guid = "tt12361974", Default = false },
@ -229,10 +229,10 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -229,10 +229,10 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, MovieNfo> result = await _movieNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (MovieNfo nfo in result.RightToSeq())
{
nfo.Tags.Should().BeEquivalentTo(new List<string> { "Test Tag" });
nfo.Tags.ShouldBeEquivalentTo(new List<string> { "Test Tag" });
}
}
@ -244,10 +244,10 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -244,10 +244,10 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, MovieNfo> result = await _movieNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (MovieNfo nfo in result.RightToSeq())
{
nfo.Outline.Should().Be("Test Outline");
nfo.Outline.ShouldBe("Test Outline");
}
}
}

44
ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/MusicVideoNfoReaderTests.cs

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
using Bugsnag;
using ErsatzTV.Core;
using ErsatzTV.Scanner.Core.Metadata.Nfo;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.IO;
using NSubstitute;
@ -29,7 +29,7 @@ public class MusicVideoNfoReaderTests @@ -29,7 +29,7 @@ public class MusicVideoNfoReaderTests
Either<BaseError, MusicVideoNfo> result = await _musicVideoNfoReader.Read(stream);
result.IsLeft.Should().BeTrue();
result.IsLeft.ShouldBeTrue();
}
[Test]
@ -39,7 +39,7 @@ public class MusicVideoNfoReaderTests @@ -39,7 +39,7 @@ public class MusicVideoNfoReaderTests
Either<BaseError, MusicVideoNfo> result = await _musicVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
}
[Test]
@ -52,7 +52,7 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -52,7 +52,7 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, MusicVideoNfo> result = await _musicVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
}
[Test]
@ -115,22 +115,22 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -115,22 +115,22 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, MusicVideoNfo> result = await _musicVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (MusicVideoNfo nfo in result.RightToSeq())
{
nfo.Artists.Should().BeEquivalentTo(new List<string> { "ABBA" });
nfo.Title.Should().Be("Dancing Queen");
nfo.Album.Should().Be("Arrival");
nfo.Plot.Should().Be(
nfo.Artists.ShouldBeEquivalentTo(new List<string> { "ABBA" });
nfo.Title.ShouldBe("Dancing Queen");
nfo.Album.ShouldBe("Arrival");
nfo.Plot.ShouldBe(
NormalizeLineEndingsLF(
@"Dancing Queen est un des tubes emblématiques de l'ère disco produits par le groupe suédois ABBA en 1976. Ce tube connaît un regain de popularité en 1994 lors de la sortie de Priscilla, folle du désert, et fait « presque » partie de la distribution du film Muriel.
Le groupe a également enregistré une version espagnole de ce titre, La reina del baile, pour le marché d'Amérique latine. On peut retrouver ces versions en espagnol des succès de ABBA sur l'abum Oro. Le 18 juin 1976, ABBA a interprété cette chanson lors d'un spectacle télévisé organisé en l'honneur du roi Charles XVI Gustave de Suède, qui venait de se marier. Le titre sera repris en 2011 par Glee dans la saison 2, épisode 20."));
nfo.Year.Should().Be(1976);
nfo.Aired.IsNone.Should().BeTrue();
nfo.Genres.Should().BeEquivalentTo(new List<string> { "Pop" });
nfo.Track.Should().Be(-1);
nfo.Year.ShouldBe(1976);
nfo.Aired.IsNone.ShouldBeTrue();
nfo.Genres.ShouldBeEquivalentTo(new List<string> { "Pop" });
nfo.Track.ShouldBe(-1);
}
}
@ -142,10 +142,10 @@ Le groupe a également enregistré une version espagnole de ce titre, La reina d @@ -142,10 +142,10 @@ Le groupe a également enregistré une version espagnole de ce titre, La reina d
Either<BaseError, MusicVideoNfo> result = await _musicVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (MusicVideoNfo nfo in result.RightToSeq())
{
nfo.Tags.Should().BeEquivalentTo(new List<string> { "Test Tag" });
nfo.Tags.ShouldBeEquivalentTo(new List<string> { "Test Tag" });
}
}
@ -157,13 +157,13 @@ Le groupe a également enregistré une version espagnole de ce titre, La reina d @@ -157,13 +157,13 @@ Le groupe a également enregistré une version espagnole de ce titre, La reina d
Either<BaseError, MusicVideoNfo> result = await _musicVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (MusicVideoNfo nfo in result.RightToSeq())
{
nfo.Aired.IsSome.Should().BeTrue();
nfo.Aired.IsSome.ShouldBeTrue();
foreach (DateTime aired in nfo.Aired)
{
aired.Should().Be(new DateTime(2022, 02, 03));
aired.ShouldBe(new DateTime(2022, 02, 03));
}
}
}
@ -176,10 +176,10 @@ Le groupe a également enregistré une version espagnole de ce titre, La reina d @@ -176,10 +176,10 @@ Le groupe a également enregistré une version espagnole de ce titre, La reina d
Either<BaseError, MusicVideoNfo> result = await _musicVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (MusicVideoNfo nfo in result.RightToSeq())
{
nfo.Studios.Should().BeEquivalentTo(new List<string> { "Test Studio" });
nfo.Studios.ShouldBeEquivalentTo(new List<string> { "Test Studio" });
}
}
@ -191,10 +191,10 @@ Le groupe a également enregistré une version espagnole de ce titre, La reina d @@ -191,10 +191,10 @@ Le groupe a également enregistré une version espagnole de ce titre, La reina d
Either<BaseError, MusicVideoNfo> result = await _musicVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (MusicVideoNfo nfo in result.RightToSeq())
{
nfo.Directors.Should().BeEquivalentTo(new List<string> { "Test Director" });
nfo.Directors.ShouldBeEquivalentTo(new List<string> { "Test Director" });
}
}

50
ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/OtherVideoNfoReaderTests.cs

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
using Bugsnag;
using ErsatzTV.Core;
using ErsatzTV.Scanner.Core.Metadata.Nfo;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.IO;
using NSubstitute;
@ -29,7 +29,7 @@ public class OtherVideoNfoReaderTests @@ -29,7 +29,7 @@ public class OtherVideoNfoReaderTests
Either<BaseError, OtherVideoNfo> result = await _otherVideoNfoReader.Read(stream);
result.IsLeft.Should().BeTrue();
result.IsLeft.ShouldBeTrue();
}
[Test]
@ -39,7 +39,7 @@ public class OtherVideoNfoReaderTests @@ -39,7 +39,7 @@ public class OtherVideoNfoReaderTests
Either<BaseError, OtherVideoNfo> result = await _otherVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
}
[Test]
@ -52,7 +52,7 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -52,7 +52,7 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, OtherVideoNfo> result = await _otherVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
}
[Test]
@ -170,29 +170,29 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -170,29 +170,29 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, OtherVideoNfo> result = await _otherVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (OtherVideoNfo nfo in result.RightToSeq())
{
nfo.Title.Should().Be("Zack Snyder's Justice League");
nfo.SortTitle.Should().Be("Justice League 2");
nfo.Outline.Should().BeNullOrEmpty();
nfo.Year.Should().Be(2021);
nfo.ContentRating.Should().Be("Australia:M");
nfo.Title.ShouldBe("Zack Snyder's Justice League");
nfo.SortTitle.ShouldBe("Justice League 2");
nfo.Outline.ShouldBeNullOrEmpty();
nfo.Year.ShouldBe(2021);
nfo.ContentRating.ShouldBe("Australia:M");
nfo.Premiered.IsSome.Should().BeTrue();
nfo.Premiered.IsSome.ShouldBeTrue();
foreach (DateTime premiered in nfo.Premiered)
{
premiered.Should().Be(new DateTime(2021, 03, 18));
premiered.ShouldBe(new DateTime(2021, 03, 18));
}
nfo.Plot.Should().Be(
nfo.Plot.ShouldBe(
"Determined to ensure Superman's ultimate sacrifice was not in vain, Bruce Wayne aligns forces with Diana Prince with plans to recruit a team of metahumans to protect the world from an approaching threat of catastrophic proportions.");
nfo.Tagline.Should().BeNullOrEmpty();
nfo.Genres.Should().BeEquivalentTo(new List<string> { "SuperHero" });
nfo.Tags.Should().BeEquivalentTo(new List<string> { "TV Recording" });
nfo.Studios.Should().BeEquivalentTo(new List<string> { "Warner Bros. Pictures" });
nfo.Actors.Should().BeEquivalentTo(
nfo.Tagline.ShouldBeNullOrEmpty();
nfo.Genres.ShouldBeEquivalentTo(new List<string> { "SuperHero" });
nfo.Tags.ShouldBeEquivalentTo(new List<string> { "TV Recording" });
nfo.Studios.ShouldBeEquivalentTo(new List<string> { "Warner Bros. Pictures" });
nfo.Actors.ShouldBeEquivalentTo(
new List<ActorNfo>
{
new()
@ -211,9 +211,9 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -211,9 +211,9 @@ https://www.themoviedb.org/movie/11-star-wars"));
Thumb = "https://image.tmdb.org/t/p/original/fysvehTvU6bE3JgxaOTRfvQJzJ4.jpg"
}
});
nfo.Writers.Should().BeEquivalentTo(new List<string> { "Chris Terrio" });
nfo.Directors.Should().BeEquivalentTo(new List<string> { "Zack Snyder" });
nfo.UniqueIds.Should().BeEquivalentTo(
nfo.Writers.ShouldBeEquivalentTo(new List<string> { "Chris Terrio" });
nfo.Directors.ShouldBeEquivalentTo(new List<string> { "Zack Snyder" });
nfo.UniqueIds.ShouldBeEquivalentTo(
new List<UniqueIdNfo>
{
new() { Type = "imdb", Guid = "tt12361974", Default = false },
@ -229,10 +229,10 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -229,10 +229,10 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, OtherVideoNfo> result = await _otherVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (OtherVideoNfo nfo in result.RightToSeq())
{
nfo.Tags.Should().BeEquivalentTo(new List<string> { "Test Tag" });
nfo.Tags.ShouldBeEquivalentTo(new List<string> { "Test Tag" });
}
}
@ -244,10 +244,10 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -244,10 +244,10 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, OtherVideoNfo> result = await _otherVideoNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (OtherVideoNfo nfo in result.RightToSeq())
{
nfo.Outline.Should().Be("Test Outline");
nfo.Outline.ShouldBe("Test Outline");
}
}
}

42
ErsatzTV.Scanner.Tests/Core/Metadata/Nfo/ShowNfoReaderTests.cs

@ -2,7 +2,7 @@ @@ -2,7 +2,7 @@
using Bugsnag;
using ErsatzTV.Core;
using ErsatzTV.Scanner.Core.Metadata.Nfo;
using FluentAssertions;
using Shouldly;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.IO;
using NSubstitute;
@ -29,7 +29,7 @@ public class ShowNfoReaderTests @@ -29,7 +29,7 @@ public class ShowNfoReaderTests
Either<BaseError, ShowNfo> result = await _showNfoReader.Read(stream);
result.IsLeft.Should().BeTrue();
result.IsLeft.ShouldBeTrue();
}
[Test]
@ -39,7 +39,7 @@ public class ShowNfoReaderTests @@ -39,7 +39,7 @@ public class ShowNfoReaderTests
Either<BaseError, ShowNfo> result = await _showNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
}
[Test]
@ -52,7 +52,7 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -52,7 +52,7 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, ShowNfo> result = await _showNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
}
[Test]
@ -155,18 +155,18 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -155,18 +155,18 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, ShowNfo> result = await _showNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (ShowNfo nfo in result.RightToSeq())
{
nfo.Title.Should().Be("WandaVision");
nfo.Year.Should().Be(2021);
nfo.Plot.Should().Be(
nfo.Title.ShouldBe("WandaVision");
nfo.Year.ShouldBe(2021);
nfo.Plot.ShouldBe(
"Wanda Maximoff and Vision—two super-powered beings living idealized suburban lives—begin to suspect that everything is not as it seems.");
nfo.ContentRating.Should().Be("Australia:M");
nfo.Genres.Should().BeEquivalentTo(new List<string> { "SuperHero" });
nfo.Studios.Should().BeEquivalentTo(new List<string> { "Disney+" });
nfo.Actors.Should().BeEquivalentTo(
nfo.ContentRating.ShouldBe("Australia:M");
nfo.Genres.ShouldBeEquivalentTo(new List<string> { "SuperHero" });
nfo.Studios.ShouldBeEquivalentTo(new List<string> { "Disney+" });
nfo.Actors.ShouldBeEquivalentTo(
new List<ActorNfo>
{
new()
@ -180,17 +180,17 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -180,17 +180,17 @@ https://www.themoviedb.org/movie/11-star-wars"));
Thumb = "https://image.tmdb.org/t/p/original/vcAVrAOZrpqmi37qjFdztRAv1u9.jpg"
}
});
nfo.UniqueIds.Should().BeEquivalentTo(
nfo.UniqueIds.ShouldBeEquivalentTo(
new List<UniqueIdNfo>
{
new() { Type = "imdb", Guid = "tt9140560", Default = false },
new() { Type = "tmdb", Guid = "85271", Default = true },
new() { Type = "tvdb", Guid = "362392", Default = false }
});
nfo.Premiered.IsSome.Should().BeTrue();
nfo.Premiered.IsSome.ShouldBeTrue();
foreach (DateTime premiered in nfo.Premiered)
{
premiered.Should().Be(new DateTime(2021, 1, 15));
premiered.ShouldBe(new DateTime(2021, 1, 15));
}
}
}
@ -203,10 +203,10 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -203,10 +203,10 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, ShowNfo> result = await _showNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (ShowNfo nfo in result.RightToSeq())
{
nfo.Outline.Should().Be("Test Outline");
nfo.Outline.ShouldBe("Test Outline");
}
}
@ -218,10 +218,10 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -218,10 +218,10 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, ShowNfo> result = await _showNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (ShowNfo nfo in result.RightToSeq())
{
nfo.Tagline.Should().Be("Test Tagline");
nfo.Tagline.ShouldBe("Test Tagline");
}
}
@ -232,10 +232,10 @@ https://www.themoviedb.org/movie/11-star-wars")); @@ -232,10 +232,10 @@ https://www.themoviedb.org/movie/11-star-wars"));
Either<BaseError, ShowNfo> result = await _showNfoReader.Read(stream);
result.IsRight.Should().BeTrue();
result.IsRight.ShouldBeTrue();
foreach (ShowNfo nfo in result.RightToSeq())
{
nfo.Tags.Should().BeEquivalentTo(new List<string> { "Test Tag" });
nfo.Tags.ShouldBeEquivalentTo(new List<string> { "Test Tag" });
}
}
}

2
ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj

@ -9,7 +9,6 @@ @@ -9,7 +9,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="8.2.0" />
<PackageReference Include="LanguageExt.Core" Version="4.4.9" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="NSubstitute" Version="5.3.0" />
@ -23,6 +22,7 @@ @@ -23,6 +22,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Shouldly" Version="4.3.0" />
</ItemGroup>
<ItemGroup>

Loading…
Cancel
Save