diff --git a/AccessQueueService/Data/DictionaryAccessQueueRepo.cs b/AccessQueueService/Data/DictionaryAccessQueueRepo.cs index 81ba259..fc92f43 100644 --- a/AccessQueueService/Data/DictionaryAccessQueueRepo.cs +++ b/AccessQueueService/Data/DictionaryAccessQueueRepo.cs @@ -12,7 +12,7 @@ namespace AccessQueueService.Data public int GetActiveTicketsCount(DateTime activeCutoff) => _accessTickets .Count(t => t.Value.ExpiresOn > DateTime.UtcNow && t.Value.LastActive >activeCutoff); public int GetQueueCount() => _accessQueue.Count; - public int IndexOfTicket(Guid userId) + public int GetRequestsAhead(Guid userId) { var index = 0; foreach (var ticket in _accessQueue) diff --git a/AccessQueueService/Data/IAccessQueueRepo.cs b/AccessQueueService/Data/IAccessQueueRepo.cs index f13572a..9d83a6c 100644 --- a/AccessQueueService/Data/IAccessQueueRepo.cs +++ b/AccessQueueService/Data/IAccessQueueRepo.cs @@ -10,7 +10,7 @@ namespace AccessQueueService.Data public int GetQueueCount(); public AccessTicket? GetTicket(Guid userId); public void UpsertTicket(AccessTicket ticket); - public int IndexOfTicket(Guid userId); + public int GetRequestsAhead(Guid userId); public void Enqueue(AccessTicket ticket); public int DeleteExpiredTickets(); public bool RemoveUser(Guid userId); diff --git a/AccessQueueService/Services/AccessService.cs b/AccessQueueService/Services/AccessService.cs index 7c0a396..fa22445 100644 --- a/AccessQueueService/Services/AccessService.cs +++ b/AccessQueueService/Services/AccessService.cs @@ -68,9 +68,8 @@ namespace AccessQueueService.Services } else { - var indexOfTicket = _accessQueueRepo.IndexOfTicket(userId); - var requestsAhead = _accessQueueRepo.GetQueueCount() - indexOfTicket - 1; - if (indexOfTicket == -1) + var requestsAhead = _accessQueueRepo.GetRequestsAhead(userId); + if (requestsAhead == -1) { _accessQueueRepo.Enqueue(new AccessTicket { @@ -82,7 +81,7 @@ namespace AccessQueueService.Services return new AccessResponse { ExpiresOn = null, - RequestsAhead = requestsAhead + RequestsAhead = _accessQueueRepo.GetQueueCount() - 1 }; } } diff --git a/AccessQueueServiceTests/AccessServiceTests.cs b/AccessQueueServiceTests/AccessServiceTests.cs index 014c47d..5421657 100644 --- a/AccessQueueServiceTests/AccessServiceTests.cs +++ b/AccessQueueServiceTests/AccessServiceTests.cs @@ -245,6 +245,19 @@ namespace AccessQueueServiceTests Assert.Equal(0, response.RequestsAhead); } + [Fact] + public async Task RequestAccess_ShouldShowCorrectRequestsAhead_WhenAccessRerequested() + { + for (int i = 0; i < CAP_LIMIT + 3; i++) + { + await _accessService.RequestAccess(Guid.NewGuid()); + } + var id = Guid.NewGuid(); + var response = await _accessService.RequestAccess(id); + Assert.Equal(3, response.RequestsAhead); + response = await _accessService.RequestAccess(id); + Assert.Equal(3, response?.RequestsAhead); + } } } } \ No newline at end of file