90 lines
3.3 KiB
C#
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);
|
|
}
|
|
}
|