Browse Source

add multi-part episode tests (#189)

pull/190/head
Jason Dove 5 years ago committed by GitHub
parent
commit
23bab01f2d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 100
      ErsatzTV.Core.Tests/Scheduling/MultiPartEpisodeGrouperTests.cs
  2. 12
      ErsatzTV.Core/Scheduling/MultiPartEpisodeGrouper.cs

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

@ -0,0 +1,100 @@
using System.Collections.Generic;
using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Scheduling;
using FluentAssertions;
using NUnit.Framework;
namespace ErsatzTV.Core.Tests.Scheduling
{
public class MultiPartEpisodeGrouperTests
{
[Test]
public void NotGrouped_Grouped_NotGrouped()
{
var mediaItems = new List<MediaItem>
{
NamedEpisode("Episode 1"),
NamedEpisode("Episode 2 (1)"),
NamedEpisode("Episode 3 (2)"),
NamedEpisode("Episode 4"),
};
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems);
result.Count.Should().Be(3);
result[0].First.Should().Be(mediaItems[0]);
result[1].First.Should().Be(mediaItems[1]);
result[1].Additional[0].Should().Be(mediaItems[2]);
result[2].First.Should().Be(mediaItems[3]);
}
[Test]
public void Grouped_NotGrouped()
{
var mediaItems = new List<MediaItem>
{
NamedEpisode("Episode 1 (1)"),
NamedEpisode("Episode 2 (2)"),
NamedEpisode("Episode 3"),
};
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems);
result.Count.Should().Be(2);
result[0].First.Should().Be(mediaItems[0]);
result[0].Additional[0].Should().Be(mediaItems[1]);
result[1].First.Should().Be(mediaItems[2]);
}
[Test]
public void Grouped_NotGrouped_Grouped()
{
var mediaItems = new List<MediaItem>
{
NamedEpisode("Episode 1 (1)"),
NamedEpisode("Episode 2 (2)"),
NamedEpisode("Episode 3"),
NamedEpisode("Episode 4 (1)"),
NamedEpisode("Episode 5 (2)"),
};
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems);
result.Count.Should().Be(3);
result[0].First.Should().Be(mediaItems[0]);
result[0].Additional[0].Should().Be(mediaItems[1]);
result[1].First.Should().Be(mediaItems[2]);
result[2].First.Should().Be(mediaItems[3]);
result[2].Additional[0].Should().Be(mediaItems[4]);
}
[Test]
public void Grouped_Grouped()
{
var mediaItems = new List<MediaItem>
{
NamedEpisode("Episode 1 (1)"),
NamedEpisode("Episode 2 (2)"),
NamedEpisode("Episode 3 (1)"),
NamedEpisode("Episode 4 (2)"),
};
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems);
result.Count.Should().Be(2);
result[0].First.Should().Be(mediaItems[0]);
result[0].Additional[0].Should().Be(mediaItems[1]);
result[1].First.Should().Be(mediaItems[2]);
result[1].Additional[0].Should().Be(mediaItems[3]);
}
private static Episode NamedEpisode(string title) =>
new()
{
EpisodeMetadata = new List<EpisodeMetadata>
{
new() { Title = title }
}
};
}
}

12
ErsatzTV.Core/Scheduling/MultiPartEpisodeGrouper.cs

@ -24,6 +24,13 @@ namespace ErsatzTV.Core.Scheduling
if (match.Success) if (match.Success)
{ {
var number = int.Parse(match.Groups[1].Value); var number = int.Parse(match.Groups[1].Value);
if (number <= lastNumber && group != null)
{
groups.Add(group);
group = null;
lastNumber = 0;
}
if (number == lastNumber + 1) if (number == lastNumber + 1)
{ {
if (lastNumber == 0) if (lastNumber == 0)
@ -46,6 +53,11 @@ namespace ErsatzTV.Core.Scheduling
lastNumber = number; lastNumber = number;
} }
else
{
// this should never happen
throw new InvalidOperationException($"Bad shuffle state; unexpected number {number} after {lastNumber}");
}
} }
else else
{ {

Loading…
Cancel
Save