From a9b8ee8da9b9353aa5587609812e24471e07642e Mon Sep 17 00:00:00 2001 From: Erdem Bas Date: Thu, 31 Jan 2019 14:09:19 +0300 Subject: [PATCH 1/3] Negative offset bugfix. --- src/LightQuery.EntityFrameworkCore/AsyncLightQueryAttribute.cs | 1 + src/LightQuery/LightQueryAttribute.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/src/LightQuery.EntityFrameworkCore/AsyncLightQueryAttribute.cs b/src/LightQuery.EntityFrameworkCore/AsyncLightQueryAttribute.cs index a2b9705..113bff0 100644 --- a/src/LightQuery.EntityFrameworkCore/AsyncLightQueryAttribute.cs +++ b/src/LightQuery.EntityFrameworkCore/AsyncLightQueryAttribute.cs @@ -51,6 +51,7 @@ private async Task> GetPaginationResult(QueryContainer if (totalCount <= ((queryOptions.Page - 1) * queryOptions.PageSize)) { queryOptions.Page = (int)System.Math.Ceiling((decimal)totalCount / queryOptions.PageSize); + queryOptions.Page = queryOptions.Page == 0 ? 1 : queryOptions.Page; } return new PaginationResult diff --git a/src/LightQuery/LightQueryAttribute.cs b/src/LightQuery/LightQueryAttribute.cs index 6d7c81a..d6b3982 100644 --- a/src/LightQuery/LightQueryAttribute.cs +++ b/src/LightQuery/LightQueryAttribute.cs @@ -44,6 +44,7 @@ private PaginationResult GetPaginationResult(QueryContainer queryContain if (totalCount <= ((queryOptions.Page - 1) * queryOptions.PageSize)) { queryOptions.Page = (int)System.Math.Ceiling((decimal)totalCount / queryOptions.PageSize); + queryOptions.Page = queryOptions.Page == 0 ? 1 : queryOptions.Page; } return new PaginationResult From b2a7ce76eeae8f609727536fb28f63645c7835a5 Mon Sep 17 00:00:00 2001 From: Georg Dangl Date: Thu, 31 Jan 2019 12:41:29 +0100 Subject: [PATCH 2/3] Add tests --- .../AsyncPaginatedLightQueryControllerTests.cs | 12 ++++++++++++ .../AsyncPaginatedLightQueryController.cs | 6 +++++- .../Controllers/PaginatedLightQueryController.cs | 6 +++++- .../PaginatedLightQueryControllerTests.cs | 12 ++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/test/LightQuery.EntityFrameworkCore.Tests.Integration/ControllerTests/AsyncPaginatedLightQueryControllerTests.cs b/test/LightQuery.EntityFrameworkCore.Tests.Integration/ControllerTests/AsyncPaginatedLightQueryControllerTests.cs index 6cb7b0d..1e0072c 100644 --- a/test/LightQuery.EntityFrameworkCore.Tests.Integration/ControllerTests/AsyncPaginatedLightQueryControllerTests.cs +++ b/test/LightQuery.EntityFrameworkCore.Tests.Integration/ControllerTests/AsyncPaginatedLightQueryControllerTests.cs @@ -209,6 +209,18 @@ public async Task IfPageAndPageSizeExceedTotalCountReturnsLastValidPageAndRecord Assert.Equal(5, pagedResult.Data.Count); } + [Fact] + public async Task ReturnsEmptyResultWithPageSetToOneIfNoRecordsPresent() + { + var url = "AsyncPaginatedLightQuery?returnEmptyList=true&pageSize=5"; + var pagedResult = await GetResponse>(url); + Assert.Equal(0, pagedResult.TotalCount); + + Assert.Equal(1, pagedResult.Page); + Assert.Equal(5, pagedResult.PageSize); + Assert.Empty(pagedResult.Data); + } + [Fact] public async Task AppliesDefaultSortWithoutClientSortParameter() { diff --git a/test/LightQuery.IntegrationTestsServer/Controllers/AsyncPaginatedLightQueryController.cs b/test/LightQuery.IntegrationTestsServer/Controllers/AsyncPaginatedLightQueryController.cs index a066215..723c64e 100644 --- a/test/LightQuery.IntegrationTestsServer/Controllers/AsyncPaginatedLightQueryController.cs +++ b/test/LightQuery.IntegrationTestsServer/Controllers/AsyncPaginatedLightQueryController.cs @@ -16,9 +16,13 @@ public AsyncPaginatedLightQueryController(LightQueryContext context) private readonly LightQueryContext _context; [LightQuery(forcePagination: true, defaultPageSize: 3)] - public IActionResult GetValues() + public IActionResult GetValues(bool returnEmptyList = false) { var users = _context.Users.OrderBy(u => Guid.NewGuid()); + if (returnEmptyList) + { + users = users.Where(u => false).AsQueryable().OrderBy(u => Guid.NewGuid()); + } return Ok(users); } diff --git a/test/LightQuery.IntegrationTestsServer/Controllers/PaginatedLightQueryController.cs b/test/LightQuery.IntegrationTestsServer/Controllers/PaginatedLightQueryController.cs index 224066a..793d489 100644 --- a/test/LightQuery.IntegrationTestsServer/Controllers/PaginatedLightQueryController.cs +++ b/test/LightQuery.IntegrationTestsServer/Controllers/PaginatedLightQueryController.cs @@ -16,9 +16,13 @@ public PaginatedLightQueryController(LightQueryContext context) private readonly LightQueryContext _context; [LightQuery(forcePagination: true, defaultPageSize: 3)] - public IActionResult GetValues() + public IActionResult GetValues(bool returnEmptyList = false) { var users = _context.Users.OrderBy(u => Guid.NewGuid()); + if (returnEmptyList) + { + users = users.Where(u => false).AsQueryable().OrderBy(u => Guid.NewGuid()); + } return Ok(users); } diff --git a/test/LightQuery.Tests.Integration/ControllerTests/PaginatedLightQueryControllerTests.cs b/test/LightQuery.Tests.Integration/ControllerTests/PaginatedLightQueryControllerTests.cs index 7de28f7..a26c2e2 100644 --- a/test/LightQuery.Tests.Integration/ControllerTests/PaginatedLightQueryControllerTests.cs +++ b/test/LightQuery.Tests.Integration/ControllerTests/PaginatedLightQueryControllerTests.cs @@ -209,6 +209,18 @@ public async Task IfPageAndPageSizeExceedTotalCountReturnsLastValidPageAndRecord Assert.Equal(5, pagedResult.Data.Count); } + [Fact] + public async Task ReturnsEmptyResultWithPageSetToOneIfNoRecordsPresent() + { + var url = "PaginatedLightQuery?returnEmptyList=true&pageSize=5"; + var pagedResult = await GetResponse>(url); + Assert.Equal(0, pagedResult.TotalCount); + + Assert.Equal(1, pagedResult.Page); + Assert.Equal(5, pagedResult.PageSize); + Assert.Empty(pagedResult.Data); + } + [Fact] public async Task AppliesDefaultSortWithoutClientSortParameter() { From fd607089f5f22904dfc303b6c00187801649fbe3 Mon Sep 17 00:00:00 2001 From: Georg Dangl Date: Thu, 31 Jan 2019 12:42:33 +0100 Subject: [PATCH 3/3] Update CHANGELOG --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d4c589..2aca7bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ All notable changes to **LightQuery** are documented here. +## v1.5.2: +- Bugfix: Empty results now report the `page` as `1` instead of `0`. Thanks to GitHub user @erdembas for the pull request! + ## v1.5.1: - When a `page` is requested that is higher than the last available one, the last available one will be returned instead. Thanks to GitHub user @erdembas for the pull request!