using AIStudio.Assistants.BeyondFactsLab; namespace AIStudio.Tests.BeyondFactsLab; /// /// Checks which details of a preparation the BeyondFacts Lab marks as missing, and how a form keeps its values. /// [TestFixture] public sealed class BflMissingDetailsTests { [Test] public void ANewPreparationLacksTheDetailsOfTheEventAndTheContribution() { var steps = BflMissingDetails.StepsOf(new Dictionary()); Assert.That(steps, Is.EqualTo(new[] { BflStep.FRAMEWORK, BflStep.KNOWLEDGE })); } [Test] public void TheMissingDetailsFollowTheOrderOfTheForm() { var form = new BflStepFormData(); form.Set(BflFieldCatalog.EVENT_TOPIC, "Water protection"); var missing = BflMissingDetails.Of(BflStep.FRAMEWORK, form); Assert.That(missing.Select(field => field.Id), Is.EqualTo(new[] { BflFieldCatalog.FORMAT, BflFieldCatalog.AUDIENCE, BflFieldCatalog.CONTRIBUTION_TOPIC })); } [Test] public void BlanksCountAsMissing() { var form = new BflStepFormData { Values = { [BflFieldCatalog.CONTRIBUTION_SUMMARY] = " \n " } }; Assert.That(BflMissingDetails.Of(BflStep.KNOWLEDGE, form), Has.Count.EqualTo(1)); } [Test] public void AFilledFormLacksNothing() { var framework = new BflStepFormData(); foreach (var field in BflFieldCatalog.ForStep(BflStep.FRAMEWORK)) framework.Set(field.Id, "given"); var knowledge = new BflStepFormData(); knowledge.Set(BflFieldCatalog.CONTRIBUTION_SUMMARY, "A few sentences."); var steps = BflMissingDetails.StepsOf(new Dictionary { [BflStep.FRAMEWORK] = framework, [BflStep.KNOWLEDGE] = knowledge }); Assert.That(steps, Is.Empty); } [Test] public void AnEmptyValueRemovesTheField() { var form = new BflStepFormData(); form.Set(BflFieldCatalog.GOALS, "Inform the audience"); form.Set(BflFieldCatalog.GOALS, " "); using (Assert.EnterMultipleScope()) { Assert.That(form.Values, Is.Empty); Assert.That(form.Get(BflFieldCatalog.GOALS), Is.Empty); } } [Test] public void ChoicesAreStoredInTheOrderOfTheOptions() { var field = BflFieldCatalog.FIELDS.Single(candidate => candidate.Id == BflFieldCatalog.GOAL_DIRECTIONS); var form = new BflStepFormData(); form.SetChoices(field, [BflFieldCatalog.GOAL_INFLUENCE_POLICY, BflFieldCatalog.GOAL_INFORM, "not_an_option"]); using (Assert.EnterMultipleScope()) { Assert.That(form.Get(field.Id), Is.EqualTo($"{BflFieldCatalog.GOAL_INFORM},{BflFieldCatalog.GOAL_INFLUENCE_POLICY}")); Assert.That(form.GetChoices(field.Id), Is.EquivalentTo(new[] { BflFieldCatalog.GOAL_INFORM, BflFieldCatalog.GOAL_INFLUENCE_POLICY })); } } [Test] public void NoChoiceRemovesTheField() { var field = BflFieldCatalog.FIELDS.Single(candidate => candidate.Id == BflFieldCatalog.GOAL_DIRECTIONS); var form = new BflStepFormData(); form.SetChoices(field, [BflFieldCatalog.GOAL_INFORM]); form.SetChoices(field, []); Assert.That(form.Values, Is.Empty); } }