Keep legal first and last names for formal lists; show DisplayFirstName on teams, calendars, and import matching so two Josiahs can be told apart. Co-authored-by: Cursor <cursoragent@cursor.com>
74 lines
2.3 KiB
C#
74 lines
2.3 KiB
C#
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<EventDefinition> events,
|
|
ICollection<Student> students)
|
|
{
|
|
using var reader = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(csv)));
|
|
using var parser = new AssignmentRequirementParser(reader);
|
|
return parser.Parse(events, students);
|
|
}
|
|
} |