using Core.Entities; using Core.Printing; using Tests.Builders; namespace Tests.Printing; [TestFixture] public class StudentRankTokens_Tests { [Test] public void FromRankings_AlwaysIncludesEveryRankThroughMax() { var map = StudentRankTokens.FromRankings([]); for (var rank = 1; rank <= StudentEventRanking.MaxRank; rank++) { Assert.That(map.ContainsKey(StudentRankTokens.NameToken(rank)), Is.True); Assert.That(map.ContainsKey(StudentRankTokens.ShortNameToken(rank)), Is.True); Assert.That(map[StudentRankTokens.NameToken(rank)], Is.Null); } } [Test] public void FromRankings_FillsNameAndShortNameForPresentRanks() { var coding = EventDefinitionBuilder.Individual("Coding") .WithShortName("Code") .Build(); var flight = EventDefinitionBuilder.Individual("Flight Endurance") .WithShortName("Flight") .Build(); var student = StudentBuilder.Create("Aria", "Cole") .WithRanking(coding, 1) .WithRanking(flight, 3) .Build(); var map = StudentRankTokens.FromRankings(student.EventRankings); Assert.That(map["Rank1"], Is.EqualTo("Coding")); Assert.That(map["Rank1.ShortName"], Is.EqualTo("Code")); Assert.That(map["Rank1.Attributes"], Is.EqualTo(EventAttributeMarks.For(coding))); Assert.That(map["Rank3"], Is.EqualTo("Flight Endurance")); Assert.That(map["Rank3.ShortName"], Is.EqualTo("Flight")); Assert.That(map["Rank2"], Is.Null); Assert.That(map["Rank2.Attributes"], Is.Null); } [Test] public void FromRankings_IgnoresRanksOutsideOneToMax() { var evt = EventDefinitionBuilder.Individual("Coding").Build(); var rankings = new List { new() { EventDefinition = evt, Rank = 0 }, new() { EventDefinition = evt, Rank = StudentEventRanking.MaxRank + 1 } }; var map = StudentRankTokens.FromRankings(rankings); Assert.That(map["Rank1"], Is.Null); } [Test] public void Merge_KnownEmptyRankPrintsBlank() { var map = PrintTokenMap.Build(null, StudentRankTokens.FromRankings([]), null); var merged = NoteTemplateMerger.Merge("1. {{Rank1}}", map); Assert.That(merged, Is.EqualTo("1. ")); } [Test] public void Merge_ReplacesRankTokens() { var evt = EventDefinitionBuilder.Individual("Video Game Design") .WithShortName("VGD") .Build(); var student = StudentBuilder.Create("Aria", "Cole") .WithRanking(evt, 1) .Build(); var map = PrintTokenMap.Build(null, StudentRankTokens.FromRankings(student.EventRankings), null); var merged = NoteTemplateMerger.Merge("{{Rank1}} ({{Rank1.ShortName}})", map); Assert.That(merged, Is.EqualTo("Video Game Design (VGD)")); } }