Embed question verification references

This commit is contained in:
hz
2026-07-13 22:29:20 -05:00
parent 0fe47de423
commit 292f8ff9b4
10 changed files with 203 additions and 4 deletions
+61 -1
View File
@@ -28,6 +28,8 @@ public sealed class ChoicePoolTests
var question = BuildQuestion(9);
var response = QuestionResponse.FromModel(question, includeChoicePool: true);
Assert.Equal(9, response.Choices.Count);
Assert.Single(response.References);
Assert.Equal("https://example.org/guideline", response.References[0].Url);
}
[Fact]
@@ -51,6 +53,51 @@ public sealed class ChoicePoolTests
Assert.Contains("unique", QuestionValidator.Validate(request));
}
[Fact]
public void PublishedQuestionRequiresVerificationReferencesButDraftDoesNot()
{
var request = BuildRequest(5);
request.References.Clear();
Assert.Contains("verification reference", QuestionValidator.Validate(request));
request.IsPublished = false;
Assert.Null(QuestionValidator.Validate(request));
}
[Theory]
[InlineData("http://example.org/guideline", "HTTPS")]
[InlineData("https://example.org/guideline", null)]
public void VerificationReferencesValidateUrls(string url, string? expectedError)
{
var request = BuildRequest(5);
request.References[0].Url = url;
var validation = QuestionValidator.Validate(request);
if (expectedError is null)
Assert.Null(validation);
else
Assert.Contains(expectedError, validation);
}
[Fact]
public void VerificationReferencesRequireIsoAccessDateAndUniqueUrls()
{
var request = BuildRequest(5);
request.References[0].AccessedOn = "July 13, 2026";
Assert.Contains("YYYY-MM-DD", QuestionValidator.Validate(request));
request = BuildRequest(5);
request.References.Add(new QuestionReference
{
Title = "Second source",
Publisher = "Publisher",
Url = request.References[0].Url.ToUpperInvariant(),
Supports = "Another claim",
AccessedOn = "2026-07-13",
Reviewer = "Reviewer"
});
Assert.Contains("unique", QuestionValidator.Validate(request));
}
private static Question BuildQuestion(int count)
{
var request = BuildRequest(count);
@@ -64,7 +111,8 @@ public sealed class ChoicePoolTests
Explanation = request.Explanation,
ChoiceExplanations = request.ChoiceExplanations,
WrongAnswerFollowups = request.WrongAnswerFollowups,
ChoiceSelectionPercentages = request.ChoiceSelectionPercentages
ChoiceSelectionPercentages = request.ChoiceSelectionPercentages,
References = request.References
};
}
@@ -98,6 +146,18 @@ public sealed class ChoicePoolTests
Discipline = "Medicine",
System = "Cardiovascular System",
Difficulty = 2,
References =
[
new QuestionReference
{
Title = "Clinical guideline",
Publisher = "Authoritative publisher",
Url = "https://example.org/guideline",
Supports = "The keyed answer and explanation.",
AccessedOn = "2026-07-13",
Reviewer = "Reviewer"
}
],
IsPublished = true
};
}