using System.Text; using Core.Entities; using Core.Models; using Core.Parsers; using Tests.Builders; namespace Tests.Parsers; public class AssignmentRequirement_Tests { [Test] public void ParseTest() { var competitiveEvents = TestEntityHandler.GetEvents(); var students = TestEntityHandler.GetStudents(competitiveEvents); var eventRequirements = TestEntityHandler.GetEventRequirements(competitiveEvents, students); foreach (var ea in eventRequirements) { Console.WriteLine($"{ea.Requirement,10} {ea.EventDefinition.ShortName, -20} {ea.Student.FirstName}"); } Assert.Pass(); } [Test] public void Parse_MatchesNicknameColumnsForTwoJosiahs() { StudentBuilder.ResetIdCounter(); var jo = StudentBuilder.Create("Josiah", "Brown").WithNickname("Jo").Build(); var josiahB = StudentBuilder.Create("Josiah", "Green").WithNickname("Josiah B").Build(); var coding = EventDefinitionBuilder.Individual("Coding").WithShortName("Coding").Build(); const string csv = """ ,Jo,josiah b Coding,i,x """; var requirements = ParseCsv(csv, [coding], [jo, josiahB]); Assert.That(requirements, Has.Length.EqualTo(2)); Assert.That(requirements.Single(r => r.Student.Id == jo.Id).Requirement, Is.EqualTo(Requirement.Include)); Assert.That(requirements.Single(r => r.Student.Id == josiahB.Id).Requirement, Is.EqualTo(Requirement.Exclude)); } [Test] public void Parse_SharedLegalFirstName_TakesFirstStudent() { StudentBuilder.ResetIdCounter(); var first = StudentBuilder.Create("Josiah", "Brown").WithNickname("Jo").Build(); var second = StudentBuilder.Create("Josiah", "Green").WithNickname("Josiah B").Build(); var coding = EventDefinitionBuilder.Individual("Coding").WithShortName("Coding").Build(); const string csv = """ ,Josiah Coding,i """; var requirements = ParseCsv(csv, [coding], [first, second]); Assert.That(requirements, Has.Length.EqualTo(1)); Assert.That(requirements[0].Student.Id, Is.EqualTo(first.Id)); } private static AssignmentRequirement[] ParseCsv( string csv, ICollection events, ICollection students) { using var reader = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(csv))); using var parser = new AssignmentRequirementParser(reader); return parser.Parse(events, students); } }