Browse Source

fix effective block tests (#2600)

* fix effective block tests running on github

* update dependencies

* pass tz again

* use tzconvert for time zones in tests

* temporary logging

* maybe fix

* test cleanup
pull/2602/head
Jason Dove 2 months ago committed by GitHub
parent
commit
629b3d7d9f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      ErsatzTV.Application/ErsatzTV.Application.csproj
  2. 31
      ErsatzTV.Core.Tests/Scheduling/BlockScheduling/EffectiveBlockTests.cs
  3. 4
      ErsatzTV.Core/ErsatzTV.Core.csproj
  4. 7
      ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs
  5. 19
      ErsatzTV.Core/Scheduling/BlockScheduling/EffectiveBlock.cs
  6. 2
      ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj
  7. 6
      ErsatzTV.Infrastructure/ErsatzTV.Infrastructure.csproj
  8. 2
      ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj
  9. 2
      ErsatzTV.Scanner/ErsatzTV.Scanner.csproj
  10. 6
      ErsatzTV/ErsatzTV.csproj

2
ErsatzTV.Application/ErsatzTV.Application.csproj

@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
</PackageReference>
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
<PackageReference Include="Serilog.Formatting.Compact.Reader" Version="4.0.0" />
<PackageReference Include="WebMarkupMin.Core" Version="2.19.0" />
<PackageReference Include="WebMarkupMin.Core" Version="2.19.1" />
<PackageReference Include="Winista.MimeDetect" Version="1.1.0" />
</ItemGroup>

31
ErsatzTV.Core.Tests/Scheduling/BlockScheduling/EffectiveBlockTests.cs

@ -2,13 +2,14 @@ using ErsatzTV.Core.Domain.Scheduling; @@ -2,13 +2,14 @@ using ErsatzTV.Core.Domain.Scheduling;
using ErsatzTV.Core.Scheduling.BlockScheduling;
using NUnit.Framework;
using Shouldly;
using TimeZoneConverter;
namespace ErsatzTV.Core.Tests.Scheduling.BlockScheduling;
public static class EffectiveBlockTests
public class EffectiveBlockTests
{
private static DateTimeOffset GetLocalDate(int year, int month, int day) =>
new(year, month, day, 0, 0, 0, TimeSpan.FromHours(-6));
private static DateTimeOffset GetLocalDate(int year, int month, int day, TimeZoneInfo tz) =>
new(year, month, day, 0, 0, 0, tz.GetUtcOffset(new DateTime(year, month, day)));
private static Template SingleBlockTemplate(DateTimeOffset dateUpdated)
{
@ -60,9 +61,10 @@ public static class EffectiveBlockTests @@ -60,9 +61,10 @@ public static class EffectiveBlockTests
}
];
DateTimeOffset start = GetLocalDate(2024, 1, 15).AddHours(9);
TimeZoneInfo tz = TimeZoneInfo.Local;
DateTimeOffset start = GetLocalDate(2024, 1, 15, tz).AddHours(9);
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, start, 5);
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, start, tz, 5);
result.Count.ShouldBe(0);
}
@ -85,20 +87,21 @@ public static class EffectiveBlockTests @@ -85,20 +87,21 @@ public static class EffectiveBlockTests
}
];
DateTimeOffset start = GetLocalDate(2024, 1, 15).AddHours(9);
TimeZoneInfo tz = TimeZoneInfo.Local;
DateTimeOffset start = GetLocalDate(2024, 1, 15, tz).AddHours(9);
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, start, 5);
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, start, tz, 5);
result.Count.ShouldBe(3);
result[0].Start.DayOfWeek.ShouldBe(DayOfWeek.Monday);
result[0].Start.Date.ShouldBe(GetLocalDate(2024, 1, 15).Date);
result[0].Start.Date.ShouldBe(GetLocalDate(2024, 1, 15, tz).Date);
result[1].Start.DayOfWeek.ShouldBe(DayOfWeek.Wednesday);
result[1].Start.Date.ShouldBe(GetLocalDate(2024, 1, 17).Date);
result[1].Start.Date.ShouldBe(GetLocalDate(2024, 1, 17, tz).Date);
result[2].Start.DayOfWeek.ShouldBe(DayOfWeek.Friday);
result[2].Start.Date.ShouldBe(GetLocalDate(2024, 1, 19).Date);
result[2].Start.Date.ShouldBe(GetLocalDate(2024, 1, 19, tz).Date);
}
[Test]
@ -121,11 +124,11 @@ public static class EffectiveBlockTests @@ -121,11 +124,11 @@ public static class EffectiveBlockTests
// In 2024, DST starts on March 10 for America/Chicago
// For Windows, this would be "Central Standard Time"
var tz = TimeZoneInfo.FindSystemTimeZoneById("America/Chicago");
var tz = TZConvert.GetTimeZoneInfo("America/Chicago");
var start = new DateTime(2024, 3, 9, 0, 0, 0, DateTimeKind.Unspecified);
var dto = new DateTimeOffset(start, tz.GetUtcOffset(start));
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, dto, 5);
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, dto, tz, 5);
result.Count.ShouldBe(5);
@ -160,11 +163,11 @@ public static class EffectiveBlockTests @@ -160,11 +163,11 @@ public static class EffectiveBlockTests
// In 2024, DST ends on Nov 3 for America/Chicago
// For Windows, this would be "Central Standard Time"
var tz = TimeZoneInfo.FindSystemTimeZoneById("America/Chicago");
var tz = TZConvert.GetTimeZoneInfo("America/Chicago");
var start = new DateTime(2024, 11, 2, 0, 0, 0, DateTimeKind.Unspecified);
var dto = new DateTimeOffset(start, tz.GetUtcOffset(start));
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, dto, 5);
List<EffectiveBlock> result = EffectiveBlock.GetEffectiveBlocks(templates, dto, tz, 5);
result.Count.ShouldBe(5);

4
ErsatzTV.Core/ErsatzTV.Core.csproj

@ -25,10 +25,10 @@ @@ -25,10 +25,10 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="NCalcSync" Version="5.7.0" />
<PackageReference Include="NCalcSync" Version="5.8.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
<PackageReference Include="Serilog" Version="4.3.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.1.1" />
<PackageReference Include="SkiaSharp" Version="3.119.1" />
<PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="3.119.1" />
<PackageReference Include="System.CommandLine" Version="2.0.0-rc.2.25502.107" />

7
ErsatzTV.Core/Scheduling/BlockScheduling/BlockPlayoutBuilder.cs

@ -54,8 +54,11 @@ public class BlockPlayoutBuilder( @@ -54,8 +54,11 @@ public class BlockPlayoutBuilder(
int daysToBuild = await GetDaysToBuild(cancellationToken);
// get blocks to schedule
List<EffectiveBlock> blocksToSchedule =
EffectiveBlock.GetEffectiveBlocks(referenceData.PlayoutTemplates, start, daysToBuild);
List<EffectiveBlock> blocksToSchedule = EffectiveBlock.GetEffectiveBlocks(
referenceData.PlayoutTemplates,
start,
TimeZoneInfo.Local,
daysToBuild);
if (blocksToSchedule.Count == 0)
{

19
ErsatzTV.Core/Scheduling/BlockScheduling/EffectiveBlock.cs

@ -7,14 +7,13 @@ internal record EffectiveBlock(Block Block, BlockKey BlockKey, DateTimeOffset St @@ -7,14 +7,13 @@ internal record EffectiveBlock(Block Block, BlockKey BlockKey, DateTimeOffset St
public static List<EffectiveBlock> GetEffectiveBlocks(
ICollection<PlayoutTemplate> templates,
DateTimeOffset start,
TimeZoneInfo timeZone,
int daysToBuild)
{
var timeZone = TimeZoneInfo.Local;
DateTimeOffset finish = start.AddDays(daysToBuild);
var effectiveBlocks = new List<EffectiveBlock>();
DateTimeOffset current = start.Date;
DateTimeOffset current = new DateTimeOffset(start.Year, start.Month, start.Day, 0, 0, 0, start.Offset);
while (current < finish)
{
Option<PlayoutTemplate> maybeTemplate = PlayoutTemplateSelector.GetPlayoutTemplateFor(templates, current);
@ -23,12 +22,12 @@ internal record EffectiveBlock(Block Block, BlockKey BlockKey, DateTimeOffset St @@ -23,12 +22,12 @@ internal record EffectiveBlock(Block Block, BlockKey BlockKey, DateTimeOffset St
// logger.LogDebug(
// "Will schedule day {Date} using template {Template}",
// current,
// playoutTemplate.Template.Name);
// playoutTemplate.Template.Id);
DateTimeOffset today = current;
var newBlocks = playoutTemplate.Template.Items
.Map(i => ToEffectiveBlock(playoutTemplate, i, today))
.Map(i => ToEffectiveBlock(playoutTemplate, i, today, timeZone))
.Map(NormalizeGuideMode)
.ToList();
@ -48,7 +47,8 @@ internal record EffectiveBlock(Block Block, BlockKey BlockKey, DateTimeOffset St @@ -48,7 +47,8 @@ internal record EffectiveBlock(Block Block, BlockKey BlockKey, DateTimeOffset St
private static EffectiveBlock ToEffectiveBlock(
PlayoutTemplate playoutTemplate,
TemplateItem templateItem,
DateTimeOffset current)
DateTimeOffset current,
TimeZoneInfo timeZone)
{
var blockStartTime = new DateTime(
current.Year,
@ -59,10 +59,13 @@ internal record EffectiveBlock(Block Block, BlockKey BlockKey, DateTimeOffset St @@ -59,10 +59,13 @@ internal record EffectiveBlock(Block Block, BlockKey BlockKey, DateTimeOffset St
0,
DateTimeKind.Unspecified);
// use the system's local time zone
var timeZone = TimeZoneInfo.Local;
var blockStart = new DateTimeOffset(blockStartTime, timeZone.GetUtcOffset(blockStartTime));
// logger.LogDebug(
// "Starting block {Block} at {BlockStart}",
// templateItem.Block.Name,
// blockStart);
return new EffectiveBlock(
templateItem.Block,
new BlockKey(templateItem.Block, templateItem.Template, playoutTemplate),

2
ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj

@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="NUnit" Version="4.4.0" />
<PackageReference Include="NUnit3TestAdapter" Version="5.2.0" />
<PackageReference Include="NUnit.Analyzers" Version="4.10.0">
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>

6
ErsatzTV.Infrastructure/ErsatzTV.Infrastructure.csproj

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
<PackageReference Include="CliWrap" Version="3.9.0" />
<PackageReference Include="Dapper" Version="2.1.66" />
<PackageReference Include="EFCore.BulkExtensions" Version="9.0.2" />
<PackageReference Include="Elastic.Clients.Elasticsearch" Version="9.2.0" />
<PackageReference Include="Elastic.Clients.Elasticsearch" Version="9.2.1" />
<PackageReference Include="Jint" Version="4.4.1" />
<PackageReference Include="Lucene.Net" Version="4.8.0-beta00017" />
<PackageReference Include="Lucene.Net.Analysis.Common" Version="4.8.0-beta00017" />
@ -34,8 +34,8 @@ @@ -34,8 +34,8 @@
<PackageReference Include="Refit.Newtonsoft.Json" Version="8.0.0" />
<PackageReference Include="Refit.Xml" Version="8.0.0" />
<PackageReference Include="RichTextKit.Stbear" Version="0.4.167.3" />
<PackageReference Include="Scriban.Signed" Version="6.4.0" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.11" />
<PackageReference Include="Scriban.Signed" Version="6.5.0" />
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.12" />
<PackageReference Include="SkiaSharp" Version="3.119.1" />
<PackageReference Include="TagLibSharp" Version="2.3.0" />
<PackageReference Include="TimeZoneConverter" Version="7.2.0" />

2
ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="NUnit" Version="4.4.0" />
<PackageReference Include="NUnit3TestAdapter" Version="5.2.0" />
<PackageReference Include="NUnit.Analyzers" Version="4.10.0">
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>

2
ErsatzTV.Scanner/ErsatzTV.Scanner.csproj

@ -31,7 +31,7 @@ @@ -31,7 +31,7 @@
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="9.0.0" />
<PackageReference Include="Serilog.Formatting.Compact" Version="3.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.1.1" />
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
<PackageReference Include="System.CommandLine" Version="2.0.0-rc.2.25502.107" />
</ItemGroup>

6
ErsatzTV/ErsatzTV.csproj

@ -30,9 +30,9 @@ @@ -30,9 +30,9 @@
<PackageReference Include="Blazored.FluentValidation" Version="2.2.0" />
<PackageReference Include="BlazorSortable" Version="5.1.3" />
<PackageReference Include="Bugsnag.AspNet.Core" Version="4.1.0" />
<PackageReference Include="FluentValidation" Version="12.0.0" />
<PackageReference Include="FluentValidation" Version="12.1.0" />
<PackageReference Include="FluentValidation.AspNetCore" Version="11.3.1" />
<PackageReference Include="Heron.MudCalendar" Version="3.2.0" />
<PackageReference Include="Heron.MudCalendar" Version="3.3.0" />
<PackageReference Include="HtmlSanitizer" Version="9.0.886" />
<PackageReference Include="LanguageExt.Core" Version="4.4.9" />
<PackageReference Include="Markdig" Version="0.43.0" />
@ -57,7 +57,7 @@ @@ -57,7 +57,7 @@
<PackageReference Include="MudBlazor" Version="8.13.0" />
<PackageReference Include="NaturalSort.Extension" Version="4.4.0" />
<PackageReference Include="Refit.HttpClientFactory" Version="8.0.0" />
<PackageReference Include="Scalar.AspNetCore" Version="2.9.0" />
<PackageReference Include="Scalar.AspNetCore" Version="2.10.1" />
<PackageReference Include="Serilog" Version="4.3.0" />
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="9.0.0" />

Loading…
Cancel
Save