mirror of https://github.com/ErsatzTV/ErsatzTV.git
Browse Source
* refactor classic and block schedules to use same alternate schedule selector * handle start year and end year * add migrations for classic and block schedules * allow editing block template start and end year * add tests that include years * add date range editing to classic (alternate) schedules * fix running tests locally * restore media files load; needed for local folder scanners * update changelog * feedbackpull/2758/head
40 changed files with 15366 additions and 736 deletions
@ -0,0 +1,867 @@
@@ -0,0 +1,867 @@
|
||||
using ErsatzTV.Core.Domain.Scheduling; |
||||
using ErsatzTV.Core.Scheduling; |
||||
using NUnit.Framework; |
||||
using Shouldly; |
||||
|
||||
namespace ErsatzTV.Core.Tests.Scheduling; |
||||
|
||||
public static class AlternateScheduleSelectorTests |
||||
{ |
||||
[TestFixture] |
||||
public class GetScheduleForDate |
||||
{ |
||||
private static readonly TimeSpan Offset = TimeSpan.FromHours(-5); |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Before_Start_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 3, 31, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Before_Start_With_Year_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
StartYear = 2024, |
||||
EndMonth = 6, |
||||
EndDay = 15, |
||||
EndYear = 2024 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 3, 31, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_On_Start_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_On_Start_With_Year_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
StartYear = 2024, |
||||
EndMonth = 6, |
||||
EndDay = 15, |
||||
EndYear = 2024 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_In_Range_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 20, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_In_Range_With_Year_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
StartYear = 2024, |
||||
EndMonth = 6, |
||||
EndDay = 15, |
||||
EndYear = 2024 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 20, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_On_End_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_On_End_With_Year_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
StartYear = 2023, |
||||
EndMonth = 6, |
||||
EndDay = 15, |
||||
EndYear = 2024 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_After_End_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 16, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_After_End_With_Year_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
StartYear = 2024, |
||||
EndMonth = 6, |
||||
EndDay = 15, |
||||
EndYear = 2024 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 16, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Before_Invalid_Start_Date_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Before_Invalid_Start_Date_With_Year_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
StartYear = 2023, |
||||
EndMonth = 6, |
||||
EndDay = 15, |
||||
EndYear = 2023 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_After_Invalid_Start_Date_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_After_Invalid_Start_Date_With_Year_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
StartYear = 2023, |
||||
EndMonth = 6, |
||||
EndDay = 15, |
||||
EndYear = 2023 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Before_Invalid_End_Date_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 1, |
||||
StartDay = 1, |
||||
EndMonth = 2, |
||||
EndDay = 29 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Before_Invalid_End_Date_With_Year_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 1, |
||||
StartDay = 1, |
||||
StartYear = 2023, |
||||
EndMonth = 2, |
||||
EndDay = 29, |
||||
EndYear = 2023 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_After_Invalid_End_Date_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 1, |
||||
StartDay = 1, |
||||
EndMonth = 2, |
||||
EndDay = 29 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_After_Invalid_End_Date_With_Year_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 1, |
||||
StartDay = 1, |
||||
StartYear = 2023, |
||||
EndMonth = 2, |
||||
EndDay = 29, |
||||
EndYear = 2023 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_Before_Start_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
EndMonth = 4, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 14, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_Before_Start_With_Year_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
StartYear = 2023, |
||||
EndMonth = 4, |
||||
EndDay = 1, |
||||
EndYear = 2024 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 14, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_On_Start_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
EndMonth = 4, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_On_Start_With_Year_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
StartYear = 2024, |
||||
EndMonth = 4, |
||||
EndDay = 1, |
||||
EndYear = 2025 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_In_Range_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
EndMonth = 4, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 7, 20, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_In_Range_With_Year_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
StartYear = 2024, |
||||
EndMonth = 4, |
||||
EndDay = 1, |
||||
EndYear = 2025 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 7, 20, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_On_End_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
EndMonth = 4, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_On_End_With_Year_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
StartYear = 2023, |
||||
EndMonth = 4, |
||||
EndDay = 1, |
||||
EndYear = 2024 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_After_End_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
EndMonth = 4, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 2, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_After_End_With_Year_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
StartYear = 2023, |
||||
EndMonth = 4, |
||||
EndDay = 1, |
||||
EndYear = 2024 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 2, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_Before_Invalid_Start_Date_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
EndMonth = 1, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_Before_Invalid_Start_Date_With_Year_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
StartYear = 2023, |
||||
EndMonth = 1, |
||||
EndDay = 1, |
||||
EndYear = 2024 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_After_Invalid_Start_Date_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
EndMonth = 1, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_After_Invalid_Start_Date_With_Year_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
StartYear = 2023, |
||||
EndMonth = 1, |
||||
EndDay = 1, |
||||
EndYear = 2024 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_Before_Invalid_End_Date_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 5, |
||||
StartDay = 1, |
||||
EndMonth = 2, |
||||
EndDay = 29 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_Before_Invalid_End_Date_With_Year_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 5, |
||||
StartDay = 1, |
||||
StartYear = 2022, |
||||
EndMonth = 2, |
||||
EndDay = 29, |
||||
EndYear = 2023 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_After_Invalid_End_Date_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 5, |
||||
StartDay = 1, |
||||
EndMonth = 2, |
||||
EndDay = 29 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_After_Invalid_End_Date_With_Year_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 5, |
||||
StartDay = 1, |
||||
StartYear = 2022, |
||||
EndMonth = 2, |
||||
EndDay = 29, |
||||
EndYear = 2023 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_December_32nd_Should_Not_Crash() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = AlternateScheduleSelector.AllDaysOfWeek(), |
||||
DaysOfMonth = AlternateScheduleSelector.AllDaysOfMonth(), |
||||
MonthsOfYear = AlternateScheduleSelector.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 12, |
||||
StartDay = 32, |
||||
StartYear = 2022, |
||||
EndMonth = 12, |
||||
EndDay = 32, |
||||
EndYear = 2023 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = AlternateScheduleSelector.GetScheduleForDate( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeFalse(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,411 +0,0 @@
@@ -1,411 +0,0 @@
|
||||
using ErsatzTV.Core.Domain.Scheduling; |
||||
using ErsatzTV.Core.Scheduling; |
||||
using NUnit.Framework; |
||||
using Shouldly; |
||||
|
||||
namespace ErsatzTV.Core.Tests.Scheduling; |
||||
|
||||
public static class PlayoutTemplateSelectorTests |
||||
{ |
||||
[TestFixture] |
||||
public class GetPlayoutTemplateFor |
||||
{ |
||||
private static readonly TimeSpan Offset = TimeSpan.FromHours(-5); |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Before_Start_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 3, 31, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_On_Start_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_In_Range_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 20, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_On_End_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_After_End_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 4, |
||||
StartDay = 1, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 16, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Before_Invalid_Start_Date_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_After_Invalid_Start_Date_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
EndMonth = 6, |
||||
EndDay = 15 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Before_Invalid_End_Date_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 1, |
||||
StartDay = 1, |
||||
EndMonth = 2, |
||||
EndDay = 29 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_After_Invalid_End_Date_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 1, |
||||
StartDay = 1, |
||||
EndMonth = 2, |
||||
EndDay = 29 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_Before_Start_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
EndMonth = 4, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 14, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_On_Start_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
EndMonth = 4, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 6, 15, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_In_Range_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
EndMonth = 4, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 7, 20, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_On_End_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
EndMonth = 4, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_After_End_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 6, |
||||
StartDay = 15, |
||||
EndMonth = 4, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2024, 4, 2, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_Before_Invalid_Start_Date_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
EndMonth = 1, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_After_Invalid_Start_Date_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 2, |
||||
StartDay = 29, |
||||
EndMonth = 1, |
||||
EndDay = 1 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_Before_Invalid_End_Date_Should_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 5, |
||||
StartDay = 1, |
||||
EndMonth = 2, |
||||
EndDay = 29 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 2, 28, 0, 0, 0, Offset)); |
||||
|
||||
result.IsSome.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void LimitToDateRange_Wrap_Around_After_Invalid_End_Date_Should_Not_Return_Template() |
||||
{ |
||||
var template = new PlayoutTemplate |
||||
{ |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear(), |
||||
LimitToDateRange = true, |
||||
StartMonth = 5, |
||||
StartDay = 1, |
||||
EndMonth = 2, |
||||
EndDay = 29 |
||||
}; |
||||
|
||||
Option<PlayoutTemplate> result = PlayoutTemplateSelector.GetPlayoutTemplateFor( |
||||
new List<PlayoutTemplate> { template }, |
||||
new DateTimeOffset(2023, 3, 1, 0, 0, 0, Offset)); |
||||
|
||||
result.IsNone.ShouldBeTrue(); |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
|
||||
namespace ErsatzTV.Core.Domain.Scheduling; |
||||
|
||||
public interface IAlternateScheduleItem |
||||
{ |
||||
int Index { get; } |
||||
ICollection<DayOfWeek> DaysOfWeek { get; } |
||||
ICollection<int> DaysOfMonth { get; } |
||||
ICollection<int> MonthsOfYear { get; } |
||||
bool LimitToDateRange { get; } |
||||
int StartMonth { get; } |
||||
int StartDay { get; } |
||||
int? StartYear { get; } |
||||
int EndMonth { get; } |
||||
int EndDay { get; } |
||||
int? EndYear { get; } |
||||
} |
||||
@ -0,0 +1,109 @@
@@ -0,0 +1,109 @@
|
||||
using ErsatzTV.Core.Domain.Scheduling; |
||||
|
||||
namespace ErsatzTV.Core.Scheduling; |
||||
|
||||
public static class AlternateScheduleSelector |
||||
{ |
||||
public static List<DayOfWeek> AllDaysOfWeek() => |
||||
[ |
||||
DayOfWeek.Monday, |
||||
DayOfWeek.Tuesday, |
||||
DayOfWeek.Wednesday, |
||||
DayOfWeek.Thursday, |
||||
DayOfWeek.Friday, |
||||
DayOfWeek.Saturday, |
||||
DayOfWeek.Sunday |
||||
]; |
||||
|
||||
public static List<int> AllDaysOfMonth() => Enumerable.Range(1, 31).ToList(); |
||||
|
||||
public static List<int> AllMonthsOfYear() => Enumerable.Range(1, 12).ToList(); |
||||
|
||||
public static Option<T> GetScheduleForDate<T>(IEnumerable<T> items, DateTimeOffset date) |
||||
where T : IAlternateScheduleItem |
||||
{ |
||||
foreach (T item in items.OrderBy(x => x.Index)) |
||||
{ |
||||
if (item.LimitToDateRange) |
||||
{ |
||||
bool reverse = item.StartMonth * 100 + item.StartDay > |
||||
item.EndMonth * 100 + item.EndDay; |
||||
|
||||
int startYear = date.LocalDateTime.Year; |
||||
int endYear = date.LocalDateTime.Year; |
||||
|
||||
if (item.StartYear.HasValue && item.EndYear.HasValue) |
||||
{ |
||||
startYear = item.StartYear.Value; |
||||
endYear = item.EndYear.Value; |
||||
reverse = false; |
||||
} |
||||
|
||||
DateTime start; |
||||
DateTime end; |
||||
|
||||
try |
||||
{ |
||||
start = new DateTime(startYear, item.StartMonth, item.StartDay, 0, 0, 0, DateTimeKind.Local); |
||||
} |
||||
catch (ArgumentOutOfRangeException) |
||||
{ |
||||
// this should only happen with days that are greater than the actual days in the month,
|
||||
// so roll over to the 1st of the next month
|
||||
start = new DateTime(startYear, item.StartMonth, 1, 0, 0, 0, DateTimeKind.Local).AddMonths(1); |
||||
} |
||||
|
||||
try |
||||
{ |
||||
end = new DateTime(endYear, item.EndMonth, item.EndDay, 0, 0, 0, DateTimeKind.Local); |
||||
} |
||||
catch (ArgumentOutOfRangeException) |
||||
{ |
||||
// this should only happen with days that are greater than the actual days in the month,
|
||||
// so reduce to the max days in the month
|
||||
end = new DateTime( |
||||
endYear, |
||||
item.EndMonth, |
||||
DateTime.DaysInMonth(endYear, item.EndMonth), |
||||
0, |
||||
0, |
||||
0, |
||||
DateTimeKind.Local); |
||||
} |
||||
|
||||
if (reverse) |
||||
{ |
||||
(start, end) = (end, start); |
||||
if (date.Date > start.Date && date.Date < end.Date) |
||||
{ |
||||
continue; |
||||
} |
||||
} |
||||
else if (date.Date < start.Date || date.Date > end.Date) |
||||
{ |
||||
continue; |
||||
} |
||||
} |
||||
|
||||
bool daysOfWeek = item.DaysOfWeek.Contains(date.DayOfWeek); |
||||
if (!daysOfWeek) |
||||
{ |
||||
continue; |
||||
} |
||||
|
||||
bool daysOfMonth = item.DaysOfMonth.Contains(date.Day); |
||||
if (!daysOfMonth) |
||||
{ |
||||
continue; |
||||
} |
||||
|
||||
bool monthOfYear = item.MonthsOfYear.Contains(date.Month); |
||||
if (monthOfYear) |
||||
{ |
||||
return item; |
||||
} |
||||
} |
||||
|
||||
return Option<T>.None; |
||||
} |
||||
} |
||||
@ -1,40 +0,0 @@
@@ -1,40 +0,0 @@
|
||||
using ErsatzTV.Core.Domain; |
||||
|
||||
namespace ErsatzTV.Core.Scheduling; |
||||
|
||||
public static class PlayoutScheduleSelector |
||||
{ |
||||
public static ProgramSchedule GetProgramScheduleFor( |
||||
ProgramSchedule defaultSchedule, |
||||
IEnumerable<ProgramScheduleAlternate> alternates, |
||||
DateTimeOffset date) |
||||
{ |
||||
foreach (ProgramScheduleAlternate alternate in alternates.OrderBy(x => x.Index)) |
||||
{ |
||||
bool daysOfWeek = alternate.DaysOfWeek.Count is 0 or 7 || |
||||
alternate.DaysOfWeek.Contains(date.DayOfWeek); |
||||
|
||||
if (!daysOfWeek) |
||||
{ |
||||
continue; |
||||
} |
||||
|
||||
bool daysOfMonth = alternate.DaysOfMonth.Count is 0 or 31 || |
||||
alternate.DaysOfMonth.Contains(date.Day); |
||||
if (!daysOfMonth) |
||||
{ |
||||
continue; |
||||
} |
||||
|
||||
bool monthOfYear = alternate.MonthsOfYear.Count is 0 or 12 || |
||||
alternate.MonthsOfYear.Contains(date.Month); |
||||
|
||||
if (monthOfYear) |
||||
{ |
||||
return alternate.ProgramSchedule; |
||||
} |
||||
} |
||||
|
||||
return defaultSchedule; |
||||
} |
||||
} |
||||
@ -1,86 +0,0 @@
@@ -1,86 +0,0 @@
|
||||
using ErsatzTV.Core.Domain.Scheduling; |
||||
|
||||
namespace ErsatzTV.Core.Scheduling; |
||||
|
||||
public static class PlayoutTemplateSelector |
||||
{ |
||||
public static Option<PlayoutTemplate> GetPlayoutTemplateFor( |
||||
IEnumerable<PlayoutTemplate> templates, |
||||
DateTimeOffset date) |
||||
{ |
||||
foreach (PlayoutTemplate template in templates.OrderBy(x => x.Index)) |
||||
{ |
||||
if (template.LimitToDateRange) |
||||
{ |
||||
bool reverse = template.StartMonth * 100 + template.StartDay > |
||||
template.EndMonth * 100 + template.EndDay; |
||||
|
||||
int year = date.LocalDateTime.Year; |
||||
DateTime start; |
||||
DateTime end; |
||||
|
||||
try |
||||
{ |
||||
start = new DateTime(year, template.StartMonth, template.StartDay, 0, 0, 0, DateTimeKind.Local); |
||||
} |
||||
catch (ArgumentOutOfRangeException) |
||||
{ |
||||
// this should only happen with days that are greater than the actual days in the month,
|
||||
// so roll over to the 1st of the next month
|
||||
start = new DateTime(year, template.StartMonth + 1, 1, 0, 0, 0, DateTimeKind.Local); |
||||
} |
||||
|
||||
try |
||||
{ |
||||
end = new DateTime(year, template.EndMonth, template.EndDay, 0, 0, 0, DateTimeKind.Local); |
||||
} |
||||
catch (ArgumentOutOfRangeException) |
||||
{ |
||||
// this should only happen with days that are greater than the actual days in the month,
|
||||
// so reduce to the max days in the month
|
||||
end = new DateTime( |
||||
year, |
||||
template.EndMonth, |
||||
DateTime.DaysInMonth(year, template.EndMonth), |
||||
0, |
||||
0, |
||||
0, |
||||
DateTimeKind.Local); |
||||
} |
||||
|
||||
if (reverse) |
||||
{ |
||||
(start, end) = (end, start); |
||||
if (date.Date > start.Date && date.Date < end.Date) |
||||
{ |
||||
continue; |
||||
} |
||||
} |
||||
else if (date.Date < start.Date || date.Date > end.Date) |
||||
{ |
||||
continue; |
||||
} |
||||
} |
||||
|
||||
bool daysOfWeek = template.DaysOfWeek.Contains(date.DayOfWeek); |
||||
if (!daysOfWeek) |
||||
{ |
||||
continue; |
||||
} |
||||
|
||||
bool daysOfMonth = template.DaysOfMonth.Contains(date.Day); |
||||
if (!daysOfMonth) |
||||
{ |
||||
continue; |
||||
} |
||||
|
||||
bool monthOfYear = template.MonthsOfYear.Contains(date.Month); |
||||
if (monthOfYear) |
||||
{ |
||||
return template; |
||||
} |
||||
} |
||||
|
||||
return Option<PlayoutTemplate>.None; |
||||
} |
||||
} |
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,113 @@
@@ -0,0 +1,113 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
||||
#nullable disable |
||||
|
||||
namespace ErsatzTV.Infrastructure.MySql.Migrations |
||||
{ |
||||
/// <inheritdoc />
|
||||
public partial class Align_ClassicBlockAlternateScheduleFields : Migration |
||||
{ |
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder) |
||||
{ |
||||
migrationBuilder.AddColumn<int>( |
||||
name: "EndDay", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "int", |
||||
nullable: false, |
||||
defaultValue: 0); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "EndMonth", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "int", |
||||
nullable: false, |
||||
defaultValue: 0); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "EndYear", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "int", |
||||
nullable: true); |
||||
|
||||
migrationBuilder.AddColumn<bool>( |
||||
name: "LimitToDateRange", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "tinyint(1)", |
||||
nullable: false, |
||||
defaultValue: false); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "StartDay", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "int", |
||||
nullable: false, |
||||
defaultValue: 0); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "StartMonth", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "int", |
||||
nullable: false, |
||||
defaultValue: 0); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "StartYear", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "int", |
||||
nullable: true); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "EndYear", |
||||
table: "PlayoutTemplate", |
||||
type: "int", |
||||
nullable: true); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "StartYear", |
||||
table: "PlayoutTemplate", |
||||
type: "int", |
||||
nullable: true); |
||||
} |
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder) |
||||
{ |
||||
migrationBuilder.DropColumn( |
||||
name: "EndDay", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "EndMonth", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "EndYear", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "LimitToDateRange", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "StartDay", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "StartMonth", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "StartYear", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "EndYear", |
||||
table: "PlayoutTemplate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "StartYear", |
||||
table: "PlayoutTemplate"); |
||||
} |
||||
} |
||||
} |
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,113 @@
@@ -0,0 +1,113 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
||||
#nullable disable |
||||
|
||||
namespace ErsatzTV.Infrastructure.Sqlite.Migrations |
||||
{ |
||||
/// <inheritdoc />
|
||||
public partial class Align_ClassicBlockAlternateScheduleFields : Migration |
||||
{ |
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder) |
||||
{ |
||||
migrationBuilder.AddColumn<int>( |
||||
name: "EndDay", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "INTEGER", |
||||
nullable: false, |
||||
defaultValue: 0); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "EndMonth", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "INTEGER", |
||||
nullable: false, |
||||
defaultValue: 0); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "EndYear", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "INTEGER", |
||||
nullable: true); |
||||
|
||||
migrationBuilder.AddColumn<bool>( |
||||
name: "LimitToDateRange", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "INTEGER", |
||||
nullable: false, |
||||
defaultValue: false); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "StartDay", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "INTEGER", |
||||
nullable: false, |
||||
defaultValue: 0); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "StartMonth", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "INTEGER", |
||||
nullable: false, |
||||
defaultValue: 0); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "StartYear", |
||||
table: "ProgramScheduleAlternate", |
||||
type: "INTEGER", |
||||
nullable: true); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "EndYear", |
||||
table: "PlayoutTemplate", |
||||
type: "INTEGER", |
||||
nullable: true); |
||||
|
||||
migrationBuilder.AddColumn<int>( |
||||
name: "StartYear", |
||||
table: "PlayoutTemplate", |
||||
type: "INTEGER", |
||||
nullable: true); |
||||
} |
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder) |
||||
{ |
||||
migrationBuilder.DropColumn( |
||||
name: "EndDay", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "EndMonth", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "EndYear", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "LimitToDateRange", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "StartDay", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "StartMonth", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "StartYear", |
||||
table: "ProgramScheduleAlternate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "EndYear", |
||||
table: "PlayoutTemplate"); |
||||
|
||||
migrationBuilder.DropColumn( |
||||
name: "StartYear", |
||||
table: "PlayoutTemplate"); |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue