neon-sprawl/server/NeonSprawl.Server.Tests/Game/Encounters/InMemoryEncounterCompletion...

28 lines
1.0 KiB
C#

using NeonSprawl.Server.Game.Encounters;
namespace NeonSprawl.Server.Tests.Game.Encounters;
public sealed class InMemoryEncounterCompletionStoreTests
{
private const string PlayerId = "dev-local-1";
private const string EncounterId = "prototype_combat_pocket";
private static readonly DateTimeOffset CompletedAt = new(2026, 5, 31, 18, 0, 0, TimeSpan.Zero);
[Fact]
public void TryMarkCompleted_ShouldBeIdempotent_AtStoreLayer()
{
// Arrange
var store = new InMemoryEncounterCompletionStore();
// Act
var first = store.TryMarkCompleted(PlayerId, EncounterId, CompletedAt);
var second = store.TryMarkCompleted(PlayerId, EncounterId, CompletedAt.AddHours(1));
var hasCompletedAt = store.TryGetCompletedAt(PlayerId, EncounterId, out var storedAt);
// Assert
Assert.True(first);
Assert.False(second);
Assert.True(store.IsCompleted(PlayerId, EncounterId));
Assert.True(hasCompletedAt);
Assert.Equal(CompletedAt, storedAt);
}
}