From 6d090390b0e892773577acb7d6b5828216c3560f Mon Sep 17 00:00:00 2001 From: Brian Bicknell Date: Tue, 28 Oct 2025 22:01:34 -0400 Subject: [PATCH] Updated integration testing for English and Japanese. Fixed minor voice work updater issue. Updated to XUnitV3. --- .../Ingestion/EnglishVoiceWorkUpdater.cs | 13 +- .../Ingestion/VoiceWorkUpdater.cs | 2 +- .../Scanning/ScannerUtilities.cs | 7 +- .../Scanning/VoiceWorksScanner.cs | 2 +- .../Fixtures/CircleSearchProviderFixture.cs | 36 ++ .../Fixtures/CreatorSearchProviderFixture.cs | 35 ++ JSMR.Tests/Fixtures/MariaDbFixture.cs | 94 +++--- .../Fixtures/TagSearchProviderFixture.cs | 4 +- .../VoiceWorkSearchProviderFixture.cs | 134 ++++++++ ...Attempted_Insert_When_Not_English_Tests.cs | 48 +++ ...empted_Insert_With_Missing_Circle_Tests.cs | 48 +++ ...mpted_Insert_With_Missing_Product_Tests.cs | 48 +++ .../English_Insert_Then_Update_Tests.cs | 90 +++++ .../Ingestion/EnglishLocalizationTests.cs | 312 +++++++++--------- .../Ingestion/Japanese/IngestionTestsBase.cs | 31 ++ ...elease_With_New_Tags_And_Creators_Tests.cs | 62 ++++ ...g_With_Existing_Tags_And_Creators_Tests.cs | 63 ++++ ...ert_Upcoming_And_Scan_Again_Later_Tests.cs | 49 +++ .../Ingestion/VoiceWorkIngestionTests.cs | 49 +-- .../Integration/CircleSearchProviderTests.cs | 35 +- .../Integration/CreatorSearchProviderTests.cs | 27 +- .../Integration/TagSearchProviderTests.cs | 27 +- .../VoiceWorkSearchProviderTests.cs | 152 +++++---- JSMR.Tests/JSMR.Tests.csproj | 4 +- 24 files changed, 1018 insertions(+), 354 deletions(-) create mode 100644 JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_When_Not_English_Tests.cs create mode 100644 JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Circle_Tests.cs create mode 100644 JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Product_Tests.cs create mode 100644 JSMR.Tests/Ingestion/English/English_Insert_Then_Update_Tests.cs create mode 100644 JSMR.Tests/Ingestion/Japanese/IngestionTestsBase.cs create mode 100644 JSMR.Tests/Ingestion/Japanese/Insert_New_Release_With_New_Tags_And_Creators_Tests.cs create mode 100644 JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_With_Existing_Tags_And_Creators_Tests.cs create mode 100644 JSMR.Tests/Ingestion/Japanese/Insert_Upcoming_And_Scan_Again_Later_Tests.cs diff --git a/JSMR.Infrastructure/Ingestion/EnglishVoiceWorkUpdater.cs b/JSMR.Infrastructure/Ingestion/EnglishVoiceWorkUpdater.cs index a917d6c..3a094f2 100644 --- a/JSMR.Infrastructure/Ingestion/EnglishVoiceWorkUpdater.cs +++ b/JSMR.Infrastructure/Ingestion/EnglishVoiceWorkUpdater.cs @@ -97,15 +97,12 @@ public class EnglishVoiceWorkUpdater(AppDbContext dbContext, ILanguageIdentifier englishVoiceWork.Description = ingest.Description; englishVoiceWork.IsValid = true; - switch (dbContext.Entry(englishVoiceWork).State) + return dbContext.Entry(englishVoiceWork).State switch { - case EntityState.Added: - return VoiceWorkUpsertStatus.Inserted; - case EntityState.Modified: - return VoiceWorkUpsertStatus.Updated; - default: - return VoiceWorkUpsertStatus.Unchanged; - } + EntityState.Added => VoiceWorkUpsertStatus.Inserted, + EntityState.Modified => VoiceWorkUpsertStatus.Updated, + _ => VoiceWorkUpsertStatus.Unchanged, + }; } private EnglishVoiceWork GetOrAddEnglishVoiceWork(VoiceWorkIngest ingest, EnglishVoiceWorkUpsertContext upsertContext) diff --git a/JSMR.Infrastructure/Ingestion/VoiceWorkUpdater.cs b/JSMR.Infrastructure/Ingestion/VoiceWorkUpdater.cs index 800c0db..6b95aab 100644 --- a/JSMR.Infrastructure/Ingestion/VoiceWorkUpdater.cs +++ b/JSMR.Infrastructure/Ingestion/VoiceWorkUpdater.cs @@ -105,7 +105,7 @@ public class VoiceWorkUpdater(AppDbContext dbContext, ITimeProvider timeProvider return; } - if (upsertContext.VoiceWorks.TryGetValue(ingest.MakerId, out VoiceWork? voiceWork) == false) + if (upsertContext.VoiceWorks.TryGetValue(ingest.ProductId, out VoiceWork? voiceWork) == false) return; int ingestDownloads = ingest.Downloads; diff --git a/JSMR.Infrastructure/Scanning/ScannerUtilities.cs b/JSMR.Infrastructure/Scanning/ScannerUtilities.cs index 93884bf..86eae57 100644 --- a/JSMR.Infrastructure/Scanning/ScannerUtilities.cs +++ b/JSMR.Infrastructure/Scanning/ScannerUtilities.cs @@ -7,13 +7,12 @@ public static class ScannerUtilities { public static List GetStringListFromNodes(HtmlNode[] nodes) { - return nodes + return [.. nodes .Where(node => string.IsNullOrEmpty(node.InnerHtml) == false) - .Select(node => HttpUtility.HtmlDecode(node.InnerHtml)) - .ToList(); + .Select(node => HttpUtility.HtmlDecode(node.InnerHtml))]; } - public static string GetDecodedText(HtmlNode node) + public static string GetDecodedText(HtmlNode? node) { if (node == null) return string.Empty; diff --git a/JSMR.Infrastructure/Scanning/VoiceWorksScanner.cs b/JSMR.Infrastructure/Scanning/VoiceWorksScanner.cs index e9125a4..bef7869 100644 --- a/JSMR.Infrastructure/Scanning/VoiceWorksScanner.cs +++ b/JSMR.Infrastructure/Scanning/VoiceWorksScanner.cs @@ -127,7 +127,7 @@ public abstract class VoiceWorksScanner(IHtmlLoader htmlLoader) : IVoiceWorksSca return AgeRating.R18; } - private static ScannedRating? GetScannedRating(HtmlNode starRatingNode) + private static ScannedRating? GetScannedRating(HtmlNode? starRatingNode) { if (starRatingNode == null) return null; diff --git a/JSMR.Tests/Fixtures/CircleSearchProviderFixture.cs b/JSMR.Tests/Fixtures/CircleSearchProviderFixture.cs index 100fe2a..a7c192f 100644 --- a/JSMR.Tests/Fixtures/CircleSearchProviderFixture.cs +++ b/JSMR.Tests/Fixtures/CircleSearchProviderFixture.cs @@ -25,4 +25,40 @@ public class CircleSearchProviderFixture : MariaDbFixture await context.SaveChangesAsync(); } +} + +public sealed class CircleSearchProviderFixture2(MariaDbContainerFixture container) : IAsyncLifetime +{ + public AppDbContext? DbContext { get; private set; } + + public async ValueTask InitializeAsync() + { + DbContext = await MariaTestDb.CreateIsolatedAsync( + container.RootConnectionString, + seed: SeedAsync); + } + + private static async Task SeedAsync(AppDbContext context) + { + // Make seeding idempotent (quick existence check) + if (await context.Circles.AnyAsync()) + return; + + context.Circles.AddRange( + new() { CircleId = 1, Name = "Good Dreams", MakerId = "RG00001" }, + new() { CircleId = 2, Name = "Sweet Dreams", Favorite = true, MakerId = "RG00002" }, + new() { CircleId = 3, Name = "Nightmare Fuel", Blacklisted = true, MakerId = "RG00003" }, + new() { CircleId = 4, Name = "Garbage Studio", Spam = true, MakerId = "RG00004" } + ); + + await context.SaveChangesAsync(); + } + + public async ValueTask DisposeAsync() + { + if (DbContext is not null) + { + await DbContext.DisposeAsync(); + } + } } \ No newline at end of file diff --git a/JSMR.Tests/Fixtures/CreatorSearchProviderFixture.cs b/JSMR.Tests/Fixtures/CreatorSearchProviderFixture.cs index 62985e7..9e9e7db 100644 --- a/JSMR.Tests/Fixtures/CreatorSearchProviderFixture.cs +++ b/JSMR.Tests/Fixtures/CreatorSearchProviderFixture.cs @@ -23,4 +23,39 @@ public class CreatorSearchProviderFixture : MariaDbFixture await context.SaveChangesAsync(); } +} + + +public sealed class CreatorSearchProviderFixture2(MariaDbContainerFixture container) : IAsyncLifetime +{ + public AppDbContext? DbContext { get; private set; } + + public async ValueTask InitializeAsync() + { + DbContext = await MariaTestDb.CreateIsolatedAsync( + container.RootConnectionString, + seed: SeedAsync); + } + + private static async Task SeedAsync(AppDbContext context) + { + if (await context.Tags.AnyAsync()) + return; + + context.Creators.AddRange( + new() { CreatorId = 1, Name = "John Smith" }, + new() { CreatorId = 2, Name = "John Doe", Favorite = true }, + new() { CreatorId = 3, Name = "Jane Doe", Blacklisted = true } + ); + + await context.SaveChangesAsync(); + } + + public async ValueTask DisposeAsync() + { + if (DbContext is not null) + { + await DbContext.DisposeAsync(); + } + } } \ No newline at end of file diff --git a/JSMR.Tests/Fixtures/MariaDbFixture.cs b/JSMR.Tests/Fixtures/MariaDbFixture.cs index 5c15807..9b2b218 100644 --- a/JSMR.Tests/Fixtures/MariaDbFixture.cs +++ b/JSMR.Tests/Fixtures/MariaDbFixture.cs @@ -1,14 +1,57 @@ using DotNet.Testcontainers.Builders; using DotNet.Testcontainers.Containers; using JSMR.Infrastructure.Data; +using JSMR.Tests.Fixtures; using Microsoft.EntityFrameworkCore; using MySqlConnector; using Testcontainers.MariaDb; using Testcontainers.Xunit; -using Xunit.Abstractions; +using Xunit.Sdk; + +[assembly: AssemblyFixture(typeof(MariaDbContainerFixture))] namespace JSMR.Tests.Fixtures; + +public sealed class MariaDbContainerFixture : IAsyncLifetime +{ + const int MajorVersion = 10; + const int MinorVersion = 11; + const int Build = 6; + + private IContainer _container = default!; + public string RootConnectionString { get; private set; } = default!; + + public async ValueTask InitializeAsync() + { + //_container = new ContainerBuilder() + // .WithImage("mariadb:11") + // .WithEnvironment("MARIADB_ROOT_PASSWORD", "rootpw") + // .WithPortBinding(3307, 3306) + // .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(3306)) + // .Build(); + + _container = new ContainerBuilder() + .WithImage($"mariadb:{MajorVersion}.{MinorVersion}.{Build}") + .WithEnvironment("MARIADB_ROOT_PASSWORD", "rootpw") + .WithPortBinding(3307, 3306) + //.WithPortBinding(3306, assignRandomHostPort: true) + .WithWaitStrategy(Wait.ForUnixContainer().UntilInternalTcpPortIsAvailable(3306)) + .Build(); + + await _container.StartAsync(); + + // No database specified: we’ll create per-test DBs + //RootConnectionString = "Server=127.0.0.1;Port=3307;User=root;Password=rootpw;SslMode=none;"; + + //RootConnectionString = _container.GetConnectionString(); + var port = _container.GetMappedPublicPort(3306); + RootConnectionString = $"Server=127.0.0.1;Port={port};User=root;Password=rootpw;SslMode=none;"; + } + + public async ValueTask DisposeAsync() => await _container.DisposeAsync(); +} + public class MariaDbFixture : IAsyncLifetime { const int MajorVersion = 10; @@ -19,7 +62,7 @@ public class MariaDbFixture : IAsyncLifetime public string ConnectionString { get; private set; } = default!; - public async Task InitializeAsync() + public async ValueTask InitializeAsync() { MariaDbContainer = new MariaDbBuilder() .WithImage($"mariadb:{MajorVersion}.{MinorVersion}.{Build}") @@ -40,13 +83,15 @@ public class MariaDbFixture : IAsyncLifetime return Task.FromResult(Task.CompletedTask); } - public async Task DisposeAsync() + public async ValueTask DisposeAsync() { if (MariaDbContainer is not null) { await MariaDbContainer.StopAsync(); await MariaDbContainer.DisposeAsync(); } + + GC.SuppressFinalize(this); } public AppDbContext CreateDbContext() @@ -74,6 +119,9 @@ public class MariaDbFixture : IAsyncLifetime [CollectionDefinition("db")] public sealed class MariaDbCollection : ICollectionFixture { } +//public class MariaDbAssemblyFixtureDefinition : IAssemblyFixture { } + + //[UsedImplicitly] public sealed class MariaDbContainerFixture2(IMessageSink messageSink) : ContainerFixture(messageSink) @@ -94,46 +142,6 @@ public sealed class MariaDbContainerFixture2(IMessageSink messageSink) } } - -public sealed class MariaDbContainerFixture : IAsyncLifetime -{ - const int MajorVersion = 10; - const int MinorVersion = 11; - const int Build = 6; - - private IContainer _container = default!; - public string RootConnectionString { get; private set; } = default!; - - public async Task InitializeAsync() - { - //_container = new ContainerBuilder() - // .WithImage("mariadb:11") - // .WithEnvironment("MARIADB_ROOT_PASSWORD", "rootpw") - // .WithPortBinding(3307, 3306) - // .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(3306)) - // .Build(); - - _container = new ContainerBuilder() - .WithImage($"mariadb:{MajorVersion}.{MinorVersion}.{Build}") - .WithEnvironment("MARIADB_ROOT_PASSWORD", "rootpw") - .WithPortBinding(3307, 3306) - //.WithPortBinding(3306, assignRandomHostPort: true) - .WithWaitStrategy(Wait.ForUnixContainer().UntilInternalTcpPortIsAvailable(3306)) - .Build(); - - await _container.StartAsync(); - - // No database specified: we’ll create per-test DBs - //RootConnectionString = "Server=127.0.0.1;Port=3307;User=root;Password=rootpw;SslMode=none;"; - - //RootConnectionString = _container.GetConnectionString(); - var port = _container.GetMappedPublicPort(3306); - RootConnectionString = $"Server=127.0.0.1;Port={port};User=root;Password=rootpw;SslMode=none;"; - } - - public async Task DisposeAsync() => await _container.DisposeAsync(); -} - public static class MariaTestDb { public static async Task CreateIsolatedAsync(string rootConnectionString, Func? seed = null) diff --git a/JSMR.Tests/Fixtures/TagSearchProviderFixture.cs b/JSMR.Tests/Fixtures/TagSearchProviderFixture.cs index 00b2ed2..7d8eed9 100644 --- a/JSMR.Tests/Fixtures/TagSearchProviderFixture.cs +++ b/JSMR.Tests/Fixtures/TagSearchProviderFixture.cs @@ -38,7 +38,7 @@ public sealed class TagSearchProviderFixture2(MariaDbContainerFixture container) { public AppDbContext? DbContext { get; private set; } - public async Task InitializeAsync() + public async ValueTask InitializeAsync() { DbContext = await MariaTestDb.CreateIsolatedAsync( container.RootConnectionString, @@ -65,7 +65,7 @@ public sealed class TagSearchProviderFixture2(MariaDbContainerFixture container) await context.SaveChangesAsync(); } - public async Task DisposeAsync() + public async ValueTask DisposeAsync() { if (DbContext is not null) { diff --git a/JSMR.Tests/Fixtures/VoiceWorkSearchProviderFixture.cs b/JSMR.Tests/Fixtures/VoiceWorkSearchProviderFixture.cs index 8b8ab3d..715bf37 100644 --- a/JSMR.Tests/Fixtures/VoiceWorkSearchProviderFixture.cs +++ b/JSMR.Tests/Fixtures/VoiceWorkSearchProviderFixture.cs @@ -124,4 +124,138 @@ public class VoiceWorkSearchProviderFixture : MariaDbFixture await context.SaveChangesAsync(); } +} + +public sealed class VoiceWorkSearchProviderFixture2(MariaDbContainerFixture container) : IAsyncLifetime +{ + public AppDbContext? DbContext { get; private set; } + + public async ValueTask InitializeAsync() + { + DbContext = await MariaTestDb.CreateIsolatedAsync( + container.RootConnectionString, + seed: SeedAsync); + } + + private static async Task SeedAsync(AppDbContext context) + { + if (await context.VoiceWorks.AnyAsync()) + return; + + context.Circles.AddRange( + new() { CircleId = 1, Name = "Good Dreams", MakerId = "RG00001" }, + new() { CircleId = 2, Name = "Sweet Dreams", Favorite = true, MakerId = "RG00002" }, + new() { CircleId = 3, Name = "Nightmare Fuel", Blacklisted = true, MakerId = "RG00003" } + ); + + context.VoiceWorks.AddRange( + new() { VoiceWorkId = 1, CircleId = 1, ProductId = "RJ0000001", ProductName = "Today Sounds", Description = "An average product.", Status = (byte)VoiceWorkStatus.Available, SalesDate = new(2025, 1, 1), Downloads = 500, WishlistCount = 750, StarRating = 35 }, + new() { VoiceWorkId = 2, CircleId = 2, ProductId = "RJ0000002", ProductName = "Super Comfy ASMR", Description = "An amazing product!", Status = (byte)VoiceWorkStatus.NewRelease, SalesDate = new(2025, 1, 3), Downloads = 5000, WishlistCount = 12000, StarRating = 50, Favorite = true }, + new() { VoiceWorkId = 3, CircleId = 3, ProductId = "RJ0000003", ProductName = "Low Effort", Description = "A bad product.", Status = (byte)VoiceWorkStatus.Available, SalesDate = new(2025, 1, 2), Downloads = 50, WishlistCount = 100, StarRating = 20 }, + new() { VoiceWorkId = 4, CircleId = 1, ProductId = "RJ0000004", ProductName = "Tomorrow Sounds", Description = "A average upcoming product.", Status = (byte)VoiceWorkStatus.Upcoming, ExpectedDate = new(2025, 1, 1), WishlistCount = 300 }, + new() { VoiceWorkId = 5, CircleId = 2, ProductId = "RJ0000005", ProductName = "Super Comfy ASMR+", Description = "All your favorite sounds, plus more!", Status = (byte)VoiceWorkStatus.NewAndUpcoming, ExpectedDate = new(2025, 1, 11), WishlistCount = 10000 } + ); + + context.Tags.AddRange( + new() { TagId = 1, Name = "ASMR" }, + new() { TagId = 2, Name = "OL" }, + new() { TagId = 3, Name = "ほのぼの" }, + new() { TagId = 4, Name = "エルフ/妖精" }, + new() { TagId = 5, Name = "ツンデレ", Favorite = true }, + new() { TagId = 6, Name = "オールハッピー" }, + new() { TagId = 7, Name = "ギャル" }, + new() { TagId = 8, Name = "メイド" }, + new() { TagId = 9, Name = "ノンフィクション/体験談", Blacklisted = true } + ); + + context.EnglishTags.AddRange( + new() { EnglishTagId = 1, TagId = 1, Name = "ASMR" }, + new() { EnglishTagId = 2, TagId = 2, Name = "Office Lady" }, + new() { EnglishTagId = 3, TagId = 3, Name = "Heartwarming" }, + new() { EnglishTagId = 4, TagId = 4, Name = "Elf / Fairy" }, + new() { EnglishTagId = 5, TagId = 5, Name = "Tsundere" }, + new() { EnglishTagId = 6, TagId = 6, Name = "All Happy" }, + new() { EnglishTagId = 7, TagId = 7, Name = "Gal" }, + new() { EnglishTagId = 8, TagId = 8, Name = "Maid" }, + new() { EnglishTagId = 9, TagId = 9, Name = "Non-Fiction / Narrative" } + ); + + context.VoiceWorkTags.AddRange( + new() { VoiceWorkId = 1, TagId = 1 }, // ASMR + new() { VoiceWorkId = 1, TagId = 2 }, // Office Lady + + new() { VoiceWorkId = 2, TagId = 1 }, // ASMR + new() { VoiceWorkId = 2, TagId = 3 }, // Heartwarming + new() { VoiceWorkId = 2, TagId = 4 }, // Elf / Fairy + new() { VoiceWorkId = 2, TagId = 5 }, // Tsundere + new() { VoiceWorkId = 2, TagId = 6 }, // All Happy + new() { VoiceWorkId = 2, TagId = 7 }, // Gal + new() { VoiceWorkId = 2, TagId = 8 }, // Maid + + new() { VoiceWorkId = 3, TagId = 5 }, // Tsundere + new() { VoiceWorkId = 3, TagId = 9 } // Non-Fiction / Narrative + //new() { VoiceWorkId = 3, TagId = 1 }, + //new() { VoiceWorkId = 3, TagId = 1 }, + //new() { VoiceWorkId = 3, TagId = 1 }, + //new() { VoiceWorkId = 3, TagId = 1 }, + //new() { VoiceWorkId = 3, TagId = 1 }, + + //new() { VoiceWorkId = 4, TagId = 1 }, + //new() { VoiceWorkId = 4, TagId = 1 }, + //new() { VoiceWorkId = 4, TagId = 1 }, + //new() { VoiceWorkId = 4, TagId = 1 }, + //new() { VoiceWorkId = 4, TagId = 1 }, + //new() { VoiceWorkId = 4, TagId = 1 }, + //new() { VoiceWorkId = 4, TagId = 1 }, + + //new() { VoiceWorkId = 5, TagId = 5 } // Tsundere + //new() { VoiceWorkId = 5, TagId = 1 }, + //new() { VoiceWorkId = 5, TagId = 1 }, + //new() { VoiceWorkId = 5, TagId = 1 }, + //new() { VoiceWorkId = 5, TagId = 1 }, + //new() { VoiceWorkId = 5, TagId = 1 }, + //new() { VoiceWorkId = 5, TagId = 1 } + ); + + context.Creators.AddRange( + new() { CreatorId = 1, Name = "陽向葵ゅか", Favorite = true }, + new() { CreatorId = 2, Name = "秋野かえで" }, + new() { CreatorId = 3, Name = "柚木つばめ" }, + new() { CreatorId = 4, Name = "逢坂成美" }, + new() { CreatorId = 5, Name = "山田じぇみ子", Blacklisted = true } + ); + + context.VoiceWorkCreators.AddRange( + new() { VoiceWorkId = 1, CreatorId = 2 }, // 秋野かえで + + new() { VoiceWorkId = 2, CreatorId = 1 }, // 陽向葵ゅか + + new() { VoiceWorkId = 3, CreatorId = 5 }, // 山田じぇみ子 + new() { VoiceWorkId = 3, CreatorId = 1 }, // 陽向葵ゅか + + new() { VoiceWorkId = 4, CreatorId = 3 }, // 柚木つばめ + + new() { VoiceWorkId = 5, CreatorId = 1 }, // 陽向葵ゅか + new() { VoiceWorkId = 5, CreatorId = 4 } // 逢坂成美 + ); + + // + context.VoiceWorkSearches.AddRange( + new() { VoiceWorkId = 1, SearchText = "RJ0000001 RG00001 Good Dreams Today Sounds An average product. ASMR Office Lady" }, + new() { VoiceWorkId = 2, SearchText = "RJ0000002 RG00002 Sweet Dreams Super Comfy ASMR An amazing product! ASMR Heartwarming Elf / Fairy Tsundere All Happy Gal Maid" }, + new() { VoiceWorkId = 3, SearchText = "RJ0000003 RG00003 Nightmare Fuel Low Effort A bad product." }, + new() { VoiceWorkId = 4, SearchText = "RJ0000004 RG00001 Good Dreams Tomorrow Sounds A average upcoming product." }, + new() { VoiceWorkId = 5, SearchText = "RJ0000005 RG00002 Sweet Dreams Super Comfy ASMR+ All your favorite sounds, plus more!" } + ); + + await context.SaveChangesAsync(); + } + + public async ValueTask DisposeAsync() + { + if (DbContext is not null) + { + await DbContext.DisposeAsync(); + } + } } \ 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 new file mode 100644 index 0000000..cc1cf77 --- /dev/null +++ b/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_When_Not_English_Tests.cs @@ -0,0 +1,48 @@ +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; +using Microsoft.EntityFrameworkCore; +using Shouldly; + +namespace JSMR.Tests.Ingestion.English; + +public class English_Fail_Attempted_Insert_When_Not_English_Tests(MariaDbContainerFixture 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); + + 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); + + 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); + + VoiceWorkUpsertIssue issue = results[0].Issues.ElementAt(0); + issue.Severity.ShouldBe(VoiceWorkUpsertIssueSeverity.Information); + issue.Message.ShouldBe("Product title and/or description is not in English"); + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..432e65c --- /dev/null +++ b/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Circle_Tests.cs @@ -0,0 +1,48 @@ +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; +using Microsoft.EntityFrameworkCore; +using Shouldly; + +namespace JSMR.Tests.Ingestion.English; + +public class English_Fail_Attempted_Insert_With_Missing_Circle_Tests(MariaDbContainerFixture container) //: IAssemblyFixture +{ + 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); + + 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); + + 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); + + VoiceWorkUpsertIssue issue = results[0].Issues.ElementAt(0); + issue.Severity.ShouldBe(VoiceWorkUpsertIssueSeverity.Error); + issue.Message.ShouldBe($"Unable to find circle for maker id: {ingest.MakerId}"); + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..e21e4ee --- /dev/null +++ b/JSMR.Tests/Ingestion/English/English_Fail_Attempted_Insert_With_Missing_Product_Tests.cs @@ -0,0 +1,48 @@ +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; +using Microsoft.EntityFrameworkCore; +using Shouldly; + +namespace JSMR.Tests.Ingestion.English; + +public class English_Fail_Attempted_Insert_With_Missing_Product_Tests(MariaDbContainerFixture 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); + + 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); + + 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); + + 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}"); + } +} \ No newline at end of file diff --git a/JSMR.Tests/Ingestion/English/English_Insert_Then_Update_Tests.cs b/JSMR.Tests/Ingestion/English/English_Insert_Then_Update_Tests.cs new file mode 100644 index 0000000..191794a --- /dev/null +++ b/JSMR.Tests/Ingestion/English/English_Insert_Then_Update_Tests.cs @@ -0,0 +1,90 @@ +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.English; + +public class English_Insert_Then_Update_Tests(MariaDbContainerFixture container) //: IAssemblyFixture +{ + private readonly LanguageIdentifier languageIdentifier = new(); + + [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)" + }; + + 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); + EnglishVoiceWork? englishVoiceWork = await dbContext.EnglishVoiceWorks.SingleOrDefaultAsync(e => e.VoiceWorkId == voiceWork.VoiceWorkId, TestContext.Current.CancellationToken); + + 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); + + // Part 2 -- Update + VoiceWorkIngest ingestUpdate = ingest with + { + Title = "Today Sounds (EN v2)", + Description = "Updated English description." + }; + + VoiceWorkUpsertResult[] updatedResults = await updater.UpsertAsync([ingestUpdate], CancellationToken.None); + + EnglishVoiceWork? updatedEnglishVoiceWork = await dbContext.EnglishVoiceWorks.SingleOrDefaultAsync(e => e.VoiceWorkId == voiceWork.VoiceWorkId, TestContext.Current.CancellationToken); + 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); + + // 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, TestContext.Current.CancellationToken); + 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); + } +} \ No newline at end of file diff --git a/JSMR.Tests/Ingestion/EnglishLocalizationTests.cs b/JSMR.Tests/Ingestion/EnglishLocalizationTests.cs index 1008cce..d1b91a1 100644 --- a/JSMR.Tests/Ingestion/EnglishLocalizationTests.cs +++ b/JSMR.Tests/Ingestion/EnglishLocalizationTests.cs @@ -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 -{ - private readonly LanguageIdentifier languageIdentifier = new(); +//public class EnglishLocalizationTests(MariaDbContainerFixture container) //: IClassFixture +//{ +// 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"); - } -} \ No newline at end of file +// VoiceWorkUpsertIssue issue = results[0].Issues.ElementAt(0); +// issue.Severity.ShouldBe(VoiceWorkUpsertIssueSeverity.Information); +// issue.Message.ShouldBe("Product title and/or description is not in English"); +// } +//} \ No newline at end of file diff --git a/JSMR.Tests/Ingestion/Japanese/IngestionTestsBase.cs b/JSMR.Tests/Ingestion/Japanese/IngestionTestsBase.cs new file mode 100644 index 0000000..6fd8321 --- /dev/null +++ b/JSMR.Tests/Ingestion/Japanese/IngestionTestsBase.cs @@ -0,0 +1,31 @@ +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 NSubstitute; + +namespace JSMR.Tests.Ingestion.Japanese; + +public abstract class IngestionTestsBase(MariaDbContainerFixture container) +{ + protected async Task GetAppDbContextAsync() + { + return await MariaTestDb.CreateIsolatedAsync( + container.RootConnectionString, + seed: VoiceWorkIngestionSeedData.SeedAsync); + } + + protected static async Task UpsertAsync(AppDbContext dbContext, DateTime dateTime, VoiceWorkIngest[] ingests) + { + IClock clock = Substitute.For(); + clock.UtcNow.Returns(new DateTimeOffset(dateTime)); + + TokyoTimeProvider timeProvider = new(clock); + + VoiceWorkUpdater updater = new(dbContext, timeProvider); + + return await updater.UpsertAsync(ingests, TestContext.Current.CancellationToken); + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..76c9e9c --- /dev/null +++ b/JSMR.Tests/Ingestion/Japanese/Insert_New_Release_With_New_Tags_And_Creators_Tests.cs @@ -0,0 +1,62 @@ +using JSMR.Application.Common; +using JSMR.Application.Scanning.Contracts; +using JSMR.Application.Scanning.Ports; +using JSMR.Domain.Entities; +using JSMR.Infrastructure.Common.SupportedLanguages; +using JSMR.Infrastructure.Data; +using JSMR.Tests.Fixtures; +using Microsoft.EntityFrameworkCore; +using Shouldly; + +namespace JSMR.Tests.Ingestion.Japanese; + +public class Insert_New_Release_With_New_Tags_And_Creators_Tests(MariaDbContainerFixture container) : IngestionTestsBase(container) +{ + [Fact] + public async Task Insert_New_Release_With_New_Tags_And_Creators() + { + await using AppDbContext dbContext = await GetAppDbContextAsync(); + + VoiceWorkIngest ingest = new() + { + MakerId = "RG10001", + MakerName = "New Dreams", + ProductId = "RJ2000001", + Title = "Day One Release", + Description = "Releasing now.", + Tags = ["アイドル", "メガネ"], + Creators = ["かの仔"], + WishlistCount = 50, + Downloads = 10, + HasTrial = false, + HasDLPlay = false, + StarRating = null, + Votes = null, + AgeRating = AgeRating.AllAges, + HasImage = true, + SupportedLanguages = [new JapaneseLanguage()], + SalesDate = new DateOnly(2025, 1, 15), + ExpectedDate = null + }; + + VoiceWorkUpsertResult[] results = await UpsertAsync(dbContext, new DateTime(2025, 01, 15, 9, 0, 0), [ingest]); + + VoiceWork? voiceWork = await dbContext.VoiceWorks.SingleAsync(v => v.ProductId == "RJ2000001", TestContext.Current.CancellationToken); + voiceWork.ShouldNotBeNull(); + voiceWork.ProductName.ShouldBe("Day One Release"); + voiceWork.Description.ShouldBe("Releasing now."); + voiceWork.SalesDate.ShouldNotBeNull(); + voiceWork.ExpectedDate.ShouldBeNull(); + voiceWork.Status.ShouldBe((byte)VoiceWorkStatus.NewRelease); + + voiceWork.Circle.ShouldNotBeNull(); + voiceWork.Circle.MakerId.ShouldBe("RG10001"); + voiceWork.Circle.Name.ShouldBe("New Dreams"); + + voiceWork.Tags.OrderBy(t => t.Position).Select(vwt => vwt.Tag?.Name).ToArray() + .ShouldBe(["アイドル", "メガネ"]); + + voiceWork.Creators.OrderBy(c => c.Position).Select(vwc => vwc.Creator?.Name).ToArray() + .ShouldBe(["かの仔"]); + } +} \ No newline at end of file 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 new file mode 100644 index 0000000..7f8b206 --- /dev/null +++ b/JSMR.Tests/Ingestion/Japanese/Insert_New_Upcoming_With_Existing_Tags_And_Creators_Tests.cs @@ -0,0 +1,63 @@ +using JSMR.Application.Common; +using JSMR.Application.Scanning.Contracts; +using JSMR.Application.Scanning.Ports; +using JSMR.Domain.Entities; +using JSMR.Infrastructure.Common.SupportedLanguages; +using JSMR.Infrastructure.Data; +using JSMR.Tests.Fixtures; +using Microsoft.EntityFrameworkCore; +using Shouldly; + +namespace JSMR.Tests.Ingestion.Japanese; + +public class Insert_New_Upcoming_With_Existing_Tags_And_Creators_Tests(MariaDbContainerFixture container) : IngestionTestsBase(container) +{ + [Fact] + public async Task Insert_New_Upcoming_With_Existing_Tags_And_Creators() + { + VoiceWorkIngest[] insertNewUpcomingIngests = + [ + new() + { + MakerId = "RG00001", + MakerName = "Good Dreams", + ProductId = "RJ1000001", + Title = "Brand New Preview", + Description = "Teaser only.", + Tags = ["ASMR", "メイド" ], + Creators = ["秋野かえで"], + WishlistCount = 250, + Downloads = 0, + HasTrial = false, + HasDLPlay = false, + StarRating = null, + Votes = null, + AgeRating = AgeRating.R15, + HasImage = true, + SupportedLanguages = [new JapaneseLanguage()], + SalesDate = null, + ExpectedDate = new DateOnly(2025, 1, 20), + RegistrationDate = null + } + ]; + + await using AppDbContext dbContext = await GetAppDbContextAsync(); + DateTime currentDateTime = new(2025, 01, 05, 10, 0, 0); + + VoiceWorkUpsertResult[] results = await UpsertAsync(dbContext, currentDateTime, insertNewUpcomingIngests); + + VoiceWork? voiceWork = await dbContext.VoiceWorks.SingleAsync(v => v.ProductId == "RJ1000001", TestContext.Current.CancellationToken); + voiceWork.ShouldNotBeNull(); + voiceWork.ProductName.ShouldBe("Brand New Preview"); + voiceWork.Description.ShouldBe("Teaser only."); + voiceWork.SalesDate.ShouldBeNull(); + voiceWork.ExpectedDate.ShouldNotBeNull(); + voiceWork.Status.ShouldBe((byte)VoiceWorkStatus.NewAndUpcoming); + + voiceWork.Tags.OrderBy(t => t.Position).Select(vwt => vwt.Tag?.Name).ToArray() + .ShouldBe(["ASMR", "メイド"]); + + voiceWork.Creators.OrderBy(c => c.Position).Select(vwc => vwc.Creator?.Name).ToArray() + .ShouldBe(["秋野かえで"]); + } +} \ No newline at end of file diff --git a/JSMR.Tests/Ingestion/Japanese/Insert_Upcoming_And_Scan_Again_Later_Tests.cs b/JSMR.Tests/Ingestion/Japanese/Insert_Upcoming_And_Scan_Again_Later_Tests.cs new file mode 100644 index 0000000..6e074be --- /dev/null +++ b/JSMR.Tests/Ingestion/Japanese/Insert_Upcoming_And_Scan_Again_Later_Tests.cs @@ -0,0 +1,49 @@ +using JSMR.Application.Common; +using JSMR.Application.Scanning.Contracts; +using JSMR.Domain.Entities; +using JSMR.Infrastructure.Common.SupportedLanguages; +using JSMR.Infrastructure.Data; +using JSMR.Tests.Fixtures; +using Microsoft.EntityFrameworkCore; +using Shouldly; + +namespace JSMR.Tests.Ingestion.Japanese; + +public class Insert_Upcoming_And_Scan_Again_Later_Tests(MariaDbContainerFixture container) : IngestionTestsBase(container) +{ + [Fact] + public async Task Insert_Upcoming_And_Scan_Again_Later() + { + await using AppDbContext dbContext = await GetAppDbContextAsync(); + + VoiceWorkIngest ingest = new() + { + MakerId = "RG00001", + MakerName = "Good Dreams", + ProductId = "RJ1000002", + Title = "Preview Only", + Description = "Still upcoming.", + Tags = Array.Empty(), + Creators = Array.Empty(), + WishlistCount = 100, + Downloads = 0, + HasTrial = false, + HasDLPlay = false, + AgeRating = AgeRating.AllAges, + HasImage = false, + SupportedLanguages = [new JapaneseLanguage()], + SalesDate = null, + ExpectedDate = new DateOnly(2025, 2, 1) + }; + + await UpsertAsync(dbContext, new DateTime(2025, 01, 10, 1, 0, 0), [ingest]); + + VoiceWork? voiceWork = await dbContext.VoiceWorks.SingleAsync(v => v.ProductId == "RJ1000002", TestContext.Current.CancellationToken); + voiceWork.Status.ShouldBe((byte)VoiceWorkStatus.NewAndUpcoming); + + await UpsertAsync(dbContext, new DateTime(2025, 01, 12, 10, 0, 0), [ingest]); + + VoiceWork? updatedVoiceWork = await dbContext.VoiceWorks.SingleAsync(v => v.ProductId == "RJ1000002", TestContext.Current.CancellationToken); + updatedVoiceWork.Status.ShouldBe((byte)VoiceWorkStatus.Upcoming); + } +} \ No newline at end of file diff --git a/JSMR.Tests/Ingestion/VoiceWorkIngestionTests.cs b/JSMR.Tests/Ingestion/VoiceWorkIngestionTests.cs index b020d36..ce28af6 100644 --- a/JSMR.Tests/Ingestion/VoiceWorkIngestionTests.cs +++ b/JSMR.Tests/Ingestion/VoiceWorkIngestionTests.cs @@ -1,49 +1,22 @@ -using JSMR.Application.Scanning.Contracts; +using JSMR.Application.Common; +using JSMR.Application.Scanning.Contracts; +using JSMR.Application.Scanning.Ports; +using JSMR.Domain.Entities; +using JSMR.Infrastructure.Common.SupportedLanguages; using JSMR.Infrastructure.Common.Time; using JSMR.Infrastructure.Data; using JSMR.Infrastructure.Ingestion; +using JSMR.Tests.Fixtures; +using JSMR.Tests.Ingestion.Japanese; +using Microsoft.EntityFrameworkCore; using NSubstitute; using Shouldly; namespace JSMR.Tests.Ingestion; -//public class VoiceWorkIngestionTests(VoiceWorkIngestionFixture fixture) -//{ -// [Fact] -// public async Task Simple_Upsert() -// { -// await using AppDbContext context = fixture.CreateDbContext(); -// VoiceWorkIngest[] ingests = -// [ -// // TODO -// //new() -// //{ -// // MakerId = "RG00001", -// // MakerName = "Good Dreams", -// // ProductId = "A Newly Announced Work", -// // Title = "", -// // Description = "" -// //}, -// //new() -// //{ -// // MakerId = "RG00002", -// // MakerName = "Sweet Dreams", -// // ProductId = "", -// // Title = "", -// // Description = "" -// //} -// ]; -// IClock clock = Substitute.For(); -// clock.UtcNow.Returns(new DateTimeOffset(2025, 1, 3, 0, 0, 0, 0, TimeSpan.FromSeconds(0))); +public class VoiceWorkIngestionTests(MariaDbContainerFixture container) : IngestionTestsBase(container) +{ -// TokyoTimeProvider timeProvider = new(clock); - -// VoiceWorkUpdater updater = new(context, timeProvider); -// await updater.UpsertAsync(ingests, CancellationToken.None); - -// // TODO -// //context.VoiceWorks.Count().ShouldBe(2); -// } -//} \ No newline at end of file +} \ No newline at end of file diff --git a/JSMR.Tests/Integration/CircleSearchProviderTests.cs b/JSMR.Tests/Integration/CircleSearchProviderTests.cs index b9e322c..32b083f 100644 --- a/JSMR.Tests/Integration/CircleSearchProviderTests.cs +++ b/JSMR.Tests/Integration/CircleSearchProviderTests.cs @@ -8,12 +8,13 @@ using Shouldly; namespace JSMR.Tests.Integration; -public class CircleSearchProviderTests(CircleSearchProviderFixture fixture) : IClassFixture +public class CircleSearchProviderTests(CircleSearchProviderFixture2 fixture) : IClassFixture { [Fact] public async Task Filter_None() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CircleSearchProvider provider = new(context); var options = new SearchOptions() @@ -33,7 +34,8 @@ public class CircleSearchProviderTests(CircleSearchProviderFixture fixture) : IC [Fact] public async Task Filter_By_Status_Not_Blacklisted() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CircleSearchProvider provider = new(context); var options = new SearchOptions() @@ -54,7 +56,8 @@ public class CircleSearchProviderTests(CircleSearchProviderFixture fixture) : IC [Fact] public async Task Filter_By_Status_Favorited() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CircleSearchProvider provider = new(context); var options = new SearchOptions() @@ -75,7 +78,8 @@ public class CircleSearchProviderTests(CircleSearchProviderFixture fixture) : IC [Fact] public async Task Filter_By_Status_Blacklisted() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CircleSearchProvider provider = new(context); var options = new SearchOptions() @@ -96,7 +100,8 @@ public class CircleSearchProviderTests(CircleSearchProviderFixture fixture) : IC [Fact] public async Task Filter_By_Status_Spam() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CircleSearchProvider provider = new(context); var options = new SearchOptions() @@ -117,7 +122,8 @@ public class CircleSearchProviderTests(CircleSearchProviderFixture fixture) : IC [Fact] public async Task Filter_By_Name_Circle_Name() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CircleSearchProvider provider = new(context); var options = new SearchOptions() @@ -138,7 +144,8 @@ public class CircleSearchProviderTests(CircleSearchProviderFixture fixture) : IC [Fact] public async Task Filter_By_Name_Circle_Id() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CircleSearchProvider provider = new(context); var options = new SearchOptions() @@ -159,7 +166,8 @@ public class CircleSearchProviderTests(CircleSearchProviderFixture fixture) : IC [Fact] public async Task Sort_By_Name_Descending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CircleSearchProvider provider = new(context); var options = new SearchOptions() @@ -180,7 +188,8 @@ public class CircleSearchProviderTests(CircleSearchProviderFixture fixture) : IC [Fact] public async Task Sort_By_Favorite_Ascending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CircleSearchProvider provider = new(context); var options = new SearchOptions() @@ -199,7 +208,8 @@ public class CircleSearchProviderTests(CircleSearchProviderFixture fixture) : IC [Fact] public async Task Sort_By_Blacklisted_Ascending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CircleSearchProvider provider = new(context); var options = new SearchOptions() @@ -218,7 +228,8 @@ public class CircleSearchProviderTests(CircleSearchProviderFixture fixture) : IC [Fact] public async Task Sort_By_Spam_Ascending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CircleSearchProvider provider = new(context); var options = new SearchOptions() diff --git a/JSMR.Tests/Integration/CreatorSearchProviderTests.cs b/JSMR.Tests/Integration/CreatorSearchProviderTests.cs index 863c673..4d2ad25 100644 --- a/JSMR.Tests/Integration/CreatorSearchProviderTests.cs +++ b/JSMR.Tests/Integration/CreatorSearchProviderTests.cs @@ -7,12 +7,13 @@ using Shouldly; namespace JSMR.Tests.Integration; -public class CreatorSearchProviderTests(CreatorSearchProviderFixture fixture) : IClassFixture +public class CreatorSearchProviderTests(CreatorSearchProviderFixture2 fixture) : IClassFixture { [Fact] public async Task Filter_None_Sort_Name_Ascending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CreatorSearchProvider provider = new(context); var options = new SearchOptions() @@ -20,7 +21,7 @@ public class CreatorSearchProviderTests(CreatorSearchProviderFixture fixture) : SortOptions = [new(CreatorSortField.Name, Application.Common.Search.SortDirection.Ascending)] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(3); result.TotalItems.ShouldBe(3); @@ -31,7 +32,8 @@ public class CreatorSearchProviderTests(CreatorSearchProviderFixture fixture) : [Fact] public async Task Filter_None_Sort_Name_Descending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CreatorSearchProvider provider = new(context); var options = new SearchOptions() @@ -39,7 +41,7 @@ public class CreatorSearchProviderTests(CreatorSearchProviderFixture fixture) : SortOptions = [new(CreatorSortField.Name, Application.Common.Search.SortDirection.Descending)] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(3); result.TotalItems.ShouldBe(3); @@ -50,7 +52,8 @@ public class CreatorSearchProviderTests(CreatorSearchProviderFixture fixture) : [Fact] public async Task Filter_None_Sort_Favorite_Descending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CreatorSearchProvider provider = new(context); var options = new SearchOptions() @@ -58,7 +61,7 @@ public class CreatorSearchProviderTests(CreatorSearchProviderFixture fixture) : SortOptions = [new(CreatorSortField.Favorite, Application.Common.Search.SortDirection.Ascending)] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items[0].Name.ShouldBe("John Doe"); } @@ -66,7 +69,8 @@ public class CreatorSearchProviderTests(CreatorSearchProviderFixture fixture) : [Fact] public async Task Filter_None_Sort_Blacklisted_Descending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CreatorSearchProvider provider = new(context); var options = new SearchOptions() @@ -74,7 +78,7 @@ public class CreatorSearchProviderTests(CreatorSearchProviderFixture fixture) : SortOptions = [new(CreatorSortField.Blacklisted, Application.Common.Search.SortDirection.Ascending)] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items[0].Name.ShouldBe("Jane Doe"); } @@ -82,7 +86,8 @@ public class CreatorSearchProviderTests(CreatorSearchProviderFixture fixture) : [Fact] public async Task Filter_By_Name_Creator_Name() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; CreatorSearchProvider provider = new(context); var options = new SearchOptions() @@ -93,7 +98,7 @@ public class CreatorSearchProviderTests(CreatorSearchProviderFixture fixture) : } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); // Assert result.Items.Length.ShouldBe(1); diff --git a/JSMR.Tests/Integration/TagSearchProviderTests.cs b/JSMR.Tests/Integration/TagSearchProviderTests.cs index cc62f72..9733a63 100644 --- a/JSMR.Tests/Integration/TagSearchProviderTests.cs +++ b/JSMR.Tests/Integration/TagSearchProviderTests.cs @@ -3,20 +3,17 @@ using JSMR.Application.Tags.Queries.Search.Contracts; using JSMR.Infrastructure.Data; using JSMR.Infrastructure.Data.Repositories.Tags; using JSMR.Tests.Fixtures; -using JSMR.Tests.Ingestion; using Shouldly; -using System.ComponentModel; namespace JSMR.Tests.Integration; -//[Collection("db")] -public class TagSearchProviderTests(TagSearchProviderFixture fixture) : IClassFixture +public class TagSearchProviderTests(TagSearchProviderFixture2 fixture) : IClassFixture { [Fact] public async Task Filter_None_Sort_Name() { - await using AppDbContext context = fixture.CreateDbContext(); - //AppDbContext context = fixture.DbContext!; + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; TagSearchProvider provider = new(context); var options = new SearchOptions() @@ -24,7 +21,7 @@ public class TagSearchProviderTests(TagSearchProviderFixture fixture) : IClassFi SortOptions = [new(TagSortField.Name, Application.Common.Search.SortDirection.Ascending)] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(3); result.TotalItems.ShouldBe(3); @@ -35,8 +32,8 @@ public class TagSearchProviderTests(TagSearchProviderFixture fixture) : IClassFi [Fact] public async Task Filter_None_Sort_EnglishName() { - await using AppDbContext context = fixture.CreateDbContext(); - //AppDbContext context = fixture.DbContext!; + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; TagSearchProvider provider = new(context); var options = new SearchOptions() @@ -44,7 +41,7 @@ public class TagSearchProviderTests(TagSearchProviderFixture fixture) : IClassFi SortOptions = [new(TagSortField.EnglishName, Application.Common.Search.SortDirection.Ascending)] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(3); result.TotalItems.ShouldBe(3); @@ -55,8 +52,8 @@ public class TagSearchProviderTests(TagSearchProviderFixture fixture) : IClassFi [Fact] public async Task Filter_By_Name_Tag_Name() { - await using AppDbContext context = fixture.CreateDbContext(); //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; TagSearchProvider provider = new(context); var options = new SearchOptions() @@ -67,7 +64,7 @@ public class TagSearchProviderTests(TagSearchProviderFixture fixture) : IClassFi } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(1); result.TotalItems.ShouldBe(1); @@ -77,8 +74,8 @@ public class TagSearchProviderTests(TagSearchProviderFixture fixture) : IClassFi [Fact] public async Task Filter_By_Name_English_Tag_Name() { - await using AppDbContext context = fixture.CreateDbContext(); - //AppDbContext context = fixture.DbContext!; + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; TagSearchProvider provider = new(context); var options = new SearchOptions() @@ -89,7 +86,7 @@ public class TagSearchProviderTests(TagSearchProviderFixture fixture) : IClassFi } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(1); result.TotalItems.ShouldBe(1); diff --git a/JSMR.Tests/Integration/VoiceWorkSearchProviderTests.cs b/JSMR.Tests/Integration/VoiceWorkSearchProviderTests.cs index f135702..dc4fe58 100644 --- a/JSMR.Tests/Integration/VoiceWorkSearchProviderTests.cs +++ b/JSMR.Tests/Integration/VoiceWorkSearchProviderTests.cs @@ -7,7 +7,7 @@ using Shouldly; namespace JSMR.Tests.Integration; -public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture) : IClassFixture +public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture2 fixture) : IClassFixture { private static VoiceWorkSearchProvider InitializeVoiceWorkSearchProvider(AppDbContext context) { @@ -20,7 +20,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Default() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -32,7 +33,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(2); result.TotalItems.ShouldBe(2); @@ -43,7 +44,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Upcoming_Favorite() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -55,7 +57,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(1); result.TotalItems.ShouldBe(1); @@ -66,7 +68,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Availble_Blacklisted() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -78,7 +81,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(1); result.TotalItems.ShouldBe(1); @@ -89,7 +92,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Keywords_Basic() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -100,7 +104,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(3); result.TotalItems.ShouldBe(3); @@ -110,7 +114,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Keywords_Not_Good() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -121,7 +126,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(2); result.TotalItems.ShouldBe(2); @@ -132,7 +137,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Keywords_Dreams_And_Amazing_Or_Favorite() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -143,7 +149,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(2); result.TotalItems.ShouldBe(2); @@ -157,7 +163,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Keywords_Phrase_Search() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -168,7 +175,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(1); result.TotalItems.ShouldBe(1); @@ -178,7 +185,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Tags_Favorite_Exclude_Blacklisted() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -189,7 +197,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(1); result.TotalItems.ShouldBe(1); @@ -203,7 +211,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Tags_Favorite_Include_Blacklisted() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -214,7 +223,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(2); result.TotalItems.ShouldBe(2); @@ -228,7 +237,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Tags_Not_Blacklisted() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -239,7 +249,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(4); result.TotalItems.ShouldBe(4); @@ -253,7 +263,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Tags_Blacklisted() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -264,7 +275,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(1); result.TotalItems.ShouldBe(1); @@ -278,7 +289,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_TagIds_Or() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -290,7 +302,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(2); result.TotalItems.ShouldBe(2); @@ -304,7 +316,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_TagIds_And() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -316,7 +329,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(1); result.TotalItems.ShouldBe(1); @@ -330,7 +343,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Creators_Favorite_Exclude_Blacklisted() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -341,7 +355,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(2); result.TotalItems.ShouldBe(2); @@ -355,7 +369,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Creators_Favorite_Include_Blacklisted() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -366,7 +381,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(3); result.TotalItems.ShouldBe(3); @@ -380,7 +395,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Creators_Not_Blacklisted() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -391,7 +407,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(4); result.TotalItems.ShouldBe(4); @@ -405,7 +421,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Creators_Blacklisted() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -416,7 +433,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(1); result.TotalItems.ShouldBe(1); @@ -430,7 +447,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_CreatorIds_Or() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -442,7 +460,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(3); result.TotalItems.ShouldBe(3); @@ -456,7 +474,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_CreatorIds_And() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -468,7 +487,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items.Length.ShouldBe(1); result.TotalItems.ShouldBe(1); @@ -482,7 +501,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Sort_By_Release_Date_Ascending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -493,7 +513,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture ] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items .Select(item => item.ProductId) @@ -503,7 +523,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Sort_By_Release_Date_Descending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -514,7 +535,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture ] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items .Select(item => item.ProductId) @@ -524,7 +545,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Sort_By_Downloads_Ascending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -535,7 +557,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture ] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items .Select(item => item.ProductId) @@ -545,7 +567,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Sort_By_Downloads_Descending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -556,7 +579,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture ] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items .Select(item => item.ProductId) @@ -566,7 +589,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Sort_By_WishlistCount_Ascending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -577,7 +601,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture ] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items .Select(item => item.ProductId) @@ -587,7 +611,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Sort_By_WishlistCount_Descending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -598,7 +623,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture ] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items .Select(item => item.ProductId) @@ -608,7 +633,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Sort_By_StarRating_Ascending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -619,7 +645,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture ] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items .Select(item => item.ProductId) @@ -629,7 +655,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Sort_By_StarRating_Descending() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -640,7 +667,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture ] }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items .Select(item => item.ProductId) @@ -650,7 +677,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Release_Date_Range() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -662,7 +690,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items .OrderBy(item => item.ProductId) @@ -673,7 +701,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Downloads_Range() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -685,7 +714,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items .OrderBy(item => item.ProductId) @@ -696,7 +725,8 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture [Fact] public async Task Filter_Favorite() { - await using AppDbContext context = fixture.CreateDbContext(); + //await using AppDbContext context = fixture.CreateDbContext(); + AppDbContext context = fixture.DbContext!; VoiceWorkSearchProvider provider = InitializeVoiceWorkSearchProvider(context); var options = new SearchOptions() @@ -707,7 +737,7 @@ public class VoiceWorkSearchProviderTests(VoiceWorkSearchProviderFixture fixture } }; - var result = await provider.SearchAsync(options); + var result = await provider.SearchAsync(options, TestContext.Current.CancellationToken); result.Items .OrderBy(item => item.ProductId) diff --git a/JSMR.Tests/JSMR.Tests.csproj b/JSMR.Tests/JSMR.Tests.csproj index 2a63195..92ac6d9 100644 --- a/JSMR.Tests/JSMR.Tests.csproj +++ b/JSMR.Tests/JSMR.Tests.csproj @@ -30,12 +30,12 @@ - - + all runtime; build; native; contentfiles; analyzers; buildtransitive +