Fixed voice work updater bug. Added integration tests for voice work search updates (Japanese).
All checks were successful
ci / build-test (push) Successful in 2m27s
ci / publish-image (push) Has been skipped

This commit is contained in:
2026-03-05 23:29:29 -05:00
parent 61f2e64972
commit 1d40013837
10 changed files with 171 additions and 5 deletions

View File

@@ -0,0 +1,32 @@
using JSMR.Application.Scanning.Contracts;
using JSMR.Domain.Enums;
using JSMR.Domain.ValueObjects;
using JSMR.Tests.Ingestion.Search;
namespace JSMR.Tests.Ingestion;
internal class IngestTestFactory
{
public static VoiceWorkIngest Create(SearchRelatedParameters searchRelatedParameters)
{
return new()
{
MakerId = searchRelatedParameters.MakerId,
MakerName = searchRelatedParameters.MakerName,
ProductId = searchRelatedParameters.ProductId,
Title = searchRelatedParameters.Title,
Description = searchRelatedParameters.Description,
Tags = searchRelatedParameters.Tags,
Creators = searchRelatedParameters.Creators,
WishlistCount = 100,
Downloads = 0,
HasTrial = false,
HasDLPlay = false,
AgeRating = AgeRating.AllAges,
HasImage = false,
SupportedLanguages = [SupportedLanguage.Japanese],
SalesDate = null,
ExpectedDate = new DateOnly(2025, 1, 1)
};
}
}

View File

@@ -1,5 +1,7 @@
using JSMR.Application.Scanning.Contracts;
using JSMR.Application.Enums;
using JSMR.Application.Scanning.Contracts;
using JSMR.Application.Scanning.Ports;
using JSMR.Domain.Entities;
using JSMR.Infrastructure.Common.Time;
using JSMR.Infrastructure.Data;
using JSMR.Infrastructure.Ingestion;
@@ -25,6 +27,13 @@ public abstract class JapaneseIngestionTestsBase(MariaDbContainerFixture contain
return await updater.UpsertAsync(ingests, TestContext.Current.CancellationToken);
}
protected static async Task UpdateSearchAsync(AppDbContext dbContext, int[] voiceWorkIds)
{
VoiceWorkSearchUpdater updater = new(dbContext);
await updater.UpdateAsync(voiceWorkIds, TestContext.Current.CancellationToken);
}
protected static DateTime TokyoLocalToUtc(int year, int month, int day, int hour, int minute, int second)
{
var tokyo = TimeZoneInfo.FindSystemTimeZoneById(

View File

@@ -0,0 +1,69 @@
using JSMR.Application.Scanning.Contracts;
using JSMR.Domain.Entities;
using JSMR.Infrastructure.Data;
using JSMR.Tests.Fixtures;
using JSMR.Tests.Ingestion.Japanese;
using Microsoft.EntityFrameworkCore;
using Shouldly;
namespace JSMR.Tests.Ingestion.Search;
internal record SearchRelatedParameters(
string ProductId,
string MakerId,
string Title,
string Description,
string MakerName,
string[] Tags,
string[] Creators
);
public class Insert_Into_Search_Tests(MariaDbContainerFixture container) : JapaneseIngestionTestsBase(container)
{
[Fact]
public async Task Insert_Into_Search_And_Update()
{
await using AppDbContext dbContext = await GetAppDbContextAsync();
// PART 1 - Insert
SearchRelatedParameters parameters = new(
ProductId: "RJ1",
MakerId: "RG1",
Title: "Title",
Description: "Description",
MakerName: "Maker",
Tags: ["Tag 1", "Tag 2"],
Creators: ["Creator 1"]
);
VoiceWorkIngest ingest = IngestTestFactory.Create(parameters);
await UpsertAndVerify(dbContext, ingest, "RJ1 RG1 Title Description Maker Tag 1 Tag 2 Creator 1");
// PART 2 - Update
SearchRelatedParameters updateParameters = parameters with
{
Title = "Updated Title",
Tags = ["Tag 1", "Tag 2", "Tag 3"]
};
VoiceWorkIngest updatedIngest = IngestTestFactory.Create(updateParameters);
await UpsertAndVerify(dbContext, updatedIngest, "RJ1 RG1 Updated Title Description Maker Tag 1 Tag 2 Tag 3 Creator 1");
}
private static async Task UpsertAndVerify(AppDbContext dbContext, VoiceWorkIngest ingest, string searchText)
{
await UpsertAsync(dbContext, TokyoLocalToUtc(2025, 01, 15, 00, 00, 00), [ingest]);
VoiceWork? voiceWork = await dbContext.VoiceWorks.SingleAsync(v => v.ProductId == ingest.ProductId, TestContext.Current.CancellationToken);
voiceWork.ShouldNotBeNull();
await UpdateSearchAsync(dbContext, [voiceWork.VoiceWorkId]);
VoiceWorkSearch voiceWorkSearch = await dbContext.VoiceWorkSearches.SingleAsync(v => v.VoiceWorkId == voiceWork.VoiceWorkId, TestContext.Current.CancellationToken);
voiceWorkSearch.ShouldNotBeNull();
voiceWorkSearch.SearchText.ShouldBe(searchText);
}
}