neon-sprawl/server/NeonSprawl.Server.Tests/Game/Npc/InMemoryThreatStateStoreTes...

63 lines
2.0 KiB
C#

using Microsoft.Extensions.Options;
using NeonSprawl.Server.Game.Npc;
using NeonSprawl.Server.Game.PositionState;
using Xunit;
namespace NeonSprawl.Server.Tests.Game.Npc;
public sealed class InMemoryThreatStateStoreTests
{
[Fact]
public void TryGet_ShouldLazyInitializeEmptyHolder_ForKnownNpcInstance()
{
// Arrange
var store = new InMemoryThreatStateStore();
// Act
var found = store.TryGet(PrototypeNpcRegistry.PrototypeNpcMeleeId, out var snapshot);
// Assert
Assert.True(found);
Assert.Equal(PrototypeNpcRegistry.PrototypeNpcMeleeId, snapshot.NpcInstanceId);
Assert.Null(snapshot.AggroHolderPlayerId);
}
[Fact]
public void TryGet_ShouldReturnFalse_ForUnknownNpcInstance()
{
// Arrange
var store = new InMemoryThreatStateStore();
// Act
var found = store.TryGet("prototype_target_alpha", out var snapshot);
// Assert
Assert.False(found);
Assert.Equal(default, snapshot);
}
[Fact]
public void TrySetHolder_ShouldPersistLowercaseHolder_AndClearOnNull()
{
// Arrange
var store = new InMemoryThreatStateStore();
// Act
var set = store.TrySetHolder(PrototypeNpcRegistry.PrototypeNpcMeleeId, " Dev-Local-1 ");
store.TryGet(PrototypeNpcRegistry.PrototypeNpcMeleeId, out var withHolder);
var cleared = store.TryClearHolder(PrototypeNpcRegistry.PrototypeNpcMeleeId);
store.TryGet(PrototypeNpcRegistry.PrototypeNpcMeleeId, out var afterClear);
// Assert
Assert.True(set);
Assert.Equal("dev-local-1", withHolder.AggroHolderPlayerId);
Assert.True(cleared);
Assert.Null(afterClear.AggroHolderPlayerId);
}
[Fact]
public void TrySetHolder_ShouldReturnFalse_ForUnknownNpcInstance()
{
// Arrange
var store = new InMemoryThreatStateStore();
// Act
var set = store.TrySetHolder("unknown_npc", "dev-local-1");
// Assert
Assert.False(set);
}
}