Vanilla catalogs stay without crushes; a content pack ships the overlay so later mods can reuse it.
84 lines
3.4 KiB
C#
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");
|
|
}
|