diff --git a/tests/HSchool.Server.Tests/SwarmUiSettingsStoreTests.cs b/tests/HSchool.Server.Tests/SwarmUiSettingsStoreTests.cs index 2128a78..674bc23 100644 --- a/tests/HSchool.Server.Tests/SwarmUiSettingsStoreTests.cs +++ b/tests/HSchool.Server.Tests/SwarmUiSettingsStoreTests.cs @@ -233,6 +233,25 @@ public class SwarmUiSettingsStoreTests var child = Assert.Single(config.Presets, preset => preset.Id == "child"); Assert.Equal(SwarmUiModelDefinition.RealismV25Id, child.Model); + + var ageRule = Assert.Single(config.AgeRules); + Assert.Equal(6, ageRule.MinAge); + Assert.Equal(11, ageRule.MaxAge); + Assert.Equal("child", ageRule.PresetId); + } + + [Theory] + [InlineData(6, "child")] + [InlineData(11, "child")] + [InlineData(5, "default")] + [InlineData(12, "default")] + public void Resolve_AgeRuleCoversSixThroughElevenInclusive(int age, string presetId) + { + var config = SwarmUiConfigFile.CreateDefault(); + var profile = config.Resolve(age, PortraitKind.Avatar); + + Assert.Equal(presetId, profile.PresetId); + Assert.Equal(SwarmUiModelDefinition.RealismV25Id, profile.Model); } [Fact] @@ -288,6 +307,8 @@ public class SwarmUiSettingsStoreTests Assert.Equal(expected.Presets[1].Model, loaded.Presets[1].Model); Assert.Equal(expected.Presets[1].Style, loaded.Presets[1].Style); Assert.Equal(expected.Presets[1].Negative, loaded.Presets[1].Negative); + Assert.Equal(expected.Presets[1].Avatar?.ShotType, loaded.Presets[1].Avatar?.ShotType); + Assert.Equal(expected.Presets[1].FullBody?.ShotType, loaded.Presets[1].FullBody?.ShotType); } [Fact] @@ -354,6 +375,48 @@ public class SwarmUiSettingsStoreTests Assert.Equal(SwarmUiModelDefinition.DreamShaperId, living.Resolve(8, PortraitKind.Avatar).Model); } + [Fact] + public void NormalizeAfterLoad_EmptyModelsKeepSdxlPresetIdsInsteadOfKreaCatalog() + { + var living = new SwarmUiConfigFile + { + ActivePresetId = "default", + Presets = + [ + new SwarmUiPresetDefinition + { + Id = "default", + Label = "Default", + Model = SwarmUiModelDefinition.BabesId, + Avatar = new SwarmUiKindPreset { Width = 1024, Height = 1024 }, + Custom = new SwarmUiKindPreset { Width = 896, Height = 1152 }, + FullBody = new SwarmUiKindPreset { Width = 896, Height = 1152 }, + }, + new SwarmUiPresetDefinition + { + Id = "child", + Label = "Children", + Model = SwarmUiModelDefinition.DreamShaperId, + Avatar = new SwarmUiKindPreset { Width = 1024, Height = 1024 }, + Custom = new SwarmUiKindPreset { Width = 896, Height = 1152 }, + FullBody = new SwarmUiKindPreset { Width = 896, Height = 1152 }, + }, + ], + AgeRules = [new SwarmUiAgeRule { MinAge = 6, MaxAge = 11, PresetId = "child" }], + }; + + living.NormalizeAfterLoad(); + + Assert.Equal( + [SwarmUiModelDefinition.BabesId, SwarmUiModelDefinition.DreamShaperId], + living.Models.Select(model => model.Id)); + Assert.DoesNotContain(living.Models, model => model.Id == SwarmUiModelDefinition.MuseId); + Assert.DoesNotContain(living.Models, model => model.Id == SwarmUiModelDefinition.RealismV25Id); + Assert.Equal(SwarmUiModelDefinition.BabesId, living.Presets[0].Model); + Assert.Equal(SwarmUiModelDefinition.DreamShaperId, living.Presets[1].Model); + Assert.Equal(SwarmUiModelDefinition.DreamShaperId, living.Resolve(8, PortraitKind.Avatar).Model); + } + [Fact] public void Clone_DoesNotInjectKreaModelsIntoAnExistingSchoolCopy() {