From 12e52bccc90a3c0e89c8def66f9348531132581c Mon Sep 17 00:00:00 2001 From: VinPropane Date: Sun, 17 May 2026 20:46:55 -0400 Subject: [PATCH] NEO-48: fix in-memory TrySetSkillXpTotal zero on absent skill Setting XP to 0 is a no-op success when no row exists, matching Postgres DELETE semantics and TrySetSkillXpTotals behavior. --- ...nMemoryPlayerSkillProgressionStoreTests.cs | 23 +++++++++++++++++++ .../InMemoryPlayerSkillProgressionStore.cs | 3 ++- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 server/NeonSprawl.Server.Tests/Game/Skills/InMemoryPlayerSkillProgressionStoreTests.cs diff --git a/server/NeonSprawl.Server.Tests/Game/Skills/InMemoryPlayerSkillProgressionStoreTests.cs b/server/NeonSprawl.Server.Tests/Game/Skills/InMemoryPlayerSkillProgressionStoreTests.cs new file mode 100644 index 0000000..8b4fe69 --- /dev/null +++ b/server/NeonSprawl.Server.Tests/Game/Skills/InMemoryPlayerSkillProgressionStoreTests.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.DependencyInjection; +using NeonSprawl.Server.Game.Skills; +using Xunit; + +namespace NeonSprawl.Server.Tests.Game.Skills; + +public sealed class InMemoryPlayerSkillProgressionStoreTests +{ + [Fact] + public void TrySetSkillXpTotal_WhenXpZeroAndSkillAbsent_ShouldReturnTrue() + { + // Arrange + using var factory = new InMemoryWebApplicationFactory(); + var store = factory.Services.GetRequiredService(); + + // Act + var applied = store.TrySetSkillXpTotal("dev-local-1", "intrusion", xp: 0); + + // Assert + Assert.True(applied); + Assert.False(store.GetXpTotals("dev-local-1").ContainsKey("intrusion")); + } +} diff --git a/server/NeonSprawl.Server/Game/Skills/InMemoryPlayerSkillProgressionStore.cs b/server/NeonSprawl.Server/Game/Skills/InMemoryPlayerSkillProgressionStore.cs index fa1a1bd..acab145 100644 --- a/server/NeonSprawl.Server/Game/Skills/InMemoryPlayerSkillProgressionStore.cs +++ b/server/NeonSprawl.Server/Game/Skills/InMemoryPlayerSkillProgressionStore.cs @@ -82,7 +82,8 @@ public sealed class InMemoryPlayerSkillProgressionStore(IOptions