namespace HSchool.Content.Tests; public class RomancePackTests { private const string RomancePackId = "romance"; private readonly CatalogLoader _loader = new(); [Fact] public void VanillaCatalog_HasNoOrientationsOrRomanceTopics() { var vanilla = LoadCore(); Assert.Empty(vanilla.Orientations); Assert.Null(vanilla.AffinityRules); Assert.DoesNotContain(vanilla.Topics.Keys, id => id.StartsWith("TopicCrush", StringComparison.Ordinal)); Assert.DoesNotContain(vanilla.Topics.Values, topic => topic.Tags.Contains("romance", StringComparer.Ordinal)); Assert.False(vanilla.Traits.ContainsKey("CrushProne")); } [Fact] public void Pack_LoadsOrientationsTraitsTopicsAndAffinityRules() { var catalog = LoadCoreAndRomance(); Assert.True(catalog.Orientations.ContainsKey("Heterosexual")); Assert.True(catalog.Orientations.ContainsKey("Bisexual")); Assert.True(catalog.Orientations.ContainsKey("Homosexual")); Assert.NotNull(catalog.AffinityRules); Assert.Equal(18, catalog.AffinityRules!.PairMinAge); Assert.True(catalog.Traits.ContainsKey("CrushProne")); Assert.True(catalog.Traits.ContainsKey("Jealous")); Assert.Equal(-15, catalog.Traits["CrushProne"].AffinityThresholdOffset); Assert.True(catalog.Topics.ContainsKey("TopicCrush")); Assert.True(catalog.Topics.ContainsKey("TopicCouple")); Assert.True(catalog.Topics.ContainsKey("TopicTease")); Assert.Contains("romance", catalog.Topics["TopicAppearance"].Tags); Assert.Equal("Романтика", catalog.Text("ru", "romance")); Assert.Equal("Romance", catalog.Text("en", "romance")); } [Fact] public void ExampleWithoutRomance_KeepsVanillaTopics() { var vanilla = LoadCore(); var example = LoadCoreAndExample(); Assert.Equal( vanilla.Topics.Keys.OrderBy(id => id, StringComparer.Ordinal), example.Topics.Keys.OrderBy(id => id, StringComparer.Ordinal)); Assert.Empty(example.Orientations); Assert.DoesNotContain(example.Topics.Values, topic => topic.Tags.Contains("romance", StringComparer.Ordinal)); } private DefCatalog LoadCore() => _loader.Load( [CatalogLoader.CorePackId], PackDocuments.FromDirectory(CatalogLoader.CorePackId, CoreRoot())); private DefCatalog LoadCoreAndRomance() => _loader.Load( [CatalogLoader.CorePackId, RomancePackId], [ .. PackDocuments.FromDirectory(CatalogLoader.CorePackId, CoreRoot()), .. PackDocuments.FromDirectory(RomancePackId, RomanceRoot()), ]); private DefCatalog LoadCoreAndExample() => _loader.Load( [CatalogLoader.CorePackId, "example"], [ .. PackDocuments.FromDirectory(CatalogLoader.CorePackId, CoreRoot()), .. PackDocuments.FromDirectory("example", ExampleRoot()), ]); private static string CoreRoot() => Path.Combine(AppContext.BaseDirectory, "vanilla"); private static string RomanceRoot() { var root = Path.Combine(AppContext.BaseDirectory, "romance"); Assert.True(Directory.Exists(root), $"Romance pack was not copied to {root}."); return root; } private static string ExampleRoot() => Path.Combine(AppContext.BaseDirectory, "example"); }