@ -3,15 +3,20 @@ using ErsatzTV.Core.Domain.Filler;
@@ -3,15 +3,20 @@ using ErsatzTV.Core.Domain.Filler;
using ErsatzTV.Core.Interfaces.Scheduling ;
using ErsatzTV.Core.Scheduling ;
using FluentAssertions ;
using Microsoft.Extensions.Logging ;
using Moq ;
using NUnit.Framework ;
namespace ErsatzTV.Core.Tests.Scheduling ;
[TestFixture]
public class PlayoutModeSchedulerBaseTests
public class PlayoutModeSchedulerBaseTests : SchedulerTestBase
{
[TestFixture]
public class CalculateEndTimeWithFiller
{
[Test]
public void CalculateEndTimeWithFiller_Should_Not_Touch_Enumerator ( )
public void Should_Not_Touch_Enumerator ( )
{
var collection = new Collection
{
@ -58,7 +63,7 @@ public class PlayoutModeSchedulerBaseTests
@@ -58,7 +63,7 @@ public class PlayoutModeSchedulerBaseTests
}
[Test]
public void CalculateEndTimeWithFiller_ Should_Pad_To_15_Minutes_15( )
public void Should_Pad_To_15_Minutes_15 ( )
{
DateTimeOffset result = PlayoutModeSchedulerBase < ProgramScheduleItem >
. CalculateEndTimeWithFiller (
@ -80,7 +85,7 @@ public class PlayoutModeSchedulerBaseTests
@@ -80,7 +85,7 @@ public class PlayoutModeSchedulerBaseTests
}
[Test]
public void CalculateEndTimeWithFiller_ Should_Pad_To_15_Minutes_30( )
public void Should_Pad_To_15_Minutes_30 ( )
{
DateTimeOffset result = PlayoutModeSchedulerBase < ProgramScheduleItem >
. CalculateEndTimeWithFiller (
@ -102,7 +107,7 @@ public class PlayoutModeSchedulerBaseTests
@@ -102,7 +107,7 @@ public class PlayoutModeSchedulerBaseTests
}
[Test]
public void CalculateEndTimeWithFiller_ Should_Pad_To_15_Minutes_45( )
public void Should_Pad_To_15_Minutes_45 ( )
{
DateTimeOffset result = PlayoutModeSchedulerBase < ProgramScheduleItem >
. CalculateEndTimeWithFiller (
@ -124,7 +129,7 @@ public class PlayoutModeSchedulerBaseTests
@@ -124,7 +129,7 @@ public class PlayoutModeSchedulerBaseTests
}
[Test]
public void CalculateEndTimeWithFiller_ Should_Pad_To_15_Minutes_00( )
public void Should_Pad_To_15_Minutes_00 ( )
{
DateTimeOffset result = PlayoutModeSchedulerBase < ProgramScheduleItem >
. CalculateEndTimeWithFiller (
@ -146,7 +151,7 @@ public class PlayoutModeSchedulerBaseTests
@@ -146,7 +151,7 @@ public class PlayoutModeSchedulerBaseTests
}
[Test]
public void CalculateEndTimeWithFiller_ Should_Pad_To_30_Minutes_30( )
public void Should_Pad_To_30_Minutes_30 ( )
{
DateTimeOffset result = PlayoutModeSchedulerBase < ProgramScheduleItem >
. CalculateEndTimeWithFiller (
@ -168,7 +173,7 @@ public class PlayoutModeSchedulerBaseTests
@@ -168,7 +173,7 @@ public class PlayoutModeSchedulerBaseTests
}
[Test]
public void CalculateEndTimeWithFiller_ Should_Pad_To_30_Minutes_00( )
public void Should_Pad_To_30_Minutes_00 ( )
{
DateTimeOffset result = PlayoutModeSchedulerBase < ProgramScheduleItem >
. CalculateEndTimeWithFiller (
@ -188,6 +193,98 @@ public class PlayoutModeSchedulerBaseTests
@@ -188,6 +193,98 @@ public class PlayoutModeSchedulerBaseTests
result . Should ( ) . Be ( new DateTimeOffset ( 2 0 2 0 , 2 , 1 , 1 3 , 0 , 0 , TimeSpan . FromHours ( - 5 ) ) ) ;
}
}
[TestFixture]
public class AddFiller
{
[Test]
public void Should_Not_Crash_Mid_Roll_Zero_Chapters ( )
{
Collection collectionOne = TwoItemCollection ( 1 , 2 , TimeSpan . FromHours ( 1 ) ) ;
var scheduleItem = new ProgramScheduleItemOne
{
MidRollFiller = new FillerPreset
{
FillerKind = FillerKind . MidRoll ,
FillerMode = FillerMode . Pad ,
PadToNearestMinute = 1 5
}
} ;
var scheduleItemsEnumerator = new OrderedScheduleItemsEnumerator (
new List < ProgramScheduleItem > { scheduleItem } ,
new CollectionEnumeratorState ( ) ) ;
var enumerator = new ChronologicalMediaCollectionEnumerator (
collectionOne . MediaItems ,
new CollectionEnumeratorState ( ) ) ;
PlayoutBuilderState startState = StartState ( scheduleItemsEnumerator ) ;
List < PlayoutItem > playoutItems = PlayoutModeSchedulerBase < ProgramScheduleItem >
. AddFiller (
startState ,
CollectionEnumerators ( scheduleItem , enumerator ) ,
scheduleItem ,
new PlayoutItem ( ) ,
new List < MediaChapter > ( ) ) ;
playoutItems . Count . Should ( ) . Be ( 1 ) ;
}
[Test]
public void Should_Not_Crash_Mid_Roll_One_Chapter ( )
{
Collection collectionOne = TwoItemCollection ( 1 , 2 , TimeSpan . FromHours ( 1 ) ) ;
var scheduleItem = new ProgramScheduleItemOne
{
Id = 1 ,
Index = 1 ,
Collection = collectionOne ,
CollectionId = collectionOne . Id ,
StartTime = null ,
PlaybackOrder = PlaybackOrder . Chronological ,
TailFiller = null ,
FallbackFiller = null ,
MidRollFiller = new FillerPreset
{
FillerKind = FillerKind . MidRoll ,
FillerMode = FillerMode . Pad ,
PadToNearestMinute = 1 5
}
} ;
var scheduleItemsEnumerator = new OrderedScheduleItemsEnumerator (
new List < ProgramScheduleItem > { scheduleItem } ,
new CollectionEnumeratorState ( ) ) ;
var enumerator = new ChronologicalMediaCollectionEnumerator (
collectionOne . MediaItems ,
new CollectionEnumeratorState ( ) ) ;
PlayoutBuilderState startState = StartState ( scheduleItemsEnumerator ) ;
Dictionary < CollectionKey , IMediaCollectionEnumerator > enumerators = CollectionEnumerators (
scheduleItem ,
enumerator ) ;
// too lazy to make another enumerator for the filler that we don't want
enumerators . Add ( CollectionKey . ForFillerPreset ( scheduleItem . MidRollFiller ) , enumerator ) ;
List < PlayoutItem > playoutItems = PlayoutModeSchedulerBase < ProgramScheduleItem >
. AddFiller (
startState ,
enumerators ,
scheduleItem ,
new PlayoutItem ( ) ,
new List < MediaChapter > { new ( ) } ) ;
playoutItems . Count . Should ( ) . Be ( 1 ) ;
}
}
private static Movie TestMovie ( int id , TimeSpan duration , DateTime aired ) = >
new ( )