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.
This commit is contained in:
@@ -29,6 +29,10 @@
|
||||
<Link>example\%(RecursiveDir)%(Filename)%(Extension)</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\..\src\HSchool.Server\mods\romance\**\*">
|
||||
<Link>romance\%(RecursiveDir)%(Filename)%(Extension)</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
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");
|
||||
}
|
||||
Reference in New Issue
Block a user