90 lines
3.3 KiB
C#
90 lines
3.3 KiB
C#
using NeonSprawl.Server.Game.Combat;
|
|
using NeonSprawl.Server.Game.Npc;
|
|
using Xunit;
|
|
|
|
namespace NeonSprawl.Server.Tests.Game.Combat;
|
|
|
|
public sealed class NpcAttackOperationsTests
|
|
{
|
|
[Fact]
|
|
public void TryResolveTelegraphComplete_ShouldApplyCatalogDamage_WhenHolderMatches()
|
|
{
|
|
// Arrange
|
|
var threatStore = new InMemoryThreatStateStore();
|
|
var playerHealthStore = new InMemoryPlayerCombatHealthStore();
|
|
_ = threatStore.TrySetHolder(PrototypeNpcRegistry.PrototypeNpcMeleeId, "dev-local-1");
|
|
// Act
|
|
var ok = NpcAttackOperations.TryResolveTelegraphComplete(
|
|
PrototypeNpcRegistry.PrototypeNpcMeleeId,
|
|
"dev-local-1",
|
|
attackDamage: 15,
|
|
playerHealthStore,
|
|
threatStore);
|
|
// Assert
|
|
Assert.True(ok);
|
|
playerHealthStore.TryGet("dev-local-1", out var snapshot);
|
|
Assert.Equal(85, snapshot.CurrentHp);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryResolveTelegraphComplete_ShouldNoOp_WhenHolderCleared()
|
|
{
|
|
// Arrange
|
|
var threatStore = new InMemoryThreatStateStore();
|
|
var playerHealthStore = new InMemoryPlayerCombatHealthStore();
|
|
_ = threatStore.TrySetHolder(PrototypeNpcRegistry.PrototypeNpcMeleeId, "dev-local-1");
|
|
_ = threatStore.TryClearHolder(PrototypeNpcRegistry.PrototypeNpcMeleeId);
|
|
// Act
|
|
var ok = NpcAttackOperations.TryResolveTelegraphComplete(
|
|
PrototypeNpcRegistry.PrototypeNpcMeleeId,
|
|
"dev-local-1",
|
|
attackDamage: 15,
|
|
playerHealthStore,
|
|
threatStore);
|
|
// Assert
|
|
Assert.False(ok);
|
|
playerHealthStore.TryGet("dev-local-1", out var snapshot);
|
|
Assert.Equal(PlayerCombatHealthDefaults.MaxHp, snapshot.CurrentHp);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryResolveTelegraphComplete_ShouldNoOp_WhenHolderPlayerDiffers()
|
|
{
|
|
// Arrange
|
|
var threatStore = new InMemoryThreatStateStore();
|
|
var playerHealthStore = new InMemoryPlayerCombatHealthStore();
|
|
_ = threatStore.TrySetHolder(PrototypeNpcRegistry.PrototypeNpcMeleeId, "other-player");
|
|
// Act
|
|
var ok = NpcAttackOperations.TryResolveTelegraphComplete(
|
|
PrototypeNpcRegistry.PrototypeNpcMeleeId,
|
|
"dev-local-1",
|
|
attackDamage: 15,
|
|
playerHealthStore,
|
|
threatStore);
|
|
// Assert
|
|
Assert.False(ok);
|
|
playerHealthStore.TryGet("dev-local-1", out var snapshot);
|
|
Assert.Equal(PlayerCombatHealthDefaults.MaxHp, snapshot.CurrentHp);
|
|
}
|
|
|
|
[Fact]
|
|
public void TryResolveTelegraphComplete_ShouldSucceedWithoutMutation_WhenAttackDamageZero()
|
|
{
|
|
// Arrange
|
|
var threatStore = new InMemoryThreatStateStore();
|
|
var playerHealthStore = new InMemoryPlayerCombatHealthStore();
|
|
_ = threatStore.TrySetHolder(PrototypeNpcRegistry.PrototypeNpcMeleeId, "dev-local-1");
|
|
// Act
|
|
var ok = NpcAttackOperations.TryResolveTelegraphComplete(
|
|
PrototypeNpcRegistry.PrototypeNpcMeleeId,
|
|
"dev-local-1",
|
|
attackDamage: 0,
|
|
playerHealthStore,
|
|
threatStore);
|
|
// Assert
|
|
Assert.True(ok);
|
|
playerHealthStore.TryGet("dev-local-1", out var snapshot);
|
|
Assert.Equal(PlayerCombatHealthDefaults.MaxHp, snapshot.CurrentHp);
|
|
}
|
|
}
|