namespace HSchool.Content.Tests; public class ActionDefTests { private readonly CatalogLoader _loader = new(); [Fact] public void ConcreteAction_WithoutRoom_FailsLoad() { var ex = Assert.Throws(() => _loader.Load( [CatalogLoader.CorePackId], [ PackDocuments.Def( CatalogLoader.CorePackId, "actions", "eat", """{ "defName": "Eat", "minutes": 15, "need": "Hunger", "needGain": 0.5 }"""), PackDocuments.Def( CatalogLoader.CorePackId, "needs", "hunger", """{ "defName": "Hunger", "initial": 1, "decayPerHour": 0, "min": 0, "max": 1 }"""), ])); Assert.Contains("Eat", ex.Message, StringComparison.Ordinal); Assert.Contains("room", ex.Message, StringComparison.OrdinalIgnoreCase); } [Fact] public void ConcreteAction_UnknownNeed_FailsLoad() { var ex = Assert.Throws(() => _loader.Load( [CatalogLoader.CorePackId], [ PackDocuments.Def( CatalogLoader.CorePackId, "rooms", "cafeteria", """{ "defName": "Cafeteria", "travelMinutes": 1 }"""), PackDocuments.Def( CatalogLoader.CorePackId, "actions", "eat", """ { "defName": "EatLunch", "room": "Cafeteria", "minutes": 15, "need": "Snacks", "needGain": 0.5 } """), ])); Assert.Contains("EatLunch", ex.Message, StringComparison.Ordinal); Assert.Contains("Snacks", ex.Message, StringComparison.Ordinal); } [Fact] public void ConcreteAction_UnknownThing_FailsLoad() { var ex = Assert.Throws(() => _loader.Load( [CatalogLoader.CorePackId], [ PackDocuments.Def( CatalogLoader.CorePackId, "rooms", "cafeteria", """{ "defName": "Cafeteria", "travelMinutes": 1 }"""), PackDocuments.Def( CatalogLoader.CorePackId, "actions", "eat", """ { "defName": "EatLunch", "room": "Cafeteria", "thing": "Stool", "minutes": 15 } """), ])); Assert.Contains("EatLunch", ex.Message, StringComparison.Ordinal); Assert.Contains("Stool", ex.Message, StringComparison.Ordinal); } [Fact] public void AbstractAction_DoesNotNeedARoom() { var catalog = _loader.Load( [CatalogLoader.CorePackId], [PackDocuments.Def(CatalogLoader.CorePackId, "actions", "sit", """{ "defName": "Sit", "abstract": true }""")]); Assert.True(catalog.Actions["Sit"].Abstract); Assert.Null(catalog.Actions["Sit"].Room); } }