@ -31,19 +31,25 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -31,19 +31,25 @@ namespace ErsatzTV.Core.Tests.Scheduling
PlaybackOrder = PlaybackOrder . Chronological
} ;
var scheduleItemsEnumerator = new OrderedScheduleItemsEnumerator (
new List < ProgramScheduleItem > { scheduleItem } ,
new CollectionEnumeratorState ( ) ) ;
var enumerator = new ChronologicalMediaCollectionEnumerator (
collectionOne . MediaItems ,
new CollectionEnumeratorState ( ) ) ;
PlayoutBuilderState startState = StartState ( scheduleItemsEnumerator ) ;
var scheduler = new PlayoutModeSchedulerDuration ( new Mock < ILogger > ( ) . Object ) ;
( PlayoutBuilderState playoutBuilderState , List < PlayoutItem > playoutItems ) = scheduler . Schedule (
S tartState,
s tartState,
CollectionEnumerators ( scheduleItem , enumerator ) ,
scheduleItem ,
NextScheduleItem ,
HardStop ) ;
HardStop ( scheduleItemsEnumerator ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( S tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( s tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutItems . Last ( ) . FinishOffset . Should ( ) . Be ( playoutBuilderState . CurrentTime ) ;
playoutBuilderState . NextGuideGroup . Should ( ) . Be ( 4 ) ;
@ -51,26 +57,26 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -51,26 +57,26 @@ namespace ErsatzTV.Core.Tests.Scheduling
playoutBuilderState . InFlood . Should ( ) . BeFalse ( ) ;
playoutBuilderState . MultipleRemaining . IsNone . Should ( ) . BeTrue ( ) ;
playoutBuilderState . InDurationFiller . Should ( ) . BeFalse ( ) ;
playoutBuilderState . ScheduleItemIndex . Should ( ) . Be ( 1 ) ;
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 ( S tartState. CurrentTime ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( s tartState. 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 ( S tartState. CurrentTime . AddHours ( 1 ) ) ;
playoutItems [ 1 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . AddHours ( 1 ) ) ;
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 ( S tartState. CurrentTime . AddHours ( 2 ) ) ;
playoutItems [ 2 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . AddHours ( 2 ) ) ;
playoutItems [ 2 ] . GuideGroup . Should ( ) . Be ( 3 ) ;
playoutItems [ 2 ] . FillerKind . Should ( ) . Be ( FillerKind . None ) ;
playoutItems [ 2 ] . GuideFinish . HasValue . Should ( ) . BeTrue ( ) ;
@ -93,20 +99,26 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -93,20 +99,26 @@ namespace ErsatzTV.Core.Tests.Scheduling
PlaybackOrder = PlaybackOrder . Chronological ,
CustomTitle = "Custom Title"
} ;
var scheduleItemsEnumerator = new OrderedScheduleItemsEnumerator (
new List < ProgramScheduleItem > { scheduleItem } ,
new CollectionEnumeratorState ( ) ) ;
var enumerator = new ChronologicalMediaCollectionEnumerator (
collectionOne . MediaItems ,
new CollectionEnumeratorState ( ) ) ;
PlayoutBuilderState startState = StartState ( scheduleItemsEnumerator ) ;
var scheduler = new PlayoutModeSchedulerDuration ( new Mock < ILogger > ( ) . Object ) ;
( PlayoutBuilderState playoutBuilderState , List < PlayoutItem > playoutItems ) = scheduler . Schedule (
S tartState,
s tartState,
CollectionEnumerators ( scheduleItem , enumerator ) ,
scheduleItem ,
NextScheduleItem ,
HardStop ) ;
HardStop ( scheduleItemsEnumerator ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( S tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( s tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutItems . Last ( ) . FinishOffset . Should ( ) . Be ( playoutBuilderState . CurrentTime ) ;
playoutBuilderState . NextGuideGroup . Should ( ) . Be ( 2 ) ;
@ -114,28 +126,28 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -114,28 +126,28 @@ namespace ErsatzTV.Core.Tests.Scheduling
playoutBuilderState . InFlood . Should ( ) . BeFalse ( ) ;
playoutBuilderState . MultipleRemaining . IsNone . Should ( ) . BeTrue ( ) ;
playoutBuilderState . InDurationFiller . Should ( ) . BeFalse ( ) ;
playoutBuilderState . ScheduleItemIndex . Should ( ) . Be ( 1 ) ;
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 ( S tartState. CurrentTime ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( s tartState. 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 ( S tartState. CurrentTime . AddHours ( 1 ) ) ;
playoutItems [ 1 ] . StartOffset . Should ( ) . Be ( s tartState. 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 ( S tartState. CurrentTime . AddHours ( 2 ) ) ;
playoutItems [ 2 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . AddHours ( 2 ) ) ;
playoutItems [ 2 ] . GuideGroup . Should ( ) . Be ( 1 ) ;
playoutItems [ 2 ] . FillerKind . Should ( ) . Be ( FillerKind . None ) ;
playoutItems [ 2 ] . GuideFinish . HasValue . Should ( ) . BeTrue ( ) ;
@ -158,20 +170,26 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -158,20 +170,26 @@ namespace ErsatzTV.Core.Tests.Scheduling
TailMode = TailMode . None ,
PlaybackOrder = PlaybackOrder . Chronological
} ;
var scheduleItemsEnumerator = new OrderedScheduleItemsEnumerator (
new List < ProgramScheduleItem > { scheduleItem } ,
new CollectionEnumeratorState ( ) ) ;
var enumerator = new ChronologicalMediaCollectionEnumerator (
collectionOne . MediaItems ,
new CollectionEnumeratorState ( ) ) ;
PlayoutBuilderState startState = StartState ( scheduleItemsEnumerator ) ;
var scheduler = new PlayoutModeSchedulerDuration ( new Mock < ILogger > ( ) . Object ) ;
( PlayoutBuilderState playoutBuilderState , List < PlayoutItem > playoutItems ) = scheduler . Schedule (
S tartState,
s tartState,
CollectionEnumerators ( scheduleItem , enumerator ) ,
scheduleItem ,
NextScheduleItem ,
HardStop ) ;
HardStop ( scheduleItemsEnumerator ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 0 ) ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 0 ) ) ) ;
playoutItems . Last ( ) . FinishOffset . Should ( ) . Be ( playoutBuilderState . CurrentTime ) ;
playoutBuilderState . NextGuideGroup . Should ( ) . Be ( 4 ) ;
@ -179,26 +197,26 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -179,26 +197,26 @@ namespace ErsatzTV.Core.Tests.Scheduling
playoutBuilderState . InFlood . Should ( ) . BeFalse ( ) ;
playoutBuilderState . MultipleRemaining . IsNone . Should ( ) . BeTrue ( ) ;
playoutBuilderState . InDurationFiller . Should ( ) . BeFalse ( ) ;
playoutBuilderState . ScheduleItemIndex . Should ( ) . Be ( 1 ) ;
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 ( S tartState. CurrentTime ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( s tartState. 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 ( S tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
playoutItems [ 1 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 0 ) ) ) ;
playoutItems [ 2 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 0 ) ) ) ;
playoutItems [ 2 ] . GuideGroup . Should ( ) . Be ( 3 ) ;
playoutItems [ 2 ] . FillerKind . Should ( ) . Be ( FillerKind . None ) ;
playoutItems [ 2 ] . GuideFinish . HasValue . Should ( ) . BeTrue ( ) ;
@ -220,48 +238,54 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -220,48 +238,54 @@ namespace ErsatzTV.Core.Tests.Scheduling
TailMode = TailMode . Offline ,
PlaybackOrder = PlaybackOrder . Chronological
} ;
var scheduleItemsEnumerator = new OrderedScheduleItemsEnumerator (
new List < ProgramScheduleItem > { scheduleItem } ,
new CollectionEnumeratorState ( ) ) ;
var enumerator = new ChronologicalMediaCollectionEnumerator (
collectionOne . MediaItems ,
new CollectionEnumeratorState ( ) ) ;
PlayoutBuilderState startState = StartState ( scheduleItemsEnumerator ) ;
var scheduler = new PlayoutModeSchedulerDuration ( new Mock < ILogger > ( ) . Object ) ;
( PlayoutBuilderState playoutBuilderState , List < PlayoutItem > playoutItems ) = scheduler . Schedule (
S tartState,
s tartState,
CollectionEnumerators ( scheduleItem , enumerator ) ,
scheduleItem ,
NextScheduleItem ,
HardStop ) ;
HardStop ( scheduleItemsEnumerator ) ) ;
// duration block should end after exact duration, with gap
playoutBuilderState . CurrentTime . Should ( ) . Be ( S tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutItems . Last ( ) . FinishOffset . Should ( ) . Be ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 0 ) ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( s tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutItems . Last ( ) . FinishOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 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 . ScheduleItemIndex . Should ( ) . Be ( 1 ) ;
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 ( S tartState. CurrentTime ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( s tartState. 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 ( S tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
playoutItems [ 1 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 0 ) ) ) ;
playoutItems [ 2 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 0 ) ) ) ;
playoutItems [ 2 ] . GuideGroup . Should ( ) . Be ( 3 ) ;
playoutItems [ 2 ] . FillerKind . Should ( ) . Be ( FillerKind . None ) ;
playoutItems [ 2 ] . GuideFinish . HasValue . Should ( ) . BeTrue ( ) ;
@ -290,6 +314,10 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -290,6 +314,10 @@ namespace ErsatzTV.Core.Tests.Scheduling
CollectionId = collectionTwo . Id
}
} ;
var scheduleItemsEnumerator = new OrderedScheduleItemsEnumerator (
new List < ProgramScheduleItem > { scheduleItem } ,
new CollectionEnumeratorState ( ) ) ;
var enumerator1 = new ChronologicalMediaCollectionEnumerator (
collectionOne . MediaItems ,
@ -299,15 +327,17 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -299,15 +327,17 @@ namespace ErsatzTV.Core.Tests.Scheduling
collectionTwo . MediaItems ,
new CollectionEnumeratorState ( ) ) ;
PlayoutBuilderState startState = StartState ( scheduleItemsEnumerator ) ;
var scheduler = new PlayoutModeSchedulerDuration ( new Mock < ILogger > ( ) . Object ) ;
( PlayoutBuilderState playoutBuilderState , List < PlayoutItem > playoutItems ) = scheduler . Schedule (
S tartState,
s tartState,
CollectionEnumerators ( scheduleItem , enumerator1 , scheduleItem . FallbackFiller , enumerator2 ) ,
scheduleItem ,
NextScheduleItem ,
HardStop ) ;
HardStop ( scheduleItemsEnumerator ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( S tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( s tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutItems . Last ( ) . FinishOffset . Should ( ) . Be ( playoutBuilderState . CurrentTime ) ;
playoutBuilderState . NextGuideGroup . Should ( ) . Be ( 4 ) ;
@ -315,7 +345,7 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -315,7 +345,7 @@ namespace ErsatzTV.Core.Tests.Scheduling
playoutBuilderState . InFlood . Should ( ) . BeFalse ( ) ;
playoutBuilderState . MultipleRemaining . IsNone . Should ( ) . BeTrue ( ) ;
playoutBuilderState . InDurationFiller . Should ( ) . BeFalse ( ) ;
playoutBuilderState . ScheduleItemIndex . Should ( ) . Be ( 1 ) ;
playoutBuilderState . ScheduleItemsEnumerator . State . Index . Should ( ) . Be ( 0 ) ;
enumerator1 . State . Index . Should ( ) . Be ( 1 ) ;
enumerator2 . State . Index . Should ( ) . Be ( 1 ) ;
@ -323,25 +353,25 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -323,25 +353,25 @@ namespace ErsatzTV.Core.Tests.Scheduling
playoutItems . Count . Should ( ) . Be ( 4 ) ;
playoutItems [ 0 ] . MediaItemId . Should ( ) . Be ( 1 ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( S tartState. CurrentTime ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( s tartState. 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 ( S tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
playoutItems [ 1 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 0 ) ) ) ;
playoutItems [ 2 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 0 ) ) ) ;
playoutItems [ 3 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 0 ) ) ) ;
playoutItems [ 3 ] . GuideGroup . Should ( ) . Be ( 3 ) ;
playoutItems [ 3 ] . FillerKind . Should ( ) . Be ( FillerKind . Fallback ) ;
playoutItems [ 3 ] . GuideFinish . HasValue . Should ( ) . BeFalse ( ) ;
@ -370,6 +400,10 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -370,6 +400,10 @@ namespace ErsatzTV.Core.Tests.Scheduling
CollectionId = collectionTwo . Id
}
} ;
var scheduleItemsEnumerator = new OrderedScheduleItemsEnumerator (
new List < ProgramScheduleItem > { scheduleItem } ,
new CollectionEnumeratorState ( ) ) ;
var enumerator1 = new ChronologicalMediaCollectionEnumerator (
collectionOne . MediaItems ,
@ -379,15 +413,17 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -379,15 +413,17 @@ namespace ErsatzTV.Core.Tests.Scheduling
collectionTwo . MediaItems ,
new CollectionEnumeratorState ( ) ) ;
PlayoutBuilderState startState = StartState ( scheduleItemsEnumerator ) ;
var scheduler = new PlayoutModeSchedulerDuration ( new Mock < ILogger > ( ) . Object ) ;
( PlayoutBuilderState playoutBuilderState , List < PlayoutItem > playoutItems ) = scheduler . Schedule (
S tartState,
s tartState,
CollectionEnumerators ( scheduleItem , enumerator1 , scheduleItem . TailFiller , enumerator2 ) ,
scheduleItem ,
NextScheduleItem ,
HardStop ) ;
HardStop ( scheduleItemsEnumerator ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( S tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( s tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutItems . Last ( ) . FinishOffset . Should ( ) . Be ( playoutBuilderState . CurrentTime ) ;
playoutBuilderState . NextGuideGroup . Should ( ) . Be ( 4 ) ;
@ -395,7 +431,7 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -395,7 +431,7 @@ namespace ErsatzTV.Core.Tests.Scheduling
playoutBuilderState . InFlood . Should ( ) . BeFalse ( ) ;
playoutBuilderState . MultipleRemaining . IsNone . Should ( ) . BeTrue ( ) ;
playoutBuilderState . InDurationFiller . Should ( ) . BeFalse ( ) ;
playoutBuilderState . ScheduleItemIndex . Should ( ) . Be ( 1 ) ;
playoutBuilderState . ScheduleItemsEnumerator . State . Index . Should ( ) . Be ( 0 ) ;
enumerator1 . State . Index . Should ( ) . Be ( 1 ) ;
enumerator2 . State . Index . Should ( ) . Be ( 1 ) ;
@ -403,37 +439,37 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -403,37 +439,37 @@ namespace ErsatzTV.Core.Tests.Scheduling
playoutItems . Count . Should ( ) . Be ( 6 ) ;
playoutItems [ 0 ] . MediaItemId . Should ( ) . Be ( 1 ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( S tartState. CurrentTime ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( s tartState. 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 ( S tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
playoutItems [ 1 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 0 ) ) ) ;
playoutItems [ 2 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 0 ) ) ) ;
playoutItems [ 3 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 0 , 0 ) ) ) ;
playoutItems [ 4 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 0 , 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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 5 , 0 ) ) ) ;
playoutItems [ 5 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 5 , 0 ) ) ) ;
playoutItems [ 5 ] . GuideGroup . Should ( ) . Be ( 3 ) ;
playoutItems [ 5 ] . FillerKind . Should ( ) . Be ( FillerKind . Tail ) ;
playoutItems [ 3 ] . GuideFinish . HasValue . Should ( ) . BeFalse ( ) ;
@ -462,6 +498,10 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -462,6 +498,10 @@ namespace ErsatzTV.Core.Tests.Scheduling
CollectionId = collectionTwo . Id
}
} ;
var scheduleItemsEnumerator = new OrderedScheduleItemsEnumerator (
new List < ProgramScheduleItem > { scheduleItem } ,
new CollectionEnumeratorState ( ) ) ;
var enumerator1 = new ChronologicalMediaCollectionEnumerator (
collectionOne . MediaItems ,
@ -471,23 +511,25 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -471,23 +511,25 @@ namespace ErsatzTV.Core.Tests.Scheduling
collectionTwo . MediaItems ,
new CollectionEnumeratorState ( ) ) ;
PlayoutBuilderState startState = StartState ( scheduleItemsEnumerator ) ;
var scheduler = new PlayoutModeSchedulerDuration ( new Mock < ILogger > ( ) . Object ) ;
( PlayoutBuilderState playoutBuilderState , List < PlayoutItem > playoutItems ) = scheduler . Schedule (
S tartState,
s tartState,
CollectionEnumerators ( scheduleItem , enumerator1 , scheduleItem . TailFiller , enumerator2 ) ,
scheduleItem ,
NextScheduleItem ,
HardStop ) ;
HardStop ( scheduleItemsEnumerator ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( S tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutItems . Last ( ) . FinishOffset . Should ( ) . Be ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 7 , 0 ) ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( s tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutItems . Last ( ) . FinishOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 7 , 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 . ScheduleItemIndex . Should ( ) . Be ( 1 ) ;
playoutBuilderState . ScheduleItemsEnumerator . State . Index . Should ( ) . Be ( 0 ) ;
enumerator1 . State . Index . Should ( ) . Be ( 1 ) ;
enumerator2 . State . Index . Should ( ) . Be ( 1 ) ;
@ -495,37 +537,37 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -495,37 +537,37 @@ namespace ErsatzTV.Core.Tests.Scheduling
playoutItems . Count . Should ( ) . Be ( 6 ) ;
playoutItems [ 0 ] . MediaItemId . Should ( ) . Be ( 1 ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( S tartState. CurrentTime ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( s tartState. 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 ( S tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
playoutItems [ 1 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 0 ) ) ) ;
playoutItems [ 2 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 0 ) ) ) ;
playoutItems [ 3 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 9 , 0 ) ) ) ;
playoutItems [ 4 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 9 , 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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 3 , 0 ) ) ) ;
playoutItems [ 5 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 3 , 0 ) ) ) ;
playoutItems [ 5 ] . GuideGroup . Should ( ) . Be ( 3 ) ;
playoutItems [ 5 ] . FillerKind . Should ( ) . Be ( FillerKind . Tail ) ;
playoutItems [ 5 ] . GuideFinish . HasValue . Should ( ) . BeFalse ( ) ;
@ -561,6 +603,10 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -561,6 +603,10 @@ namespace ErsatzTV.Core.Tests.Scheduling
CollectionId = collectionThree . Id
}
} ;
var scheduleItemsEnumerator = new OrderedScheduleItemsEnumerator (
new List < ProgramScheduleItem > { scheduleItem } ,
new CollectionEnumeratorState ( ) ) ;
var enumerator1 = new ChronologicalMediaCollectionEnumerator (
collectionOne . MediaItems ,
@ -574,9 +620,11 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -574,9 +620,11 @@ namespace ErsatzTV.Core.Tests.Scheduling
collectionThree . MediaItems ,
new CollectionEnumeratorState ( ) ) ;
PlayoutBuilderState startState = StartState ( scheduleItemsEnumerator ) ;
var scheduler = new PlayoutModeSchedulerDuration ( new Mock < ILogger > ( ) . Object ) ;
( PlayoutBuilderState playoutBuilderState , List < PlayoutItem > playoutItems ) = scheduler . Schedule (
S tartState,
s tartState,
CollectionEnumerators (
scheduleItem ,
enumerator1 ,
@ -586,9 +634,9 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -586,9 +634,9 @@ namespace ErsatzTV.Core.Tests.Scheduling
enumerator3 ) ,
scheduleItem ,
NextScheduleItem ,
HardStop ) ;
HardStop ( scheduleItemsEnumerator ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( S tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutBuilderState . CurrentTime . Should ( ) . Be ( s tartState. CurrentTime . AddHours ( 3 ) ) ;
playoutItems . Last ( ) . FinishOffset . Should ( ) . Be ( playoutBuilderState . CurrentTime ) ;
playoutBuilderState . NextGuideGroup . Should ( ) . Be ( 4 ) ;
@ -596,7 +644,7 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -596,7 +644,7 @@ namespace ErsatzTV.Core.Tests.Scheduling
playoutBuilderState . InFlood . Should ( ) . BeFalse ( ) ;
playoutBuilderState . MultipleRemaining . IsNone . Should ( ) . BeTrue ( ) ;
playoutBuilderState . InDurationFiller . Should ( ) . BeFalse ( ) ;
playoutBuilderState . ScheduleItemIndex . Should ( ) . Be ( 1 ) ;
playoutBuilderState . ScheduleItemsEnumerator . State . Index . Should ( ) . Be ( 0 ) ;
enumerator1 . State . Index . Should ( ) . Be ( 1 ) ;
enumerator2 . State . Index . Should ( ) . Be ( 1 ) ;
@ -605,43 +653,43 @@ namespace ErsatzTV.Core.Tests.Scheduling
@@ -605,43 +653,43 @@ namespace ErsatzTV.Core.Tests.Scheduling
playoutItems . Count . Should ( ) . Be ( 7 ) ;
playoutItems [ 0 ] . MediaItemId . Should ( ) . Be ( 1 ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( S tartState. CurrentTime ) ;
playoutItems [ 0 ] . StartOffset . Should ( ) . Be ( s tartState. 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 ( S tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
playoutItems [ 1 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . AddMinutes ( 5 5 ) ) ;
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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 0 ) ) ) ;
playoutItems [ 2 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 1 , 5 0 , 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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 0 ) ) ) ;
playoutItems [ 3 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 5 , 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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 9 , 0 ) ) ) ;
playoutItems [ 4 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 4 9 , 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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 3 , 0 ) ) ) ;
playoutItems [ 5 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 3 , 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 ( S tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 7 , 0 ) ) ) ;
playoutItems [ 6 ] . StartOffset . Should ( ) . Be ( s tartState. CurrentTime . Add ( new TimeSpan ( 2 , 5 7 , 0 ) ) ) ;
playoutItems [ 6 ] . GuideGroup . Should ( ) . Be ( 3 ) ;
playoutItems [ 6 ] . FillerKind . Should ( ) . Be ( FillerKind . Fallback ) ;
playoutItems [ 6 ] . GuideFinish . HasValue . Should ( ) . BeFalse ( ) ;