Files
jsmr/JSMR.Tests/Ingestion/Japanese/IngestionTestsBase.cs
Brian Bicknell abd5a81e3e
Some checks failed
ci / build-test (push) Failing after 8m39s
Improved performance of integration tests.
2025-11-02 13:56:34 -05:00

54 lines
2.0 KiB
C#

using JSMR.Application.Scanning.Contracts;
using JSMR.Application.Scanning.Ports;
using JSMR.Infrastructure.Common.Time;
using JSMR.Infrastructure.Data;
using JSMR.Infrastructure.Ingestion;
using JSMR.Tests.Fixtures;
using Microsoft.EntityFrameworkCore;
using NSubstitute;
using System.Runtime.InteropServices;
namespace JSMR.Tests.Ingestion.Japanese;
public abstract class IngestionTestsBase(MariaDbContainerFixture container)
{
protected async Task<AppDbContext> GetAppDbContextAsync()
{
//return await MariaTestDb.CreateIsolatedAsync(
// container.RootConnectionString,
// seed: VoiceWorkIngestionSeedData.SeedAsync);
var newDb = $"t_{DateTime.UtcNow:yyyyMMddHHmmss}_{Guid.NewGuid():N}";
return await MariaDbClone.CloneFromTemplateAsync(
container.RootConnectionString,
container.TemplateDbName,
newDbName: newDb,
seed: VoiceWorkIngestionSeedData.SeedAsync);
}
protected static async Task<VoiceWorkUpsertResult[]> UpsertAsync(AppDbContext dbContext, DateTime dateTime, VoiceWorkIngest[] ingests)
{
DateTime utcDateTime = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);
IClock clock = Substitute.For<IClock>();
clock.UtcNow.Returns(new DateTimeOffset(utcDateTime));
TokyoTimeProvider timeProvider = new(clock);
VoiceWorkUpdater updater = new(dbContext, timeProvider);
return await updater.UpsertAsync(ingests, TestContext.Current.CancellationToken);
}
protected static DateTime TokyoLocalToUtc(int year, int month, int day, int hour, int minute, int second)
{
var tokyo = TimeZoneInfo.FindSystemTimeZoneById(
RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "Tokyo Standard Time" : "Asia/Tokyo");
var localUnspec = new DateTime(year, month, day, hour, minute, second, DateTimeKind.Unspecified);
var utc = TimeZoneInfo.ConvertTimeToUtc(localUnspec, tokyo);
return utc;
}
}