Embed question verification references
This commit is contained in:
@@ -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
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user