namespace HSchool.Content.Tests; public class ClimatePresetTests { private readonly CatalogLoader _loader = new(); [Fact] public void VanillaPresets_HaveWorkingWeatherNumbers() { var catalog = Vanilla(); var temperate = catalog.ClimatePresets["TemperateContinental"]; Assert.Equal(12, temperate.MonthlyNorms.Count); Assert.True(temperate.MonthlyNorms[0] < temperate.MonthlyNorms[6]); Assert.InRange(temperate.PrecipitationChance, 0f, 1f); Assert.True(temperate.IndoorOffset > 0); var cold = catalog.ClimatePresets["ContinentalCold"]; Assert.True(cold.MonthlyNorms[0] < temperate.MonthlyNorms[0]); } [Fact] public void HeatAndColdLoving_AreMutuallyIncompatible_AndOffsetComfort() { var catalog = Vanilla(); var heat = catalog.Traits["HeatLoving"]; var cold = catalog.Traits["ColdLoving"]; Assert.Contains("ColdLoving", heat.Incompatible); Assert.Contains("HeatLoving", cold.Incompatible); Assert.Contains("ColdLoving", catalog.TraitIncompatibilities("HeatLoving")); Assert.Contains("HeatLoving", catalog.TraitIncompatibilities("ColdLoving")); Assert.True(heat.ComfortTemperatureOffset > 0); Assert.True(cold.ComfortTemperatureOffset < 0); } [Fact] public void WarmthNeed_RestoresOffCampus_AndIsEnvironmental() { var warmth = Vanilla().Needs["Warmth"]; Assert.True(warmth.RestoredOffCampus); Assert.True(warmth.Environmental); Assert.True(warmth.DecayPerHour > 0); } [Fact] public void Porch_IsOutdoor() { Assert.True(Vanilla().Rooms["EntranceHall"].Outdoor); Assert.False(Vanilla().Rooms["Classroom"].Outdoor); } [Fact] public void ConcretePresetWithoutMonthlyNorms_FailsTheCatalog() { var ex = Assert.Throws(() => _loader.Load( [CatalogLoader.CorePackId], [ PackDocuments.Def( CatalogLoader.CorePackId, "climates", "empty", """{ "defName": "EmptyClimate" }"""), ])); Assert.Contains("monthlyNorms", ex.Message, StringComparison.Ordinal); } private DefCatalog Vanilla() { var root = Path.Combine(AppContext.BaseDirectory, "vanilla"); return _loader.Load([CatalogLoader.CorePackId], PackDocuments.FromDirectory(CatalogLoader.CorePackId, root)); } }