using HSchool.Content; using HSchool.People; namespace HSchool.People.Tests; public class GradeTrailTests { private static readonly BehaviorDef Rules = new() { DefName = "Behavior", LessonMarkMax = 40, AttendanceMax = 40, PoorMarkTrailMaxAverage = 2.5f, PoorMarkTrailMinMarks = 3, TruancyTrailMinCount = 2, OffenseMemoryMax = 5, OffenseMemoryKinds = BehaviorDef.DefaultOffenseMemoryKinds, }; [Fact] public void ThreeTwos_IsPoorMarks() { var person = Blank("p1"); var t0 = new DateTime(2012, 4, 3, 9, 0, 0, DateTimeKind.Utc); Assert.True(LessonMarkMemory.Record(person, "Mathematics", 2, t0, 1, Rules)); Assert.True(LessonMarkMemory.Record(person, "Mathematics", 2, t0.AddHours(1), 2, Rules)); Assert.True(LessonMarkMemory.Record(person, "Literature", 2, t0.AddHours(2), 3, Rules)); Assert.True(GradeTrail.HasPoorMarks(person, Rules)); Assert.True(GradeTrail.IsPoor(person, Rules)); Assert.Equal(2f, GradeTrail.AverageMark(person)); } [Fact] public void TwoTruancies_IsTruancyTrail_IllnessDoesNotCount() { var person = Blank("p1"); var t0 = new DateTime(2012, 4, 3, 9, 0, 0, DateTimeKind.Utc); Assert.True(AttendanceMemory.Record( person, "Mathematics", AttendanceStatuses.Absent, t0, 1, Rules, AbsenceReasons.Truancy)); Assert.True(AttendanceMemory.Record( person, "Literature", AttendanceStatuses.Absent, t0.AddHours(1), 2, Rules, AbsenceReasons.Illness)); Assert.False(GradeTrail.HasTruancyTrail(person, Rules)); Assert.True(AttendanceMemory.Record( person, "History", AttendanceStatuses.Absent, t0.AddHours(2), 3, Rules, AbsenceReasons.Truancy)); Assert.True(GradeTrail.HasTruancyTrail(person, Rules)); Assert.Equal(2, GradeTrail.TruancyCount(person)); } [Fact] public void Illness_DoesNotCountAsSummonOffense() { Assert.False(GradeTrail.CountsAsSummonOffense(AbsenceReasons.Illness)); Assert.True(GradeTrail.CountsAsSummonOffense(AbsenceReasons.Truancy)); Assert.True(GradeTrail.CountsAsSummonOffense(null)); } private static Person Blank(string id) { var cases = new CaseTable { Nom = id, Gen = id, Dat = id, Acc = id, Ins = id, Pre = id, }; return new Person { Id = id, FamilyId = "f", Female = false, BirthDate = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc), Name = new PersonName(id, id, id, cases, cases, cases), IsStudent = true, IsStaff = false, IsParent = false, Numbers = new Dictionary(StringComparer.Ordinal), Choices = new Dictionary(StringComparer.Ordinal), Skills = new Dictionary(StringComparer.Ordinal), Traits = [], Needs = new Dictionary(StringComparer.Ordinal), Opinions = new Dictionary(StringComparer.Ordinal), }; } }