Fix small bug and add tests for serializing and deserializing
This commit is contained in:
parent
493820c3ad
commit
18d39b5dc2
|
@ -156,7 +156,7 @@ namespace AccessQueueService.Data
|
|||
foreach (var queueItem in state.AccessQueue)
|
||||
{
|
||||
_queueNumbers.Add(queueItem.Value.UserId, queueItem.Key);
|
||||
_nextUnusedTicket = Math.Max(_nextUnusedTicket, queueItem.Key);
|
||||
_nextUnusedTicket = Math.Max(_nextUnusedTicket, queueItem.Key + 1);
|
||||
_nowServing = Math.Min(_nowServing, queueItem.Key);
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Tasks;
|
||||
using AccessQueueService.Data;
|
||||
using AccessQueueService.Models;
|
||||
|
@ -235,5 +236,50 @@ namespace AccessQueueServiceTests
|
|||
Assert.Equal(0, _repo.GetRequestsAhead("first"));
|
||||
Assert.Equal(2, _repo.GetRequestsAhead("third"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ToState_ReturnsAccurateJson()
|
||||
{
|
||||
var ticketWithAccess = new AccessTicket { UserId = "access", ExpiresOn = DateTime.UtcNow.AddMinutes(1), LastActive = DateTime.UtcNow };
|
||||
var ticketWithoutAccess = new AccessTicket { UserId = "noAccess", LastActive = DateTime.UtcNow };
|
||||
|
||||
_repo.UpsertTicket(ticketWithAccess);
|
||||
_repo.Enqueue(ticketWithoutAccess);
|
||||
|
||||
string stateJson = _repo.ToState();
|
||||
var state = JsonSerializer.Deserialize<TakeANumberAccessQueueRepoState>(stateJson);
|
||||
|
||||
Assert.NotNull(state?.AccessQueue);
|
||||
Assert.NotNull(state?.AccessTickets);
|
||||
Assert.Single(state!.AccessTickets);
|
||||
Assert.Single(state!.AccessQueue);
|
||||
|
||||
Assert.Equal(ticketWithAccess.UserId, state.AccessTickets.First().Key);
|
||||
Assert.Equal(ticketWithAccess.ExpiresOn, state.AccessTickets.First().Value.ExpiresOn);
|
||||
Assert.Equal(ticketWithAccess.LastActive, state.AccessTickets.First().Value.LastActive);
|
||||
|
||||
Assert.Equal(ticketWithoutAccess.UserId, state.AccessQueue.First().Value.UserId);
|
||||
Assert.Equal(ticketWithoutAccess.LastActive, state.AccessQueue.First().Value.LastActive);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FromState_DeserializesJsonCorrectly()
|
||||
{
|
||||
var ticketWithAccess = new AccessTicket { UserId = "access", ExpiresOn = DateTime.UtcNow.AddMinutes(1), LastActive = DateTime.UtcNow };
|
||||
var ticketWithoutAccess = new AccessTicket { UserId = "noAccess", LastActive = DateTime.UtcNow };
|
||||
|
||||
_repo.UpsertTicket(ticketWithAccess);
|
||||
_repo.Enqueue(ticketWithoutAccess);
|
||||
|
||||
string stateJson = _repo.ToState();
|
||||
var deserializedRepo = TakeANumberAccessQueueRepo.FromState(stateJson);
|
||||
|
||||
Assert.Equal(1, deserializedRepo.GetUnexpiredTicketsCount());
|
||||
Assert.Equal(1, deserializedRepo.GetQueueCount());
|
||||
|
||||
Assert.Equal(deserializedRepo.GetTicket("access")!.ExpiresOn, ticketWithAccess.ExpiresOn);
|
||||
Assert.Null(deserializedRepo.GetTicket("noAccess"));
|
||||
Assert.Equal(0, deserializedRepo.GetRequestsAhead("noAccess"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue