diff --git a/PlotLine.Tests/Program.cs b/PlotLine.Tests/Program.cs index 70f5695..a950b15 100644 --- a/PlotLine.Tests/Program.cs +++ b/PlotLine.Tests/Program.cs @@ -64,6 +64,7 @@ var tests = new (string Name, Action Test)[] ("Phase 21U extracts mandatory character appearance fixtures", Phase21UExtractsMandatoryCharacterAppearanceFixtures), ("Phase 21U enforces alias age semantic and UI reset rules", Phase21UEnforcesAliasAgeSemanticAndUiResetRules), ("Story Intelligence visual polish keeps labels fixed and semantics specific", StoryIntelligenceVisualPolishKeepsLabelsFixedAndSemanticsSpecific), + ("Character sex hints are conservative and reviewable", CharacterSexHintsAreConservativeAndReviewable), ("Scan review aliases feed Story Intelligence known character context", ScanReviewAliasesFeedStoryIntelligenceKnownCharacterContext), ("Scan review post supports full-book form submissions", ScanReviewPostSupportsFullBookFormSubmissions), ("Story Intelligence experience boot does not serialise live model", StoryIntelligenceExperienceBootDoesNotSerialiseLiveModel), @@ -841,6 +842,14 @@ static void ScanReviewPostSupportsFullBookFormSubmissions() Assert(((IRequestSizeLimitMetadata?)requestSize)?.MaxRequestBodySize >= 25 * 1024 * 1024, "Scan review request size limit should support full-book previews."); } +static void CharacterSexHintsAreConservativeAndReviewable() +{ + Assert(CharacterSexHintService.Suggest("Cindy") == CharacterSexHintService.Female, "Cindy should default to a female sex hint."); + Assert(CharacterSexHintService.Suggest("Kevin") == CharacterSexHintService.Male, "Kevin should default to a male sex hint."); + Assert(CharacterSexHintService.Suggest("Alex") == CharacterSexHintService.Unknown, "Ambiguous names should not be guessed."); + Assert(CharacterSexHintService.Normalise("Female", "Alex") == CharacterSexHintService.Female, "Reviewed sex hints should override the name heuristic."); +} + static void StoryIntelligenceExperienceBootDoesNotSerialiseLiveModel() { var view = File.ReadAllText(Path.Combine(AppContext.BaseDirectory, "../../../../PlotLine/Views/Development/StoryIntelligenceExperience.cshtml")); @@ -1153,6 +1162,8 @@ static void Phase21UEnforcesAliasAgeSemanticAndUiResetRules() Assert(onboarding.Contains(" + @candidate.MentionCount mention@(candidate.MentionCount == 1 ? string.Empty : "s") / score @candidate.QualityScore @if (!string.IsNullOrWhiteSpace(candidate.AliasTargetName)) { @@ -311,6 +320,7 @@ { } + }