using HSchool.Content; namespace HSchool.Content.Tests; public class AttendanceBehaviorTests { private readonly CatalogLoader _loader = new(); [Fact] public void MissingAttendanceFields_UseVanillaDefaults() { var catalog = _loader.Load( [CatalogLoader.CorePackId], [ PackDocuments.Def( CatalogLoader.CorePackId, "behavior", "rules", """{ "defName": "Behavior", "needThreshold": 0.35, "lessonSkillPerHour": 0.05, "commuteSlackMin": 0, "commuteSlackMax": 6, "switchMargin": 0.15 }"""), ]); Assert.NotNull(catalog.BehaviorRules); Assert.Equal(40, catalog.BehaviorRules.AttendanceMax); Assert.Equal(5f, catalog.BehaviorRules.LessonLateMinutes); Assert.True(catalog.BehaviorRules.LessonMarkWhenLate); } [Fact] public void NegativeLateMinutes_FailTheCatalog() { var error = Assert.Throws(() => _loader.Load( [CatalogLoader.CorePackId], [ PackDocuments.Def( CatalogLoader.CorePackId, "behavior", "rules", """{ "defName": "Behavior", "lessonLateMinutes": -1 }"""), ])); Assert.Contains("lessonLateMinutes", error.Message, StringComparison.OrdinalIgnoreCase); } }