public static async Task <IPagedCollection <T> > ApplyPaging <T>(this IQueryable <T> query, IPageParameters paging, CancellationToken cancellationToken = default(CancellationToken)) { var skip = (paging.PageNumber - 1) * paging.PageSize; var count = await query.CountAsync(cancellationToken); if (count == 0) { return(PagedCollection <T> .Empty(paging.PageSize)); } var totalPages = count / paging.PageSize; if ((count % paging.PageSize) > 0) { totalPages++; } if (skip >= count) { return(new PagedCollection <T>(new T[0], totalPages + 1, totalPages, paging.PageSize)); } var result = await query.Skip(skip).Take(paging.PageSize).ToListAsync(cancellationToken); return(new PagedCollection <T>(result, paging.PageNumber, totalPages, paging.PageSize)); }
public async Task ShouldReturnEmptyTeamsByParent(Mock <ITeamsService> teamsService, PageParameters paging, string parent, Mock <IUrlHelper> urlHelper) { // Arrange teamsService.Setup(s => s.GetTeams(parent, paging, It.IsAny <CancellationToken>())) .ReturnsAsync(PagedCollection <TeamFacade> .Empty(paging.PageSize)); var sut = new TeamsController(teamsService.Object, urlHelper.Object); // Act var actionResult = await sut.Get(parent, paging); // Assert var okactionRsult = Assert.IsType <OkObjectResult>(actionResult); var actual = Assert.IsAssignableFrom <PagedResult <TeamFacade> >(okactionRsult.Value); Assert.Empty(actual.Data); // Should not create links Assert.Empty(actual.Links); }