neon-sprawl/server/NeonSprawl.Server.Tests/Game/Mastery/MasteryCatalogRegistryTests.cs

90 lines
3.3 KiB
C#

using Microsoft.Extensions.DependencyInjection;
using NeonSprawl.Server.Game.Mastery;
using NeonSprawl.Server.Tests;
using Xunit;
namespace NeonSprawl.Server.Tests.Game.Mastery;
public class MasteryCatalogRegistryTests
{
private static MasteryCatalogRegistry CreateRegistryFromCatalog(MasteryCatalog catalog) =>
new(catalog);
[Fact]
public void TryGetTrack_ShouldReturnTrue_WhenSkillIdExists()
{
// Arrange
var track = new MasteryTrackRow(
"salvage",
[new MasteryTierRow(1, 2, [new MasteryBranchRow("scrap_efficiency", null, [])])]);
var catalog = new MasteryCatalog(
"/tmp/mastery",
new Dictionary<string, MasteryTrackRow>(StringComparer.Ordinal) { ["salvage"] = track },
new Dictionary<string, PerkDefRow>(StringComparer.Ordinal),
catalogJsonFileCount: 1);
var registry = CreateRegistryFromCatalog(catalog);
// Act
var found = registry.TryGetTrack("salvage", out var result);
// Assert
Assert.True(found);
Assert.NotNull(result);
Assert.Equal("salvage", result.SkillId);
}
[Fact]
public void TryGetTrack_ShouldReturnFalse_WhenSkillIdUnknown()
{
// Arrange
var catalog = new MasteryCatalog(
"/tmp/mastery",
new Dictionary<string, MasteryTrackRow>(StringComparer.Ordinal),
new Dictionary<string, PerkDefRow>(StringComparer.Ordinal),
catalogJsonFileCount: 0);
var registry = CreateRegistryFromCatalog(catalog);
// Act
var found = registry.TryGetTrack("not_a_track", out var result);
// Assert
Assert.False(found);
Assert.Null(result);
}
[Fact]
public void TryGetPerk_ShouldReturnTrue_WhenPerkIdExists()
{
// Arrange
var perk = new PerkDefRow("salvage_scrap_efficiency_1", "Scrap Sifter", "gather_yield_modifier");
var catalog = new MasteryCatalog(
"/tmp/mastery",
new Dictionary<string, MasteryTrackRow>(StringComparer.Ordinal),
new Dictionary<string, PerkDefRow>(StringComparer.Ordinal) { [perk.Id] = perk },
catalogJsonFileCount: 1);
var registry = CreateRegistryFromCatalog(catalog);
// Act
var found = registry.TryGetPerk("salvage_scrap_efficiency_1", out var result);
// Assert
Assert.True(found);
Assert.NotNull(result);
Assert.Equal("gather_yield_modifier", result.EffectKind);
}
[Fact]
public async Task Host_ShouldResolveRegistryFromDi_WhenStartupSucceeds()
{
// Arrange
await using var factory = new InMemoryWebApplicationFactory();
using var client = factory.CreateClient();
_ = await client.GetAsync("/health");
// Act
var registry = factory.Services.GetRequiredService<IMasteryCatalogRegistry>();
var foundTrack = registry.TryGetTrack("salvage", out var track);
var foundPerk = registry.TryGetPerk("salvage_scrap_efficiency_1", out var perk);
// Assert
Assert.True(foundTrack);
Assert.NotNull(track);
Assert.Equal(2, track.Tiers.Count);
Assert.True(foundPerk);
Assert.NotNull(perk);
Assert.Equal("Scrap Sifter", perk.DisplayName);
}
}