Updated integration testing for English and Japanese. Fixed minor voice work updater issue. Updated to XUnitV3.

This commit is contained in:
2025-10-28 22:01:34 -04:00
parent 99c397b3bc
commit 6d090390b0
24 changed files with 1018 additions and 354 deletions

View File

@@ -1,189 +1,189 @@
using JSMR.Application.Scanning.Contracts;
using JSMR.Application.Scanning.Ports;
using JSMR.Domain.Entities;
using JSMR.Infrastructure.Common.Languages;
using JSMR.Infrastructure.Data;
using JSMR.Infrastructure.Ingestion;
using JSMR.Tests.Fixtures;
using Microsoft.EntityFrameworkCore;
using Shouldly;
//using JSMR.Application.Scanning.Contracts;
//using JSMR.Application.Scanning.Ports;
//using JSMR.Domain.Entities;
//using JSMR.Infrastructure.Common.Languages;
//using JSMR.Infrastructure.Data;
//using JSMR.Infrastructure.Ingestion;
//using JSMR.Tests.Fixtures;
//using Microsoft.EntityFrameworkCore;
//using Shouldly;
namespace JSMR.Tests.Ingestion;
//namespace JSMR.Tests.Ingestion;
public class EnglishLocalizationTests(MariaDbContainerFixture container) : IClassFixture<MariaDbContainerFixture>
{
private readonly LanguageIdentifier languageIdentifier = new();
//public class EnglishLocalizationTests(MariaDbContainerFixture container) //: IClassFixture<MariaDbContainerFixture>
//{
// private readonly LanguageIdentifier languageIdentifier = new();
[Fact]
public async Task Insert_Then_Update()
{
await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync(
container.RootConnectionString,
seed: VoiceWorkIngestionSeedData.SeedAsync);
// [Fact]
// public async Task Insert_Then_Update()
// {
// await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync(
// container.RootConnectionString,
// seed: VoiceWorkIngestionSeedData.SeedAsync);
// Part 1 -- Insert
VoiceWorkIngest ingest = new()
{
MakerId = "RG00001",
MakerName = "Good Dreams",
ProductId = "RJ0000001",
Title = "Today Sounds (EN)",
Description = "An average product. (EN)"
};
// // Part 1 -- Insert
// VoiceWorkIngest ingest = new()
// {
// MakerId = "RG00001",
// MakerName = "Good Dreams",
// ProductId = "RJ0000001",
// Title = "Today Sounds (EN)",
// Description = "An average product. (EN)"
// };
EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier);
VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], CancellationToken.None);
// EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier);
// VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], CancellationToken.None);
VoiceWork voiceWork = await dbContext.VoiceWorks.SingleAsync(v => v.ProductId == "RJ0000001");
EnglishVoiceWork? englishVoiceWork = await dbContext.EnglishVoiceWorks.SingleOrDefaultAsync(e => e.VoiceWorkId == voiceWork.VoiceWorkId);
// VoiceWork voiceWork = await dbContext.VoiceWorks.SingleAsync(v => v.ProductId == "RJ0000001");
// EnglishVoiceWork? englishVoiceWork = await dbContext.EnglishVoiceWorks.SingleOrDefaultAsync(e => e.VoiceWorkId == voiceWork.VoiceWorkId);
englishVoiceWork.ShouldNotBeNull();
englishVoiceWork.ProductName.ShouldBe("Today Sounds (EN)");
englishVoiceWork.Description.ShouldBe("An average product. (EN)");
englishVoiceWork.IsValid?.ShouldBeTrue();
// englishVoiceWork.ShouldNotBeNull();
// englishVoiceWork.ProductName.ShouldBe("Today Sounds (EN)");
// englishVoiceWork.Description.ShouldBe("An average product. (EN)");
// englishVoiceWork.IsValid?.ShouldBeTrue();
results.Length.ShouldBe(1);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(1);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(0);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(0);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Unchanged).ShouldBe(0);
results.Sum(r => r.Issues.Count).ShouldBe(0);
// results.Length.ShouldBe(1);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(1);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(0);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(0);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Unchanged).ShouldBe(0);
// results.Sum(r => r.Issues.Count).ShouldBe(0);
// Part 2 -- Update
VoiceWorkIngest ingestUpdate = ingest with
{
Title = "Today Sounds (EN v2)",
Description = "Updated English description."
};
// // Part 2 -- Update
// VoiceWorkIngest ingestUpdate = ingest with
// {
// Title = "Today Sounds (EN v2)",
// Description = "Updated English description."
// };
VoiceWorkUpsertResult[] updatedResults = await updater.UpsertAsync([ingestUpdate], CancellationToken.None);
// VoiceWorkUpsertResult[] updatedResults = await updater.UpsertAsync([ingestUpdate], CancellationToken.None);
EnglishVoiceWork? updatedEnglishVoiceWork = await dbContext.EnglishVoiceWorks.SingleOrDefaultAsync(e => e.VoiceWorkId == voiceWork.VoiceWorkId);
updatedEnglishVoiceWork.ShouldNotBeNull();
updatedEnglishVoiceWork.ProductName.ShouldBe("Today Sounds (EN v2)");
updatedEnglishVoiceWork.Description.ShouldBe("Updated English description.");
updatedEnglishVoiceWork.IsValid?.ShouldBeTrue();
// EnglishVoiceWork? updatedEnglishVoiceWork = await dbContext.EnglishVoiceWorks.SingleOrDefaultAsync(e => e.VoiceWorkId == voiceWork.VoiceWorkId);
// updatedEnglishVoiceWork.ShouldNotBeNull();
// updatedEnglishVoiceWork.ProductName.ShouldBe("Today Sounds (EN v2)");
// updatedEnglishVoiceWork.Description.ShouldBe("Updated English description.");
// updatedEnglishVoiceWork.IsValid?.ShouldBeTrue();
updatedResults.Length.ShouldBe(1);
updatedResults.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(0);
updatedResults.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(1);
updatedResults.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(0);
updatedResults.Count(r => r.Status == VoiceWorkUpsertStatus.Unchanged).ShouldBe(0);
updatedResults.Sum(r => r.Issues.Count).ShouldBe(0);
// updatedResults.Length.ShouldBe(1);
// updatedResults.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(0);
// updatedResults.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(1);
// updatedResults.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(0);
// updatedResults.Count(r => r.Status == VoiceWorkUpsertStatus.Unchanged).ShouldBe(0);
// updatedResults.Sum(r => r.Issues.Count).ShouldBe(0);
// Part 3 -- Update Again (No Change)
VoiceWorkUpsertResult[] updatedAgainResults = await updater.UpsertAsync([ingestUpdate], CancellationToken.None);
// // Part 3 -- Update Again (No Change)
// VoiceWorkUpsertResult[] updatedAgainResults = await updater.UpsertAsync([ingestUpdate], CancellationToken.None);
EnglishVoiceWork? updatedAgainEnglishVoiceWork = await dbContext.EnglishVoiceWorks.SingleOrDefaultAsync(e => e.VoiceWorkId == voiceWork.VoiceWorkId);
updatedAgainEnglishVoiceWork.ShouldNotBeNull();
updatedAgainEnglishVoiceWork.ProductName.ShouldBe("Today Sounds (EN v2)");
updatedAgainEnglishVoiceWork.Description.ShouldBe("Updated English description.");
updatedAgainEnglishVoiceWork.IsValid?.ShouldBeTrue();
// EnglishVoiceWork? updatedAgainEnglishVoiceWork = await dbContext.EnglishVoiceWorks.SingleOrDefaultAsync(e => e.VoiceWorkId == voiceWork.VoiceWorkId);
// updatedAgainEnglishVoiceWork.ShouldNotBeNull();
// updatedAgainEnglishVoiceWork.ProductName.ShouldBe("Today Sounds (EN v2)");
// updatedAgainEnglishVoiceWork.Description.ShouldBe("Updated English description.");
// updatedAgainEnglishVoiceWork.IsValid?.ShouldBeTrue();
updatedAgainResults.Length.ShouldBe(1);
updatedAgainResults.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(0);
updatedAgainResults.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(0);
updatedAgainResults.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(0);
updatedAgainResults.Count(r => r.Status == VoiceWorkUpsertStatus.Unchanged).ShouldBe(1);
updatedAgainResults.Sum(r => r.Issues.Count).ShouldBe(0);
}
// updatedAgainResults.Length.ShouldBe(1);
// updatedAgainResults.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(0);
// updatedAgainResults.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(0);
// updatedAgainResults.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(0);
// updatedAgainResults.Count(r => r.Status == VoiceWorkUpsertStatus.Unchanged).ShouldBe(1);
// updatedAgainResults.Sum(r => r.Issues.Count).ShouldBe(0);
// }
[Fact]
public async Task Fail_Attempted_Insert_With_Missing_Circle()
{
await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync(
container.RootConnectionString,
seed: VoiceWorkIngestionSeedData.SeedAsync);
// [Fact]
// public async Task Fail_Attempted_Insert_With_Missing_Circle()
// {
// await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync(
// container.RootConnectionString,
// seed: VoiceWorkIngestionSeedData.SeedAsync);
VoiceWorkIngest ingest = new()
{
MakerId = "RG99999",
MakerName = "Missing Maker",
ProductId = "RJ9999999",
Title = "EN Title",
Description = "EN Desc"
};
// VoiceWorkIngest ingest = new()
// {
// MakerId = "RG99999",
// MakerName = "Missing Maker",
// ProductId = "RJ9999999",
// Title = "EN Title",
// Description = "EN Desc"
// };
EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier);
VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], CancellationToken.None);
// EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier);
// VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], CancellationToken.None);
int englishVoiceWorkCount = await dbContext.EnglishVoiceWorks.CountAsync(CancellationToken.None);
englishVoiceWorkCount.ShouldBe(0);
// int englishVoiceWorkCount = await dbContext.EnglishVoiceWorks.CountAsync(CancellationToken.None);
// englishVoiceWorkCount.ShouldBe(0);
results.Length.ShouldBe(1);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(0);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(0);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(1);
results.Sum(r => r.Issues.Count).ShouldBe(1);
// results.Length.ShouldBe(1);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(0);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(0);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(1);
// results.Sum(r => r.Issues.Count).ShouldBe(1);
VoiceWorkUpsertIssue issue = results[0].Issues.ElementAt(0);
issue.Severity.ShouldBe(VoiceWorkUpsertIssueSeverity.Error);
issue.Message.ShouldBe($"Unable to find circle for maker id: {ingest.MakerId}");
}
// VoiceWorkUpsertIssue issue = results[0].Issues.ElementAt(0);
// issue.Severity.ShouldBe(VoiceWorkUpsertIssueSeverity.Error);
// issue.Message.ShouldBe($"Unable to find circle for maker id: {ingest.MakerId}");
// }
[Fact]
public async Task Fail_Attempted_Insert_With_Missing_Product()
{
await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync(
container.RootConnectionString,
seed: VoiceWorkIngestionSeedData.SeedAsync);
// [Fact]
// public async Task Fail_Attempted_Insert_With_Missing_Product()
// {
// await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync(
// container.RootConnectionString,
// seed: VoiceWorkIngestionSeedData.SeedAsync);
VoiceWorkIngest ingest = new()
{
MakerId = "RG00001",
MakerName = "Good Dreams",
ProductId = "RJ9999999",
Title = "EN Title",
Description = "EN Desc"
};
// VoiceWorkIngest ingest = new()
// {
// MakerId = "RG00001",
// MakerName = "Good Dreams",
// ProductId = "RJ9999999",
// Title = "EN Title",
// Description = "EN Desc"
// };
EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier);
VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], CancellationToken.None);
// EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier);
// VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], CancellationToken.None);
int englishVoiceWorkCount = await dbContext.EnglishVoiceWorks.CountAsync(CancellationToken.None);
englishVoiceWorkCount.ShouldBe(0);
// int englishVoiceWorkCount = await dbContext.EnglishVoiceWorks.CountAsync(CancellationToken.None);
// englishVoiceWorkCount.ShouldBe(0);
results.Length.ShouldBe(1);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(0);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(0);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(1);
results.Sum(r => r.Issues.Count).ShouldBe(1);
// results.Length.ShouldBe(1);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(0);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(0);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(1);
// results.Sum(r => r.Issues.Count).ShouldBe(1);
VoiceWorkUpsertIssue issue = results[0].Issues.ElementAt(0);
issue.Severity.ShouldBe(VoiceWorkUpsertIssueSeverity.Error);
issue.Message.ShouldBe($"Unable to find voice work for product id: {ingest.ProductId}");
}
// VoiceWorkUpsertIssue issue = results[0].Issues.ElementAt(0);
// issue.Severity.ShouldBe(VoiceWorkUpsertIssueSeverity.Error);
// issue.Message.ShouldBe($"Unable to find voice work for product id: {ingest.ProductId}");
// }
[Fact]
public async Task Fail_Attempted_Insert_When_Not_English()
{
await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync(
container.RootConnectionString,
seed: VoiceWorkIngestionSeedData.SeedAsync);
// [Fact]
// public async Task Fail_Attempted_Insert_When_Not_English()
// {
// await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync(
// container.RootConnectionString,
// seed: VoiceWorkIngestionSeedData.SeedAsync);
VoiceWorkIngest ingest = new()
{
MakerId = "RG00001",
MakerName = "Good Dreams",
ProductId = "RJ0000001",
Title = "すごく快適なASMR",
Description = "最高の製品です!"
};
// VoiceWorkIngest ingest = new()
// {
// MakerId = "RG00001",
// MakerName = "Good Dreams",
// ProductId = "RJ0000001",
// Title = "すごく快適なASMR",
// Description = "最高の製品です!"
// };
EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier);
VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], CancellationToken.None);
// EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier);
// VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], CancellationToken.None);
int englishVoiceWorkCount = await dbContext.EnglishVoiceWorks.CountAsync(CancellationToken.None);
englishVoiceWorkCount.ShouldBe(0);
// int englishVoiceWorkCount = await dbContext.EnglishVoiceWorks.CountAsync(CancellationToken.None);
// englishVoiceWorkCount.ShouldBe(0);
results.Length.ShouldBe(1);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(0);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(0);
results.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(1);
results.Sum(r => r.Issues.Count).ShouldBe(1);
// results.Length.ShouldBe(1);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Inserted).ShouldBe(0);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Updated).ShouldBe(0);
// results.Count(r => r.Status == VoiceWorkUpsertStatus.Skipped).ShouldBe(1);
// results.Sum(r => r.Issues.Count).ShouldBe(1);
VoiceWorkUpsertIssue issue = results[0].Issues.ElementAt(0);
issue.Severity.ShouldBe(VoiceWorkUpsertIssueSeverity.Information);
issue.Message.ShouldBe("Product title and/or description is not in English");
}
}
// VoiceWorkUpsertIssue issue = results[0].Issues.ElementAt(0);
// issue.Severity.ShouldBe(VoiceWorkUpsertIssueSeverity.Information);
// issue.Message.ShouldBe("Product title and/or description is not in English");
// }
//}