diff --git a/src/RolemasterDb.App/Components/Shared/CriticalCellCurationDialog.razor b/src/RolemasterDb.App/Components/Shared/CriticalCellCurationDialog.razor index d626710..047f55e 100644 --- a/src/RolemasterDb.App/Components/Shared/CriticalCellCurationDialog.razor +++ b/src/RolemasterDb.App/Components/Shared/CriticalCellCurationDialog.razor @@ -135,8 +135,8 @@ } else { - - + } diff --git a/src/RolemasterDb.App/Features/LookupService.cs b/src/RolemasterDb.App/Features/LookupService.cs index 1f31de3..22b4c81 100644 --- a/src/RolemasterDb.App/Features/LookupService.cs +++ b/src/RolemasterDb.App/Features/LookupService.cs @@ -424,7 +424,9 @@ public sealed class LookupService( result.RawAffixText = NormalizeOptionalText(request.RawAffixText); result.ParseStatus = request.ParseStatus.Trim(); result.ParsedJson = CriticalCellEditorSnapshot.FromRequest(request).ToJson(); - result.IsCurated = hasEdits ? false : request.IsCurated; + result.IsCurated = hasEdits && result.IsCurated + ? false + : request.IsCurated; ReplaceBaseEffects(dbContext, result, request.Effects); ReplaceBranches(dbContext, result, request.Branches); diff --git a/src/RolemasterDb.ImportTool.Tests/LookupServiceCurationIntegrationTests.cs b/src/RolemasterDb.ImportTool.Tests/LookupServiceCurationIntegrationTests.cs index 8f54d23..75ecc12 100644 --- a/src/RolemasterDb.ImportTool.Tests/LookupServiceCurationIntegrationTests.cs +++ b/src/RolemasterDb.ImportTool.Tests/LookupServiceCurationIntegrationTests.cs @@ -106,6 +106,72 @@ public sealed class LookupServiceCurationIntegrationTests Assert.Equal("Edited description after curation.", reopenedResponse.DescriptionText); } + [Fact] + public async Task Lookup_service_allows_marking_uncurated_reparsed_content_as_curated() + { + var databasePath = CreateEmptyDatabasePath(); + var repositoryRoot = CreateTemporaryRepositoryRoot(); + var locator = new CriticalImportArtifactLocator(new TestHostEnvironment(Path.Combine(repositoryRoot, "src", "RolemasterDb.App"))); + + await SeedCriticalResultAsync(databasePath, "slash/cells/source-cell.png", 2); + WriteSourceImage(repositoryRoot, "slash/cells/source-cell.png"); + + var lookupService = new LookupService(CreateDbContextFactory(databasePath), locator); + var resultId = await GetResultIdAsync(databasePath); + + var initialResponse = await lookupService.GetCriticalCellEditorAsync("slash", resultId); + Assert.NotNull(initialResponse); + Assert.False(initialResponse!.IsCurated); + + var reparsedResponse = await lookupService.ReparseCriticalCellAsync( + "slash", + resultId, + new CriticalCellUpdateRequest( + initialResponse.RawCellText, + "Edited quick parse input.", + initialResponse.DescriptionText, + initialResponse.RawAffixText, + initialResponse.ParseStatus, + initialResponse.ParsedJson, + initialResponse.IsCurated, + initialResponse.IsDescriptionOverridden, + initialResponse.IsRawAffixTextOverridden, + initialResponse.AreEffectsOverridden, + initialResponse.AreBranchesOverridden, + initialResponse.Effects, + initialResponse.Branches)); + + Assert.NotNull(reparsedResponse); + Assert.False(reparsedResponse!.IsCurated); + + var curatedResponse = await lookupService.UpdateCriticalCellAsync( + "slash", + resultId, + new CriticalCellUpdateRequest( + reparsedResponse.RawCellText, + reparsedResponse.QuickParseInput, + reparsedResponse.DescriptionText, + reparsedResponse.RawAffixText, + reparsedResponse.ParseStatus, + reparsedResponse.ParsedJson, + true, + reparsedResponse.IsDescriptionOverridden, + reparsedResponse.IsRawAffixTextOverridden, + reparsedResponse.AreEffectsOverridden, + reparsedResponse.AreBranchesOverridden, + reparsedResponse.Effects, + reparsedResponse.Branches)); + + Assert.NotNull(curatedResponse); + Assert.True(curatedResponse!.IsCurated); + Assert.Equal("Edited quick parse input.", curatedResponse.QuickParseInput); + + var reopenedResponse = await lookupService.GetCriticalCellEditorAsync("slash", resultId); + Assert.NotNull(reopenedResponse); + Assert.True(reopenedResponse!.IsCurated); + Assert.Equal("Edited quick parse input.", reopenedResponse.QuickParseInput); + } + [Fact] public async Task Lookup_service_resolves_source_image_paths_only_when_artifacts_exist() {