From 2c7de7cdd939f40f9722b88f493d79d46af809a0 Mon Sep 17 00:00:00 2001 From: Brian Bicknell Date: Mon, 3 Nov 2025 19:03:24 -0500 Subject: [PATCH] Test code refactoring. Minor CI change. --- .gitea/workflows/ci.yml | 6 +++--- JSMR.Tests/Fixtures/MariaDbClone.cs | 7 +++++++ JSMR.Tests/Fixtures/MariaDbContainerFixture.cs | 1 - .../Ingestion/English/EnglishIngestionTestBase.cs | 9 +++++++++ ...ail_Attempted_Insert_When_Not_English_Tests.cs | 11 +++-------- ..._Attempted_Insert_With_Missing_Circle_Tests.cs | 11 +++-------- ...Attempted_Insert_With_Missing_Product_Tests.cs | 11 +++-------- .../English/English_Insert_Then_Update_Tests.cs | 11 +++-------- JSMR.Tests/Ingestion/IngestionTestsBase.cs | 15 +++++++++++++++ ...ail_Attempted_Insert_With_Spam_Circle_Tests.cs | 2 +- ...mpted_Update_With_Decreased_Downloads_Tests.cs | 2 +- ...mpted_Update_With_Sales_Date_Reversal_Tests.cs | 2 +- ...sert_New_Release_And_Scan_Again_Later_Tests.cs | 2 +- ...ew_Release_With_New_Tags_And_Creators_Tests.cs | 2 +- ...ert_New_Upcoming_And_Scan_Again_Later_Tests.cs | 2 +- .../Insert_New_Upcoming_Release_Same_Day_Tests.cs | 2 +- ...oming_With_Existing_Tags_And_Creators_Tests.cs | 2 +- ...TestsBase.cs => JapaneseIngestionTestsBase.cs} | 11 +---------- 18 files changed, 55 insertions(+), 54 deletions(-) create mode 100644 JSMR.Tests/Ingestion/English/EnglishIngestionTestBase.cs create mode 100644 JSMR.Tests/Ingestion/IngestionTestsBase.cs rename JSMR.Tests/Ingestion/Japanese/{IngestionTestsBase.cs => JapaneseIngestionTestsBase.cs} (77%) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 4779f66..529363a 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -11,10 +11,10 @@ jobs: image: ghcr.io/catthehacker/ubuntu:act-latest options: >- --privileged + --add-host=host.testcontainers.internal:host-gateway env: - TESTCONTAINERS_RYUK_DISABLED: 'true' - TESTCONTAINERS_CHECKS_DISABLE: 'true' - TESTCONTAINERS_HOST_OVERRIDE: host.docker.internal + # Testcontainers will substitute this host into GetConnectionString() + TESTCONTAINERS_HOST_OVERRIDE: host.testcontainers.internal steps: - uses: actions/checkout@v4 - uses: actions/setup-dotnet@v4 diff --git a/JSMR.Tests/Fixtures/MariaDbClone.cs b/JSMR.Tests/Fixtures/MariaDbClone.cs index 9423c69..0f7bc93 100644 --- a/JSMR.Tests/Fixtures/MariaDbClone.cs +++ b/JSMR.Tests/Fixtures/MariaDbClone.cs @@ -54,6 +54,13 @@ public static class MariaDbClone await ExecAsync(root, $"USE `{databaseName}`; {createTable};"); } + //await Parallel.ForEachAsync(tables, async (table, cancellationToken) => + //{ + // var createTable = await ShowCreateTableAsync(root, templateDbName, table); + // // Run DDL in the new DB (the CREATE statement itself doesn't include db name) + // await ExecAsync(root, $"USE `{databaseName}`; {createTable};"); + //}); + // 2) Copy data foreach (var table in tables) { diff --git a/JSMR.Tests/Fixtures/MariaDbContainerFixture.cs b/JSMR.Tests/Fixtures/MariaDbContainerFixture.cs index fd855a5..85eb3c8 100644 --- a/JSMR.Tests/Fixtures/MariaDbContainerFixture.cs +++ b/JSMR.Tests/Fixtures/MariaDbContainerFixture.cs @@ -1,6 +1,5 @@ using DotNet.Testcontainers.Builders; using JSMR.Tests.Fixtures; -using JSMR.Tests.Ingestion; using Testcontainers.MariaDb; [assembly: AssemblyFixture(typeof(MariaDbContainerFixture))] diff --git a/JSMR.Tests/Ingestion/English/EnglishIngestionTestBase.cs b/JSMR.Tests/Ingestion/English/EnglishIngestionTestBase.cs new file mode 100644 index 0000000..4526f6c --- /dev/null +++ b/JSMR.Tests/Ingestion/English/EnglishIngestionTestBase.cs @@ -0,0 +1,9 @@ +using JSMR.Infrastructure.Common.Languages; +using JSMR.Tests.Fixtures; + +namespace JSMR.Tests.Ingestion.English; + +public abstract class EnglishIngestionTestBase(MariaDbContainerFixture container) : IngestionTestsBase(container) +{ + protected static LanguageIdentifier LanguageIdentifier = new(); +} \ No newline at end of file diff --git a/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_When_Not_English_Tests.cs b/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_When_Not_English_Tests.cs index cc1cf77..60b709c 100644 --- a/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_When_Not_English_Tests.cs +++ b/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_When_Not_English_Tests.cs @@ -1,6 +1,5 @@ using JSMR.Application.Scanning.Contracts; using JSMR.Application.Scanning.Ports; -using JSMR.Infrastructure.Common.Languages; using JSMR.Infrastructure.Data; using JSMR.Infrastructure.Ingestion; using JSMR.Tests.Fixtures; @@ -9,16 +8,12 @@ using Shouldly; namespace JSMR.Tests.Ingestion.English; -public class English_Fail_Attempted_Insert_When_Not_English_Tests(MariaDbContainerFixture container) +public class English_Fail_Attempted_Insert_When_Not_English_Tests(MariaDbContainerFixture container) : EnglishIngestionTestBase(container) { - private readonly LanguageIdentifier languageIdentifier = new(); - [Fact] public async Task Fail_Attempted_Insert_When_Not_English() { - await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync( - container.RootConnectionString, - seed: VoiceWorkIngestionSeedData.SeedAsync); + await using AppDbContext dbContext = await GetAppDbContextAsync(); VoiceWorkIngest ingest = new() { @@ -29,7 +24,7 @@ public class English_Fail_Attempted_Insert_When_Not_English_Tests(MariaDbContain Description = "最高の製品です!" }; - EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier); + EnglishVoiceWorkUpdater updater = new(dbContext, LanguageIdentifier); VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], CancellationToken.None); int englishVoiceWorkCount = await dbContext.EnglishVoiceWorks.CountAsync(CancellationToken.None); diff --git a/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Circle_Tests.cs b/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Circle_Tests.cs index 432e65c..832e4cf 100644 --- a/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Circle_Tests.cs +++ b/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Circle_Tests.cs @@ -1,6 +1,5 @@ using JSMR.Application.Scanning.Contracts; using JSMR.Application.Scanning.Ports; -using JSMR.Infrastructure.Common.Languages; using JSMR.Infrastructure.Data; using JSMR.Infrastructure.Ingestion; using JSMR.Tests.Fixtures; @@ -9,16 +8,12 @@ using Shouldly; namespace JSMR.Tests.Ingestion.English; -public class English_Fail_Attempted_Insert_With_Missing_Circle_Tests(MariaDbContainerFixture container) //: IAssemblyFixture +public class English_Fail_Attempted_Insert_With_Missing_Circle_Tests(MariaDbContainerFixture container) : EnglishIngestionTestBase(container) { - private readonly LanguageIdentifier languageIdentifier = new(); - [Fact] public async Task Fail_Attempted_Insert_With_Missing_Circle() { - await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync( - container.RootConnectionString, - seed: VoiceWorkIngestionSeedData.SeedAsync); + await using AppDbContext dbContext = await GetAppDbContextAsync(); VoiceWorkIngest ingest = new() { @@ -29,7 +24,7 @@ public class English_Fail_Attempted_Insert_With_Missing_Circle_Tests(MariaDbCont Description = "EN Desc" }; - EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier); + EnglishVoiceWorkUpdater updater = new(dbContext, LanguageIdentifier); VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], CancellationToken.None); int englishVoiceWorkCount = await dbContext.EnglishVoiceWorks.CountAsync(CancellationToken.None); diff --git a/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Product_Tests.cs b/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Product_Tests.cs index e21e4ee..7290d89 100644 --- a/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Product_Tests.cs +++ b/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Product_Tests.cs @@ -1,6 +1,5 @@ using JSMR.Application.Scanning.Contracts; using JSMR.Application.Scanning.Ports; -using JSMR.Infrastructure.Common.Languages; using JSMR.Infrastructure.Data; using JSMR.Infrastructure.Ingestion; using JSMR.Tests.Fixtures; @@ -9,16 +8,12 @@ using Shouldly; namespace JSMR.Tests.Ingestion.English; -public class English_Fail_Attempted_Insert_With_Missing_Product_Tests(MariaDbContainerFixture container) +public class English_Fail_Attempted_Insert_With_Missing_Product_Tests(MariaDbContainerFixture container) : EnglishIngestionTestBase(container) { - private readonly LanguageIdentifier languageIdentifier = new(); - [Fact] public async Task Fail_Attempted_Insert_With_Missing_Product() { - await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync( - container.RootConnectionString, - seed: VoiceWorkIngestionSeedData.SeedAsync); + await using AppDbContext dbContext = await GetAppDbContextAsync(); VoiceWorkIngest ingest = new() { @@ -29,7 +24,7 @@ public class English_Fail_Attempted_Insert_With_Missing_Product_Tests(MariaDbCon Description = "EN Desc" }; - EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier); + EnglishVoiceWorkUpdater updater = new(dbContext, LanguageIdentifier); VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], CancellationToken.None); int englishVoiceWorkCount = await dbContext.EnglishVoiceWorks.CountAsync(CancellationToken.None); diff --git a/JSMR.Tests/Ingestion/English/English_Insert_Then_Update_Tests.cs b/JSMR.Tests/Ingestion/English/English_Insert_Then_Update_Tests.cs index 191794a..8b6f9aa 100644 --- a/JSMR.Tests/Ingestion/English/English_Insert_Then_Update_Tests.cs +++ b/JSMR.Tests/Ingestion/English/English_Insert_Then_Update_Tests.cs @@ -1,7 +1,6 @@ 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; @@ -10,16 +9,12 @@ using Shouldly; namespace JSMR.Tests.Ingestion.English; -public class English_Insert_Then_Update_Tests(MariaDbContainerFixture container) //: IAssemblyFixture +public class English_Insert_Then_Update_Tests(MariaDbContainerFixture container) : EnglishIngestionTestBase(container) { - private readonly LanguageIdentifier languageIdentifier = new(); - [Fact] public async Task Insert_Then_Update() { - await using AppDbContext dbContext = await MariaTestDb.CreateIsolatedAsync( - container.RootConnectionString, - seed: VoiceWorkIngestionSeedData.SeedAsync); + await using AppDbContext dbContext = await GetAppDbContextAsync(); // Part 1 -- Insert VoiceWorkIngest ingest = new() @@ -31,7 +26,7 @@ public class English_Insert_Then_Update_Tests(MariaDbContainerFixture container) Description = "An average product. (EN)" }; - EnglishVoiceWorkUpdater updater = new(dbContext, languageIdentifier); + EnglishVoiceWorkUpdater updater = new(dbContext, LanguageIdentifier); VoiceWorkUpsertResult[] results = await updater.UpsertAsync([ingest], TestContext.Current.CancellationToken); VoiceWork voiceWork = await dbContext.VoiceWorks.SingleAsync(v => v.ProductId == "RJ0000001", TestContext.Current.CancellationToken); diff --git a/JSMR.Tests/Ingestion/IngestionTestsBase.cs b/JSMR.Tests/Ingestion/IngestionTestsBase.cs new file mode 100644 index 0000000..f9153cd --- /dev/null +++ b/JSMR.Tests/Ingestion/IngestionTestsBase.cs @@ -0,0 +1,15 @@ +using JSMR.Infrastructure.Data; +using JSMR.Tests.Fixtures; + +namespace JSMR.Tests.Ingestion; + +public abstract class IngestionTestsBase(MariaDbContainerFixture container) +{ + protected async Task GetAppDbContextAsync() + { + return await MariaDbClone.CloneFromTemplateAsync( + container.RootConnectionString, + container.TemplateDbName, + seed: VoiceWorkIngestionSeedData.SeedAsync); + } +} \ No newline at end of file diff --git a/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Insert_With_Spam_Circle_Tests.cs b/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Insert_With_Spam_Circle_Tests.cs index 9d3e822..4fc6609 100644 --- a/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Insert_With_Spam_Circle_Tests.cs +++ b/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Insert_With_Spam_Circle_Tests.cs @@ -10,7 +10,7 @@ using Shouldly; namespace JSMR.Tests.Ingestion.Japanese; -public class Fail_Attempted_Insert_With_Spam_Circle_Tests(MariaDbContainerFixture container) : IngestionTestsBase(container) +public class Fail_Attempted_Insert_With_Spam_Circle_Tests(MariaDbContainerFixture container) : JapaneseIngestionTestsBase(container) { [Fact] public async Task Fail_Attempted_Insert_With_Spam_Circle() diff --git a/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Update_With_Decreased_Downloads_Tests.cs b/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Update_With_Decreased_Downloads_Tests.cs index c70d390..66178f4 100644 --- a/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Update_With_Decreased_Downloads_Tests.cs +++ b/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Update_With_Decreased_Downloads_Tests.cs @@ -10,7 +10,7 @@ using Shouldly; namespace JSMR.Tests.Ingestion.Japanese; -public class Fail_Attempted_Update_With_Decreased_Downloads_Tests(MariaDbContainerFixture container) : IngestionTestsBase(container) +public class Fail_Attempted_Update_With_Decreased_Downloads_Tests(MariaDbContainerFixture container) : JapaneseIngestionTestsBase(container) { [Fact] public async Task Fail_Attempted_Update_With_Decreased_Downloads() diff --git a/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Update_With_Sales_Date_Reversal_Tests.cs b/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Update_With_Sales_Date_Reversal_Tests.cs index 05ef31a..b713412 100644 --- a/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Update_With_Sales_Date_Reversal_Tests.cs +++ b/JSMR.Tests/Ingestion/Japanese/Fail_Attempted_Update_With_Sales_Date_Reversal_Tests.cs @@ -10,7 +10,7 @@ using Shouldly; namespace JSMR.Tests.Ingestion.Japanese; -public class Fail_Attempted_Update_With_Sales_Date_Reversal_Tests(MariaDbContainerFixture container) : IngestionTestsBase(container) +public class Fail_Attempted_Update_With_Sales_Date_Reversal_Tests(MariaDbContainerFixture container) : JapaneseIngestionTestsBase(container) { [Fact] public async Task Fail_Attempted_Update_With_Decreased_Downloads() diff --git a/JSMR.Tests/Ingestion/Japanese/Insert_New_Release_And_Scan_Again_Later_Tests.cs b/JSMR.Tests/Ingestion/Japanese/Insert_New_Release_And_Scan_Again_Later_Tests.cs index 4870ecc..cc1d690 100644 --- a/JSMR.Tests/Ingestion/Japanese/Insert_New_Release_And_Scan_Again_Later_Tests.cs +++ b/JSMR.Tests/Ingestion/Japanese/Insert_New_Release_And_Scan_Again_Later_Tests.cs @@ -9,7 +9,7 @@ using Shouldly; namespace JSMR.Tests.Ingestion.Japanese; -public class Insert_New_Release_And_Scan_Again_Later_Tests(MariaDbContainerFixture container) : IngestionTestsBase(container) +public class Insert_New_Release_And_Scan_Again_Later_Tests(MariaDbContainerFixture container) : JapaneseIngestionTestsBase(container) { [Fact] public async Task Insert_New_Release_And_Scan_Again_Later() diff --git a/JSMR.Tests/Ingestion/Japanese/Insert_New_Release_With_New_Tags_And_Creators_Tests.cs b/JSMR.Tests/Ingestion/Japanese/Insert_New_Release_With_New_Tags_And_Creators_Tests.cs index a2b90b9..8514870 100644 --- a/JSMR.Tests/Ingestion/Japanese/Insert_New_Release_With_New_Tags_And_Creators_Tests.cs +++ b/JSMR.Tests/Ingestion/Japanese/Insert_New_Release_With_New_Tags_And_Creators_Tests.cs @@ -10,7 +10,7 @@ using Shouldly; namespace JSMR.Tests.Ingestion.Japanese; -public class Insert_New_Release_With_New_Tags_And_Creators_Tests(MariaDbContainerFixture container) : IngestionTestsBase(container) +public class Insert_New_Release_With_New_Tags_And_Creators_Tests(MariaDbContainerFixture container) : JapaneseIngestionTestsBase(container) { [Fact] public async Task Insert_New_Release_With_New_Tags_And_Creators() diff --git a/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_And_Scan_Again_Later_Tests.cs b/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_And_Scan_Again_Later_Tests.cs index 44b3a71..80553e2 100644 --- a/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_And_Scan_Again_Later_Tests.cs +++ b/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_And_Scan_Again_Later_Tests.cs @@ -9,7 +9,7 @@ using Shouldly; namespace JSMR.Tests.Ingestion.Japanese; -public class Insert_New_Upcoming_And_Scan_Again_Later_Tests(MariaDbContainerFixture container) : IngestionTestsBase(container) +public class Insert_New_Upcoming_And_Scan_Again_Later_Tests(MariaDbContainerFixture container) : JapaneseIngestionTestsBase(container) { [Fact] public async Task Insert_New_Upcoming_And_Scan_Again_Later() diff --git a/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_Release_Same_Day_Tests.cs b/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_Release_Same_Day_Tests.cs index 9962069..e86929d 100644 --- a/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_Release_Same_Day_Tests.cs +++ b/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_Release_Same_Day_Tests.cs @@ -9,7 +9,7 @@ using Shouldly; namespace JSMR.Tests.Ingestion.Japanese; -public class Insert_New_Upcoming_Release_Same_Day_Tests(MariaDbContainerFixture container) : IngestionTestsBase(container) +public class Insert_New_Upcoming_Release_Same_Day_Tests(MariaDbContainerFixture container) : JapaneseIngestionTestsBase(container) { [Fact] public async Task Insert_New_Upcoming_Release_Same_Day() diff --git a/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_With_Existing_Tags_And_Creators_Tests.cs b/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_With_Existing_Tags_And_Creators_Tests.cs index 85690bc..50cef0b 100644 --- a/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_With_Existing_Tags_And_Creators_Tests.cs +++ b/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_With_Existing_Tags_And_Creators_Tests.cs @@ -10,7 +10,7 @@ using Shouldly; namespace JSMR.Tests.Ingestion.Japanese; -public class Insert_New_Upcoming_With_Existing_Tags_And_Creators_Tests(MariaDbContainerFixture container) : IngestionTestsBase(container) +public class Insert_New_Upcoming_With_Existing_Tags_And_Creators_Tests(MariaDbContainerFixture container) : JapaneseIngestionTestsBase(container) { [Fact] public async Task Insert_New_Upcoming_With_Existing_Tags_And_Creators() diff --git a/JSMR.Tests/Ingestion/Japanese/IngestionTestsBase.cs b/JSMR.Tests/Ingestion/Japanese/JapaneseIngestionTestsBase.cs similarity index 77% rename from JSMR.Tests/Ingestion/Japanese/IngestionTestsBase.cs rename to JSMR.Tests/Ingestion/Japanese/JapaneseIngestionTestsBase.cs index e7ddeb2..cfc7a37 100644 --- a/JSMR.Tests/Ingestion/Japanese/IngestionTestsBase.cs +++ b/JSMR.Tests/Ingestion/Japanese/JapaneseIngestionTestsBase.cs @@ -4,22 +4,13 @@ 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) +public abstract class JapaneseIngestionTestsBase(MariaDbContainerFixture container) : IngestionTestsBase(container) { - protected async Task GetAppDbContextAsync() - { - return await MariaDbClone.CloneFromTemplateAsync( - container.RootConnectionString, - container.TemplateDbName, - seed: VoiceWorkIngestionSeedData.SeedAsync); - } - protected static async Task UpsertAsync(AppDbContext dbContext, DateTime dateTime, VoiceWorkIngest[] ingests) { DateTime utcDateTime = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);