Files
Leonid Pershin d2911c3daf Complete phase 47 romance pack on generic orientation and affinity hooks.
Vanilla catalogs stay without crushes; a content pack ships the overlay so later mods can reuse it.
2026-08-20 10:42:42 +03:00

84 lines
3.4 KiB
C#

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");
}