mirror of https://github.com/ErsatzTV/ErsatzTV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.7 KiB
128 lines
4.7 KiB
using ErsatzTV.Core.Domain; |
|
using ErsatzTV.Core.Domain.Filler; |
|
using ErsatzTV.Core.Interfaces.Scheduling; |
|
using ErsatzTV.Core.Scheduling; |
|
|
|
namespace ErsatzTV.Core.Tests.Scheduling; |
|
|
|
public abstract class SchedulerTestBase |
|
{ |
|
protected virtual ProgramScheduleItem NextScheduleItem => new ProgramScheduleItemOne |
|
{ |
|
StartTime = null |
|
}; |
|
|
|
protected static PlayoutBuilderState StartState(IScheduleItemsEnumerator scheduleItemsEnumerator) => new( |
|
scheduleItemsEnumerator, |
|
None, |
|
None, |
|
false, |
|
false, |
|
1, |
|
new DateTimeOffset(new DateTime(2020, 10, 18, 0, 0, 0, DateTimeKind.Local))); |
|
|
|
protected static DateTimeOffset HardStop(IScheduleItemsEnumerator scheduleItemsEnumerator) => |
|
StartState(scheduleItemsEnumerator).CurrentTime.AddHours(6); |
|
|
|
protected static Dictionary<CollectionKey, IMediaCollectionEnumerator> CollectionEnumerators( |
|
ProgramScheduleItem scheduleItem, |
|
IMediaCollectionEnumerator enumerator) => |
|
new() |
|
{ |
|
{ CollectionKey.ForScheduleItem(scheduleItem), enumerator } |
|
}; |
|
|
|
protected static Dictionary<CollectionKey, IMediaCollectionEnumerator> CollectionEnumerators( |
|
ProgramScheduleItem scheduleItem, |
|
IMediaCollectionEnumerator enumerator1, |
|
FillerPreset fillerPreset, |
|
IMediaCollectionEnumerator enumerator2, |
|
FillerPreset fillerPreset2, |
|
IMediaCollectionEnumerator enumerator3) => |
|
new() |
|
{ |
|
{ CollectionKey.ForScheduleItem(scheduleItem), enumerator1 }, |
|
{ CollectionKey.ForFillerPreset(fillerPreset), enumerator2 }, |
|
{ CollectionKey.ForFillerPreset(fillerPreset2), enumerator3 } |
|
}; |
|
|
|
protected static Dictionary<CollectionKey, IMediaCollectionEnumerator> CollectionEnumerators( |
|
ProgramScheduleItem scheduleItem, |
|
IMediaCollectionEnumerator enumerator1, |
|
FillerPreset fillerPreset, |
|
IMediaCollectionEnumerator enumerator2, |
|
FillerPreset fillerPreset2, |
|
IMediaCollectionEnumerator enumerator3, |
|
FillerPreset fillerPreset3, |
|
IMediaCollectionEnumerator enumerator4) => |
|
new() |
|
{ |
|
{ CollectionKey.ForScheduleItem(scheduleItem), enumerator1 }, |
|
{ CollectionKey.ForFillerPreset(fillerPreset), enumerator2 }, |
|
{ CollectionKey.ForFillerPreset(fillerPreset2), enumerator3 }, |
|
{ CollectionKey.ForFillerPreset(fillerPreset3), enumerator4 } |
|
}; |
|
|
|
private static Movie TestMovie(int id, TimeSpan duration, DateTime aired, int chapterCount = 0) |
|
{ |
|
var result = new Movie |
|
{ |
|
Id = id, |
|
MovieMetadata = new List<MovieMetadata> { new() { ReleaseDate = aired } }, |
|
MediaVersions = new List<MediaVersion> |
|
{ |
|
new() { Duration = duration, Chapters = new List<MediaChapter>() } |
|
} |
|
}; |
|
|
|
for (var i = 0; i < chapterCount; i++) |
|
{ |
|
result.MediaVersions.Head().Chapters.Add( |
|
new MediaChapter |
|
{ |
|
StartTime = TimeSpan.FromMilliseconds(i * duration.TotalMilliseconds / chapterCount), |
|
EndTime = TimeSpan.FromMilliseconds(i + 1 * duration.TotalMilliseconds / chapterCount) |
|
}); |
|
} |
|
|
|
return result; |
|
} |
|
|
|
protected static Collection TwoItemCollection(int id1, int id2, TimeSpan duration, int chapterCount = 0) => new() |
|
{ |
|
Id = id1, |
|
Name = $"Collection of Items {id1}", |
|
MediaItems = new List<MediaItem> |
|
{ |
|
TestMovie(id1, duration, new DateTime(2020, 1, 1), chapterCount), |
|
TestMovie(id2, duration, new DateTime(2020, 1, 2), chapterCount) |
|
} |
|
}; |
|
|
|
protected static Collection CollectionOf(IDictionary<int, TimeSpan> idsAndDurations, int chapterCount = 0) |
|
{ |
|
var mediaItems = new List<MediaItem>(); |
|
foreach ((int id, TimeSpan duration) in idsAndDurations) |
|
{ |
|
mediaItems.Add(TestMovie(id, duration, new DateTime(2020, 1, id), chapterCount)); |
|
} |
|
|
|
return new Collection |
|
{ |
|
Id = idsAndDurations.Head().Key, |
|
Name = $"Collection of Items {idsAndDurations.Head().Key}", |
|
MediaItems = mediaItems |
|
}; |
|
} |
|
|
|
protected static Dictionary<CollectionKey, IMediaCollectionEnumerator> CollectionEnumerators( |
|
ProgramScheduleItem scheduleItem, |
|
IMediaCollectionEnumerator enumerator1, |
|
FillerPreset fillerPreset, |
|
IMediaCollectionEnumerator enumerator2) => |
|
new() |
|
{ |
|
{ CollectionKey.ForScheduleItem(scheduleItem), enumerator1 }, |
|
{ CollectionKey.ForFillerPreset(fillerPreset), enumerator2 } |
|
}; |
|
}
|
|
|