mirror of https://github.com/ErsatzTV/ErsatzTV.git
11 changed files with 161 additions and 14 deletions
@ -0,0 +1,126 @@
@@ -0,0 +1,126 @@
|
||||
using ErsatzTV.Core.Domain; |
||||
using ErsatzTV.Core.Domain.Scheduling; |
||||
using ErsatzTV.Core.FFmpeg; |
||||
using Microsoft.Extensions.Logging; |
||||
using NUnit.Framework; |
||||
using Serilog; |
||||
using Shouldly; |
||||
|
||||
namespace ErsatzTV.Core.Tests.FFmpeg; |
||||
|
||||
[TestFixture] |
||||
public class DecoSelectorTests |
||||
{ |
||||
private static readonly DecoSelector DecoSelector; |
||||
|
||||
static DecoSelectorTests() |
||||
{ |
||||
Log.Logger = new LoggerConfiguration() |
||||
.MinimumLevel.Debug() |
||||
.WriteTo.Console() |
||||
.CreateLogger(); |
||||
|
||||
var loggerFactory = new LoggerFactory().AddSerilog(Log.Logger); |
||||
|
||||
DecoSelector = new DecoSelector(loggerFactory.CreateLogger<DecoSelector>()); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetDecoEntries_Should_Not_Select_Deco_Before_Start_Time() |
||||
{ |
||||
var deco = new Deco { Id = 1, Name = "Test Deco" }; |
||||
|
||||
var decoTemplateItem = new DecoTemplateItem |
||||
{ |
||||
Id = 1, |
||||
DecoId = 1, |
||||
Deco = deco, |
||||
StartTime = new TimeSpan(10, 0, 0), |
||||
EndTime = new TimeSpan(18, 0, 0) |
||||
}; |
||||
|
||||
var decoTemplate = new DecoTemplate |
||||
{ |
||||
Id = 1, |
||||
Name = "Test Deco Template", |
||||
Items = new List<DecoTemplateItem> { decoTemplateItem } |
||||
}; |
||||
|
||||
var playoutTemplate = new PlayoutTemplate |
||||
{ |
||||
Id = 1, |
||||
Template = new Template { Id = 1, Name = "Test Template" }, |
||||
DecoTemplate = decoTemplate, |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear() |
||||
}; |
||||
|
||||
var playout = new Playout |
||||
{ |
||||
Id = 1, |
||||
Templates = new List<PlayoutTemplate> { playoutTemplate } |
||||
}; |
||||
|
||||
var now = new DateTimeOffset(2025, 9, 9, 9, 0, 0, TimeSpan.FromHours(-5)); |
||||
|
||||
var result = DecoSelector.GetDecoEntries(playout, now); |
||||
|
||||
result.TemplateDeco.IsNone.ShouldBeTrue(); |
||||
} |
||||
|
||||
[Test] |
||||
public void GetDecoEntries_Should_Select_Correct_Deco_From_Multiple() |
||||
{ |
||||
var deco1 = new Deco { Id = 1, Name = "Test Deco 1" }; |
||||
var deco2 = new Deco { Id = 2, Name = "Test Deco 2" }; |
||||
|
||||
var decoTemplateItem1 = new DecoTemplateItem |
||||
{ |
||||
Id = 1, |
||||
DecoId = 1, |
||||
Deco = deco1, |
||||
StartTime = new TimeSpan(8, 0, 0), |
||||
EndTime = new TimeSpan(10, 0, 0) |
||||
}; |
||||
|
||||
var decoTemplateItem2 = new DecoTemplateItem |
||||
{ |
||||
Id = 2, |
||||
DecoId = 2, |
||||
Deco = deco2, |
||||
StartTime = new TimeSpan(10, 0, 0), |
||||
EndTime = new TimeSpan(18, 0, 0) |
||||
}; |
||||
|
||||
var decoTemplate = new DecoTemplate |
||||
{ |
||||
Id = 1, |
||||
Name = "Test Deco Template", |
||||
Items = new List<DecoTemplateItem> { decoTemplateItem1, decoTemplateItem2 } |
||||
}; |
||||
|
||||
var playoutTemplate = new PlayoutTemplate |
||||
{ |
||||
Id = 1, |
||||
Template = new Template { Id = 1, Name = "Test Template" }, |
||||
DecoTemplate = decoTemplate, |
||||
DaysOfWeek = PlayoutTemplate.AllDaysOfWeek(), |
||||
DaysOfMonth = PlayoutTemplate.AllDaysOfMonth(), |
||||
MonthsOfYear = PlayoutTemplate.AllMonthsOfYear() |
||||
}; |
||||
|
||||
var playout = new Playout |
||||
{ |
||||
Id = 1, |
||||
Templates = new List<PlayoutTemplate> { playoutTemplate } |
||||
}; |
||||
|
||||
var now = new DateTimeOffset(2025, 9, 9, 9, 0, 0, TimeSpan.FromHours(-5)); |
||||
|
||||
var result = DecoSelector.GetDecoEntries(playout, now); |
||||
|
||||
result.TemplateDeco.IsSome.ShouldBeTrue(); |
||||
result.TemplateDeco.IfSome(d => d.ShouldBe(deco1)); |
||||
} |
||||
} |
||||
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
using ErsatzTV.Core.Domain.Scheduling; |
||||
|
||||
namespace ErsatzTV.Core.Interfaces.FFmpeg; |
||||
|
||||
public sealed record DecoEntries(Option<Deco> TemplateDeco, Option<Deco> PlayoutDeco); |
||||
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
using ErsatzTV.Core.Domain; |
||||
|
||||
namespace ErsatzTV.Core.Interfaces.FFmpeg; |
||||
|
||||
public interface IDecoSelector |
||||
{ |
||||
DecoEntries GetDecoEntries(Playout playout, DateTimeOffset now); |
||||
} |
||||
Loading…
Reference in new issue