namespace HSchool.Content.Tests; public class BehaviorDefTests { private readonly CatalogLoader _loader = new(); [Theory] [InlineData("dutyLessonWeight")] [InlineData("dutyTravelWeight")] [InlineData("needWeightAtZero")] [InlineData("lunchWeight")] public void NegativeGoalWeight_FailsTheCatalog(string field) { var error = Assert.Throws(() => _loader.Load( [CatalogLoader.CorePackId], [ PackDocuments.Def( CatalogLoader.CorePackId, "behavior", "rules", $$"""{ "defName": "Behavior", "{{field}}": -1 }"""), ])); Assert.Contains("negative", error.Message, StringComparison.OrdinalIgnoreCase); Assert.Contains("Behavior", error.Message, StringComparison.Ordinal); } [Fact] public void LunchHeavierThanLesson_WarnsAndStillLoads() { var log = new RecordingLog(); var catalog = _loader.Load( [CatalogLoader.CorePackId], [ PackDocuments.Def( CatalogLoader.CorePackId, "behavior", "rules", """{ "defName": "Behavior", "dutyLessonWeight": 10, "lunchWeight": 11 }"""), ], log); Assert.NotNull(catalog.BehaviorRules); Assert.Equal(11f, catalog.BehaviorRules.LunchWeight); Assert.Contains( log.Warnings, warning => warning.Contains("lunchWeight", StringComparison.Ordinal) && warning.Contains("dutyLessonWeight", StringComparison.Ordinal)); } }