|
|
@ -24,7 +24,7 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
NamedEpisode(four, 1, 1, 4) |
|
|
|
NamedEpisode(four, 1, 1, 4) |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems); |
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false); |
|
|
|
|
|
|
|
|
|
|
|
result.Count.Should().Be(3); |
|
|
|
result.Count.Should().Be(3); |
|
|
|
ShouldHaveOneItem(result, mediaItems[0]); |
|
|
|
ShouldHaveOneItem(result, mediaItems[0]); |
|
|
@ -32,6 +32,28 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
ShouldHaveOneItem(result, mediaItems[3]); |
|
|
|
ShouldHaveOneItem(result, mediaItems[3]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
|
|
|
[TestCase("Episode 1 (1)", "Episode 2 - Part 2", "Episode 3")] |
|
|
|
|
|
|
|
[TestCase("Episode 1 Part 1", "Episode 2 (2) - More", "Episode 3 - After")] |
|
|
|
|
|
|
|
[TestCase("Episode 1 Part 1", "Episode 2 (II)", "Episode 3")] |
|
|
|
|
|
|
|
[TestCase("Episode 1 Part (V)", "Episode 2 (VI)", "Episode 3")] |
|
|
|
|
|
|
|
[TestCase("Episode 1 Part Three", "Episode 2 (IV)", "Episode 3")] |
|
|
|
|
|
|
|
public void MixedNaming_Group(string one, string two, string three) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var mediaItems = new List<MediaItem> |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
NamedEpisode(one, 1, 1, 1), |
|
|
|
|
|
|
|
NamedEpisode(two, 1, 1, 2), |
|
|
|
|
|
|
|
NamedEpisode(three, 1, 1, 3) |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result.Count.Should().Be(2); |
|
|
|
|
|
|
|
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]); |
|
|
|
|
|
|
|
ShouldHaveOneItem(result, mediaItems[2]); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
[Test] |
|
|
|
[TestCase("Episode 1 (1)", "Episode 2 (2)", "Episode 3")] |
|
|
|
[TestCase("Episode 1 (1)", "Episode 2 (2)", "Episode 3")] |
|
|
|
[TestCase("Episode 1 (1) - More", "Episode 2 (2) - Title", "Episode 3 - After")] |
|
|
|
[TestCase("Episode 1 (1) - More", "Episode 2 (2) - Title", "Episode 3 - After")] |
|
|
@ -45,7 +67,7 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
NamedEpisode(three, 1, 1, 3) |
|
|
|
NamedEpisode(three, 1, 1, 3) |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems); |
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false); |
|
|
|
|
|
|
|
|
|
|
|
result.Count.Should().Be(2); |
|
|
|
result.Count.Should().Be(2); |
|
|
|
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]); |
|
|
|
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]); |
|
|
@ -72,7 +94,7 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
NamedEpisode(five, 1, 1, 5) |
|
|
|
NamedEpisode(five, 1, 1, 5) |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems); |
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false); |
|
|
|
|
|
|
|
|
|
|
|
result.Count.Should().Be(3); |
|
|
|
result.Count.Should().Be(3); |
|
|
|
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]); |
|
|
|
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]); |
|
|
@ -94,7 +116,7 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
NamedEpisode(four, 1, 1, 4) |
|
|
|
NamedEpisode(four, 1, 1, 4) |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems); |
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false); |
|
|
|
|
|
|
|
|
|
|
|
result.Count.Should().Be(2); |
|
|
|
result.Count.Should().Be(2); |
|
|
|
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]); |
|
|
|
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[1]); |
|
|
@ -115,7 +137,7 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
NamedEpisode(four, 1, 1, 4) |
|
|
|
NamedEpisode(four, 1, 1, 4) |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems); |
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false); |
|
|
|
|
|
|
|
|
|
|
|
result.Count.Should().Be(3); |
|
|
|
result.Count.Should().Be(3); |
|
|
|
ShouldHaveOneItem(result, mediaItems[0]); |
|
|
|
ShouldHaveOneItem(result, mediaItems[0]); |
|
|
@ -123,6 +145,28 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
ShouldHaveTwoItems(result, mediaItems[2], mediaItems[3]); |
|
|
|
ShouldHaveTwoItems(result, mediaItems[2], mediaItems[3]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
|
|
|
[TestCase("Episode 1", "Episode 2 (2)", "Episode 3 (3)", "Episode 4")] |
|
|
|
|
|
|
|
[TestCase("Episode 1 - More", "Episode 2 (2) - Title", "Episode 3 (3) - After", "Episode 4 - Dash")] |
|
|
|
|
|
|
|
[TestCase("Episode 1", "Episode 2 Part 2", "Episode 3 Part 3", "Episode 4")] |
|
|
|
|
|
|
|
public void Part2And3_Without_Part1(string one, string two, string three, string four) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var mediaItems = new List<MediaItem> |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
NamedEpisode(one, 1, 1, 1), |
|
|
|
|
|
|
|
NamedEpisode(two, 1, 1, 2), |
|
|
|
|
|
|
|
NamedEpisode(three, 1, 1, 3), |
|
|
|
|
|
|
|
NamedEpisode(four, 1, 1, 4) |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result.Count.Should().Be(3); |
|
|
|
|
|
|
|
ShouldHaveOneItem(result, mediaItems[0]); |
|
|
|
|
|
|
|
ShouldHaveTwoItems(result, mediaItems[1], mediaItems[2]); |
|
|
|
|
|
|
|
ShouldHaveOneItem(result, mediaItems[3]); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
[Test] |
|
|
|
[TestCase("Episode 1 (1)", "Episode 3 (3)", "Episode 4", "Episode 5")] |
|
|
|
[TestCase("Episode 1 (1)", "Episode 3 (3)", "Episode 4", "Episode 5")] |
|
|
|
[TestCase("Episode 1 (1) - More", "Episode 3 (3) - Title", "Episode 4 - After", "Episode 5 - Dash")] |
|
|
|
[TestCase("Episode 1 (1) - More", "Episode 3 (3) - Title", "Episode 4 - After", "Episode 5 - Dash")] |
|
|
@ -137,7 +181,7 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
NamedEpisode(four, 1, 1, 5) |
|
|
|
NamedEpisode(four, 1, 1, 5) |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems); |
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false); |
|
|
|
|
|
|
|
|
|
|
|
result.Count.Should().Be(4); |
|
|
|
result.Count.Should().Be(4); |
|
|
|
ShouldHaveOneItem(result, mediaItems[0]); |
|
|
|
ShouldHaveOneItem(result, mediaItems[0]); |
|
|
@ -160,7 +204,7 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
NamedEpisode(four, 1, 1, 5) |
|
|
|
NamedEpisode(four, 1, 1, 5) |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems); |
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false); |
|
|
|
|
|
|
|
|
|
|
|
result.Count.Should().Be(3); |
|
|
|
result.Count.Should().Be(3); |
|
|
|
ShouldHaveOneItem(result, mediaItems[0]); |
|
|
|
ShouldHaveOneItem(result, mediaItems[0]); |
|
|
@ -186,7 +230,7 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
NamedEpisode(four, 1, 1, 5, new DateTime(2020, 1, 4)) |
|
|
|
NamedEpisode(four, 1, 1, 5, new DateTime(2020, 1, 4)) |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems); |
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, false); |
|
|
|
|
|
|
|
|
|
|
|
result.Count.Should().Be(3); |
|
|
|
result.Count.Should().Be(3); |
|
|
|
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[2]); |
|
|
|
ShouldHaveTwoItems(result, mediaItems[0], mediaItems[2]); |
|
|
@ -194,6 +238,31 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
ShouldHaveOneItem(result, mediaItems[3]); |
|
|
|
ShouldHaveOneItem(result, mediaItems[3]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
|
|
|
[TestCase("S1 Episode 1 (1)", "S2 Episode 3 (2)", "S1 Episode 2 (3)", "S1 Episode 5")] |
|
|
|
|
|
|
|
[TestCase( |
|
|
|
|
|
|
|
"S1 Episode 1 (1) - More", |
|
|
|
|
|
|
|
"S2 Episode 3 (2) - Title", |
|
|
|
|
|
|
|
"S1 Episode 2 (3) - After", |
|
|
|
|
|
|
|
"S1 Episode 5 - Dash")] |
|
|
|
|
|
|
|
[TestCase("S1 Episode 1 Part 1", "S2 Episode 3 Part 2", "S1 Episode 2 Part 3", "S1 Episode 5")] |
|
|
|
|
|
|
|
public void Mixed_Shows_Chronologically_Crossover(string one, string two, string three, string four) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var mediaItems = new List<MediaItem> |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
NamedEpisode(one, 1, 1, 1, new DateTime(2020, 1, 1)), |
|
|
|
|
|
|
|
NamedEpisode(two, 2, 1, 3, new DateTime(2020, 1, 2)), |
|
|
|
|
|
|
|
NamedEpisode(three, 1, 1, 2, new DateTime(2020, 1, 3)), |
|
|
|
|
|
|
|
NamedEpisode(four, 1, 1, 5, new DateTime(2020, 1, 4)) |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<GroupedMediaItem> result = MultiPartEpisodeGrouper.GroupMediaItems(mediaItems, true); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
result.Count.Should().Be(2); |
|
|
|
|
|
|
|
ShouldHaveMultipleItems(result, mediaItems[0], new List<MediaItem> { mediaItems[1], mediaItems[2] }); |
|
|
|
|
|
|
|
ShouldHaveOneItem(result, mediaItems[3]); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static Episode NamedEpisode( |
|
|
|
private static Episode NamedEpisode( |
|
|
|
string title, |
|
|
|
string title, |
|
|
|
int showId, |
|
|
|
int showId, |
|
|
@ -225,5 +294,14 @@ namespace ErsatzTV.Core.Tests.Scheduling |
|
|
|
MediaItem additional) => |
|
|
|
MediaItem additional) => |
|
|
|
result.Filter(g => g.First == first && Optional(g.Additional).Flatten().HeadOrNone() == Some(additional)) |
|
|
|
result.Filter(g => g.First == first && Optional(g.Additional).Flatten().HeadOrNone() == Some(additional)) |
|
|
|
.Should().HaveCount(1); |
|
|
|
.Should().HaveCount(1); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static void ShouldHaveMultipleItems( |
|
|
|
|
|
|
|
IEnumerable<GroupedMediaItem> result, |
|
|
|
|
|
|
|
MediaItem first, |
|
|
|
|
|
|
|
List<MediaItem> additional) => |
|
|
|
|
|
|
|
result.Filter( |
|
|
|
|
|
|
|
g => g.First == first && g.Additional != null && g.Additional.Count == additional.Count && |
|
|
|
|
|
|
|
additional.ForAll(g.Additional.Contains)) |
|
|
|
|
|
|
|
.Should().HaveCount(1); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|