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));
        }
示例#2
0
        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);
        }