28 lines
1.0 KiB
C#
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);
|
|
}
|
|
}
|