Skip to content

Commit

Permalink
fix: Carbon.PagedList validation error (#127)
Browse files Browse the repository at this point in the history
* fix: Carbon.PagedList validation error
  • Loading branch information
osman-koc committed Mar 25, 2024
1 parent ef0a76a commit f531bb0
Show file tree
Hide file tree
Showing 14 changed files with 44 additions and 127 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

<PropertyGroup>
<TargetFrameworks>net6.0;net5.0;netstandard2.1</TargetFrameworks>
<Version>3.1.4</Version>
<Version>3.1.5</Version>
<Description>
- 3.1.5
* Upgrade Carbon.PagedList (Remove pageSize and pageNumber validation check)

- 3.1.3
* Added new extension method to EFExtensions (ToPagedListEntityFilteredWithSolution, ToPagedListEntityAsync, WhereContains)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Version>1.1.2</Version>
<Version>1.1.3</Version>
<Description>
1.1.3
- Upgrade Carbon.PagedList (Remove pageSize and pageNumber validation check)
</Description>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
</PropertyGroup>

Expand Down
20 changes: 11 additions & 9 deletions Carbon.PagedList.EntityFrameworkCore/PagedListExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,22 @@ public static class PagedListExtensions
/// <seealso cref="PagedList{T}"/>
public static async Task<IPagedList<T>> ToPagedListAsync<T>(this IQueryable<T> superset, int pageNumber, int pageSize)
{
if (pageNumber < 1)
throw new ArgumentOutOfRangeException(nameof(pageNumber), pageNumber, "PageNumber cannot be below 1.");
if (pageSize < 1)
throw new ArgumentOutOfRangeException(nameof(pageSize), pageSize, "PageSize cannot be less than 1.");

var isAllDataRequest = pageSize == 0 && pageNumber == 1;

var totalItemCount = superset?.Count() ?? 0;
var result = new List<T>();

if (superset != null && totalItemCount > 0)
{
if (pageNumber == 1)
result = await superset.Skip(0).Take(pageSize).ToListAsync();
if (isAllDataRequest)
{
result = await superset.ToListAsync();
}
else
result = await superset.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToListAsync();
{
var skipCount = pageNumber == 1 ? 0 : (pageNumber - 1) * pageSize;
result = await superset.Skip(skipCount).Take(pageSize).ToListAsync();
}
}

return new PagedList<T>(result, pageNumber, pageSize, totalItemCount);
Expand Down
4 changes: 3 additions & 1 deletion Carbon.PagedList.Mapster/Carbon.PagedList.Mapster.csproj
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Version>1.0.10</Version>
<Version>1.0.11</Version>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<Description>
1.0.11
- Upgrade Carbon.PagedList (Remove pageSize and pageNumber validation check)
1.0.10
- Carbon.Common updated and IQueryable OrderBy extension method bug fixed
</Description>
Expand Down
9 changes: 3 additions & 6 deletions Carbon.PagedList/BasePagedList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,7 @@ protected internal BasePagedList()
/// <param name = "totalItemCount">The size of the superset.</param>
protected internal BasePagedList(int pageNumber, int pageSize, int totalItemCount)
{
if (pageNumber < 1)
throw new ArgumentOutOfRangeException(nameof(pageNumber), pageNumber, "PageNumber cannot be below 1.");
if (pageSize < 1)
throw new ArgumentOutOfRangeException(nameof(pageSize), pageSize, "PageSize cannot be less than 1.");
var isAllDataRequest = pageSize == 0 && pageNumber == 1;

// set source to blank list if superset is null to prevent exceptions
TotalItemCount = totalItemCount;
Expand All @@ -50,8 +47,8 @@ protected internal BasePagedList(int pageNumber, int pageSize, int totalItemCoun
: 0;
HasPreviousPage = PageNumber > 1;
HasNextPage = PageNumber < PageCount;
IsFirstPage = PageNumber == 1;
IsLastPage = PageNumber >= PageCount;
IsFirstPage = isAllDataRequest || PageNumber == 1;
IsLastPage = isAllDataRequest || PageNumber >= PageCount;
FirstItemOnPage = (PageNumber - 1) * PageSize + 1;
var numberOfLastItemOnPage = FirstItemOnPage + PageSize - 1;
LastItemOnPage = numberOfLastItemOnPage > TotalItemCount
Expand Down
6 changes: 5 additions & 1 deletion Carbon.PagedList/Carbon.PagedList.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Version>1.1.2</Version>
<Version>1.1.3</Version>
<Description>
1.1.3
- Remove pageSize and pageNumber validation check
</Description>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
</PropertyGroup>

Expand Down
18 changes: 6 additions & 12 deletions Carbon.PagedList/PagedList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,7 @@ public class PagedList<T> : PagedListMetaData, IPagedList<T>
/// <exception cref="ArgumentOutOfRangeException">The specified page size cannot be less than one.</exception>
public PagedList(IEnumerable<T> subset, int pageNumber, int pageSize, int totalCount)
{
if (pageNumber < 1)
throw new ArgumentOutOfRangeException(nameof(pageNumber), pageNumber, "PageNumber cannot be below 1.");
if (pageSize < 1)
throw new ArgumentOutOfRangeException(nameof(pageSize), pageSize, "PageSize cannot be less than 1.");
var isAllDataRequest = pageSize == 0 && pageNumber == 1;

// set source to blank list if superset is null to prevent exceptions
TotalItemCount = totalCount;
Expand All @@ -49,8 +46,8 @@ public PagedList(IEnumerable<T> subset, int pageNumber, int pageSize, int totalC
: 0;
HasPreviousPage = PageNumber > 1;
HasNextPage = PageNumber < PageCount;
IsFirstPage = PageNumber == 1;
IsLastPage = PageNumber >= PageCount;
IsFirstPage = isAllDataRequest || PageNumber == 1;
IsLastPage = isAllDataRequest || PageNumber >= PageCount;
FirstItemOnPage = (PageNumber - 1) * PageSize + 1;
var numberOfLastItemOnPage = FirstItemOnPage + PageSize - 1;
LastItemOnPage = numberOfLastItemOnPage > TotalItemCount
Expand All @@ -72,10 +69,7 @@ public PagedList(IEnumerable<T> subset, int pageNumber, int pageSize, int totalC
/// <exception cref="ArgumentOutOfRangeException">The specified page size cannot be less than one.</exception>
public PagedList(IQueryable<T> superset, int pageNumber, int pageSize)
{
if (pageNumber < 1)
throw new ArgumentOutOfRangeException(nameof(pageNumber), pageNumber, "PageNumber cannot be below 1.");
if (pageSize < 1)
throw new ArgumentOutOfRangeException(nameof(pageSize), pageSize, "PageSize cannot be less than 1.");
var isAllDataRequest = pageSize == 0 && pageNumber == 1;

// set source to blank list if superset is null to prevent exceptions
TotalItemCount = superset?.Count() ?? 0;
Expand All @@ -86,8 +80,8 @@ public PagedList(IQueryable<T> superset, int pageNumber, int pageSize)
: 0;
HasPreviousPage = PageNumber > 1;
HasNextPage = PageNumber < PageCount;
IsFirstPage = PageNumber == 1;
IsLastPage = PageNumber >= PageCount;
IsFirstPage = isAllDataRequest || PageNumber == 1;
IsLastPage = isAllDataRequest || PageNumber >= PageCount;
FirstItemOnPage = (PageNumber - 1) * PageSize + 1;
var numberOfLastItemOnPage = FirstItemOnPage + PageSize - 1;
LastItemOnPage = numberOfLastItemOnPage > TotalItemCount
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

<PropertyGroup>
<TargetFrameworks>net6.0;net5.0;netstandard2.1</TargetFrameworks>
<Version>2.3.3</Version>
<Version>2.3.4</Version>
<Description>
2.3.4
Upgrade Carbon.PagedList (Remove pageSize and pageNumber validation check)

2.3.3
Upgrade Carbon.Domain.EntityFramework version (Added OwnerType.None in ownership filter)

Expand Down
33 changes: 3 additions & 30 deletions Carbon.WebApplication/Carbon.WebApplication.csproj
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net6.0;net5.0;netcoreapp3.1</TargetFrameworks>
<Version>4.5.2</Version>
<Version>4.5.3</Version>
<Description>
4.5.3
- Upgrade Carbon.PagedList (Remove pageSize and pageNumber validation check)
4.5.2
- Updated Carbon.Common nuget package (Added StringExtensions class with ReplaceTurkishChars and ContainsTurkishIgnoreCase methods)
4.5.0
Expand Down Expand Up @@ -34,7 +36,6 @@
- Cors Wildcards accepted
4.1.1
- CarbonException messages are take arguments for dynamic exception messages

4.1.0
- Critical bug fixed for Directory separator char to specific platform (Windows,Linux)
4.0.0
Expand All @@ -43,34 +44,6 @@
- Swagger Upgraded
- BodyRewind deprecated, thus RoleFilteredDto is now unsupported as it is unnecessary just after repository-level validation introduced
- Some Performance Improvements

3.7.0
- Swagger server definition added
3.6.0
- ConfigureEndpoint is now a virtual class rather than an abstract
- HealthCheck partial healthy (degraded) also causes endpoint to generate 5xx http status code
3.5.0
- ConfigureEndpoint support added when needed
3.4.5
- Bearer Authenticator can now be passed some events
3.4.4
- Swager Header tenantId added if not exist
3.4.0
- GetUserName extension method added
3.3.2
-Swagger Header(P360SolutonId) Added
3.3.1
- Swagger RoutePrefix added
3.3.0
- Cors ExposeHeaders added
3.2.0
- Fluent Validation crash on dotnet 5 applications fixed
- CarbonValidator class moved here from ExceptionHandling Package
- Fluent Validation upgraded
3.1.0
- Tenant Ownership new features and performance improvements
3.0.0
- Added new error handling mechanism
</Description>
<OpenApiGenerateDocuments>false</OpenApiGenerateDocuments>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,4 @@ public override IEnumerable<object[]> GetData(MethodInfo testMethod)
yield return new object[] { null, 10, 2 };
}
}

public class InValidToPagedListQueryableExtensions : DataAttribute
{
public override IEnumerable<object[]> GetData(MethodInfo testMethod)
{
var context = EFRepositoryFixture.CreateContext();
EFRepositoryFixture.CreateData(context, Guid.NewGuid(), Guid.NewGuid());

//data, pageNumber, pageSize
yield return new object[] { context.CarbonContextTestClass, -1, -1 };
yield return new object[] { null, -10, -2 };
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,19 +32,5 @@ public void ToPagedListAsync_Successfully_PagedListExtensions(IQueryable<TEntity

_testOutputHelper.WriteLine("Test passed!");
}

[Theory]
[InValidToPagedListQueryableExtensions]
public void ToPagedListAsync_Exception_PagedListExtensions(IQueryable<TEntity> entity, int pageNumber, int pageSize)
{
// Arrange
// Act
var wrapper = new QueryableExtensionsWrapper<TEntity>();
var response = wrapper.ToPagedListAsync(entity, pageNumber, pageSize);
// Assert
Assert.NotNull(response.Exception);

_testOutputHelper.WriteLine("Test passed!");
}
}
}
14 changes: 0 additions & 14 deletions tests/Carbon.PagedList.UnitTests/BasePagedListTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,6 @@ public void CreateBasePagedList_CreateWithArguments_ReturnBagePagedList()
Assert.IsAssignableFrom<BasePagedList<string>>(x);
}

[Fact]
public void CreateBasePagedList_InvalidPageNumber_ThrowArgumentException()
{
// Act & Assert
Assert.Throws<ArgumentOutOfRangeException>(() => new TestBasePagedList<string>(0, 1, 1));
}

[Fact]
public void CreateBasePagedList_InvalidPageSize_ThrowArgumentException()
{
// Act & Assert
Assert.Throws<ArgumentOutOfRangeException>(() => new TestBasePagedList<string>(4, 0, 1));
}

[Fact]
public void GetEnumerator_GetSuccessfully_ReturnEnumerator()
{
Expand Down
16 changes: 0 additions & 16 deletions tests/Carbon.PagedList.UnitTests/PagedListTests.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using Xunit;
using System.Collections.Generic;
using System.Linq;
using System;

namespace Carbon.PagedList.UnitTests
{
Expand Down Expand Up @@ -42,21 +41,6 @@ public void CreatePagedList_CreateWithQueryable_ReturnPagedList()
Assert.IsType<PagedList<string>>(x);
}

[Fact]
public void CreatePagedList_InvalidPageSize_ThrowException()
{
// Act & Assert
Assert.Throws<ArgumentOutOfRangeException>(() => new PagedList<string>(dataList.AsQueryable(), 1, 0));

}

[Fact]
public void CreatePagedList_InvalidPageNumber_ThrowException()
{
// Act & Assert
Assert.Throws<ArgumentOutOfRangeException>(() => new PagedList<string>(dataList.AsQueryable(), 0, 5));
}

[Fact]
public void GetEnumerator_GetSuccessfully_ReturnEnumerator()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using Carbon.PagedList;
using FluentValidation;
using Moq;
using System;
using Xunit;

namespace Carbon.WebApplication.UnitTests
Expand Down Expand Up @@ -37,12 +36,5 @@ public void PageableDto_ValidPageNumberAndPageIndex()
// Assert
Assert.IsAssignableFrom<PagedList<IValidationRule>>(x);
}
[Fact]
public void PageableDto_InvalidPageNumberAndPageIndex_ThrowException()
{
// Act
// Assert
Assert.Throws<ArgumentOutOfRangeException>(() => Mock.Of<BaseDtoValidator<IPageableDto>>().ToPagedList(0, 300));
}
}
}

0 comments on commit f531bb0

Please sign in to comment.