From f24365a3eb088c3f87a4c22cf7e483be5ffdead6 Mon Sep 17 00:00:00 2001 From: cuqmbr Date: Sun, 15 Oct 2023 12:17:00 +0300 Subject: [PATCH] fix unpredictable results from GetPage method --- .../Repositories/MessagesRepository.cs | 15 ++++++++++++++ .../Tests/WishlistsTests.cs | 20 ++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/ShoppingAssistantApi.Persistance/Repositories/MessagesRepository.cs b/ShoppingAssistantApi.Persistance/Repositories/MessagesRepository.cs index 2181ac5..801963e 100644 --- a/ShoppingAssistantApi.Persistance/Repositories/MessagesRepository.cs +++ b/ShoppingAssistantApi.Persistance/Repositories/MessagesRepository.cs @@ -17,6 +17,21 @@ public class MessagesRepository : BaseRepository, IMessagesRepository pageSize = Math.Clamp(pageSize, 1, messageCount); var numberOfPages = messageCount / pageSize; + if (pageNumber > numberOfPages) + { + return new List(); + } + + if (pageNumber < 1) + { + throw new ArgumentOutOfRangeException(); + } + + if (pageSize < 1) + { + throw new ArgumentOutOfRangeException(); + } + return await _collection.Find(predicate) .Skip((numberOfPages - pageNumber) * pageSize) .Limit(pageSize) diff --git a/ShoppingAssistantApi.Tests/Tests/WishlistsTests.cs b/ShoppingAssistantApi.Tests/Tests/WishlistsTests.cs index 2e2a97d..90394c5 100644 --- a/ShoppingAssistantApi.Tests/Tests/WishlistsTests.cs +++ b/ShoppingAssistantApi.Tests/Tests/WishlistsTests.cs @@ -310,6 +310,8 @@ public class WishlistsTests : IClassFixture> var responseString = await response.Content.ReadAsStringAsync(); var document = JsonConvert.DeserializeObject(responseString); + Console.WriteLine(document); + var personalWishlistsPageItems = Enumerable.ToList(document.data.personalWishlistsPage.items); Assert.Empty(personalWishlistsPageItems); @@ -342,6 +344,9 @@ public class WishlistsTests : IClassFixture> var responseString = await response.Content.ReadAsStringAsync(); var document = JsonConvert.DeserializeObject(responseString); + Console.WriteLine(document); + + var personalWishlistsPageItems = Enumerable.ToList(document.data.personalWishlistsPage.items); var personalWishlistCreatedById = (string) personalWishlistsPageItems[0].createdById; @@ -446,7 +451,17 @@ public class WishlistsTests : IClassFixture> var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json"); using var response = await _httpClient.PostAsync("graphql", content); - Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode); + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + + var responseString = await response.Content.ReadAsStringAsync(); + var document = JsonConvert.DeserializeObject(responseString); + + Console.WriteLine(document); + + + var messagesPageFromPersonalWishlistItems = Enumerable.ToList(document.data.messagesPageFromPersonalWishlist.items); + + Assert.Empty(messagesPageFromPersonalWishlistItems); } [Fact] @@ -476,6 +491,9 @@ public class WishlistsTests : IClassFixture> var responseString = await response.Content.ReadAsStringAsync(); var document = JsonConvert.DeserializeObject(responseString); + Console.WriteLine(document); + + var messagesPageFromPersonalWishlist = Enumerable.ToList(document.data.messagesPageFromPersonalWishlist.items); var firstMessageInPage = messagesPageFromPersonalWishlist[0]; var secondMessageInPage = messagesPageFromPersonalWishlist[1];