using HSchool.Content; namespace HSchool.Content.Tests; public class ParentMeetingBehaviorTests { private readonly CatalogLoader _loader = new(); [Fact] public void VanillaRules_LoadParentMeetingThresholds() { var root = Path.Combine(AppContext.BaseDirectory, "vanilla"); var documents = new List(); foreach (var path in Directory.EnumerateFiles(root, "*.*", SearchOption.AllDirectories)) { if (!path.EndsWith(".jsonc", StringComparison.OrdinalIgnoreCase) && !path.EndsWith(".json", StringComparison.OrdinalIgnoreCase)) { continue; } documents.Add(new ContentDocument( CatalogLoader.CorePackId, Path.GetRelativePath(root, path).Replace('\\', '/'), File.ReadAllText(path))); } var catalog = _loader.Load([CatalogLoader.CorePackId], documents); Assert.NotNull(catalog.BehaviorRules); Assert.Equal(0.08f, catalog.BehaviorRules.ParentMeetingChance); Assert.Equal(0.4f, catalog.BehaviorRules.ParentMeetingAttendanceFraction); Assert.Equal(20f, catalog.BehaviorRules.ParentMeetingMinutes); Assert.Equal(3, catalog.BehaviorRules.ParentMeetingOpinionShift); Assert.Contains( catalog.Events.Values, row => row.Trigger.Equals(EventTriggers.ParentMeeting, StringComparison.Ordinal)); } [Fact] public void ParentMeetingChanceOutOfRange_FailsTheCatalog() { var error = Assert.Throws(() => _loader.Load( [CatalogLoader.CorePackId], [ PackDocuments.Def( CatalogLoader.CorePackId, "behavior", "rules", """{ "defName": "Behavior", "parentMeetingChance": 1.5 }"""), ])); Assert.Contains("parentMeetingChance", error.Message, StringComparison.Ordinal); } }