public void ObtainTenPageMetaData_GivenPageSizeOfOneOnFirstPage() { PaginationHelper paginationHelper = new PaginationHelper(); PaginationHeaderResponse paginationHeaderResponse = paginationHelper.AddPaginationHeaderMetaDataToResponse( CreateMockPaginatedResult(1, 1, 10, 1), CreateMockCurrentFilters(), CreateMockOrderByQueryParams(), "ApplicationList", CreateMockUrlHelper(), CreateMockHttpResponse() ); Assert.True(paginationHeaderResponse.Current == 1, $"Expecting current page to be 1, but actual current value is {paginationHeaderResponse.Current}"); Assert.True(paginationHeaderResponse.Count == 10, $"Expecting result count to be 10, but actual current value is {paginationHeaderResponse.Count}"); Assert.True(paginationHeaderResponse.Size == 1, $"Expecting result page size to be 1, but actual current value is {paginationHeaderResponse.Size}"); Assert.True(paginationHeaderResponse.Total == 10, $"Expecting result total to be 10, but actual current value is {paginationHeaderResponse.Total}"); string expectedNextUrl = "https://www.test-domain.com?page=2&size=1&filterName=testFilterName&orderBy=test1_desc,test2"; Assert.True(paginationHeaderResponse.Next == expectedNextUrl, $"Expecting next URL to be '{expectedNextUrl}', but actual value is '{paginationHeaderResponse.Next}'"); Assert.True(paginationHeaderResponse.Prev == null, $"Expecting null Prev URL, but obtained the following {paginationHeaderResponse.Prev}"); string expectedFirstUrl = "https://www.test-domain.com?page=1&size=1&filterName=testFilterName&orderBy=test1_desc,test2"; Assert.True(paginationHeaderResponse.First == expectedFirstUrl, $"Expected a first page URL of '{expectedFirstUrl}', but obtained the following: '{paginationHeaderResponse.First}'"); string expectedLastUrl = "https://www.test-domain.com?page=10&size=1&filterName=testFilterName&orderBy=test1_desc,test2"; Assert.True(paginationHeaderResponse.Last == expectedLastUrl, $"Expected a last page URL of '{expectedLastUrl}', but obtained the following: '{paginationHeaderResponse.Last}'"); }
public PaginationHeaderResponse AddPaginationHeaderMetaDataToResponse <T>(IPaginatedResult <T> paginatedResult, List <KeyValuePair <string, string> > filters, string orderBy, string pageRouteName, IUrlHelper urlHelper, HttpResponse response) where T : class { var previousPageLink = paginatedResult.CurrentPage > 1 ? CreatePagedLinkRelToCurrentPage(paginatedResult, filters, orderBy, urlHelper, pageRouteName, -1) : null; var nextPageLink = HasNextPage(paginatedResult) ? CreatePagedLinkRelToCurrentPage(paginatedResult, filters, orderBy, urlHelper, pageRouteName, 1) : null; var first = CreatePageLink(pageSize: paginatedResult.PageSize, pageNumber: 1, pageRouteName: pageRouteName, filters: filters, orderBy: orderBy, urlHelper: urlHelper); var last = CreatePageLink(pageSize: paginatedResult.PageSize, pageNumber: GetTotalPages(paginatedResult), pageRouteName: pageRouteName, filters: filters, orderBy: orderBy, urlHelper: urlHelper); PaginationHeaderResponse paginationHeaderResponse = new PaginationHeaderResponse { Total = GetTotalPages(paginatedResult), Size = paginatedResult.PageSize, Count = paginatedResult.RowCount, Current = paginatedResult.CurrentPage, Prev = previousPageLink, Next = nextPageLink, First = first, Last = last }; response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationHeaderResponse)); return(paginationHeaderResponse); }