public async void ViewFeedback_Filtered_ReturnsFilteredFeedbackEntries() { FeedbackViewResourceParameters parameters = new FeedbackViewResourceParameters { FeedbackScore = 4 }; int feedbackID = 2; _mockDataStore.Setup(x => x.ViewSubmittedFeedbackEntries(parameters)).ReturnsAsync( PagedList <FeedbackEntry> .Create(new List <FeedbackEntry> { new FeedbackEntry { Feedback = new Feedback { FeedbackID = feedbackID, FeedbackScore = parameters.FeedbackScore.Value } } }.AsQueryable().OrderBy(x => x), 1, 1, x => x)); SetUpControllerContext(); var result = await _sut.ViewFeedbackEntries(parameters); Assert.IsType <OkObjectResult>(result); Assert.IsType <PagedList <FeedbackEntry> >(((OkObjectResult)result).Value); Assert.Single((List <FeedbackEntry>)((OkObjectResult)result).Value); var feedbackEntries = (List <FeedbackEntry>)((OkObjectResult)result).Value; Assert.Equal(feedbackID, feedbackEntries[0].Feedback.FeedbackID); }
public async Task <PagedList <FeedbackEntry> > ViewSubmittedFeedbackEntries(FeedbackViewResourceParameters parameters) { var responseEntries = await Task.FromResult( _context.Feedback.Where(x => parameters.FeedbackScore == null || x.FeedbackScore == parameters.FeedbackScore) .OrderByDescending(x => x.SubmissionDate)); return(PagedList <FeedbackEntry> .Create <IFeedback>(responseEntries, parameters.PageNumber, parameters.PageSize, ConstructFeedbackEntry)); }
public async Task <IActionResult> ViewFeedbackEntries([FromQuery] FeedbackViewResourceParameters parameters) { PagedList <FeedbackEntry> feedbackEntries = null; feedbackEntries = await _dataStore.ViewSubmittedFeedbackEntries(parameters); var paginationMetadata = CreatePaginationMetadata(feedbackEntries, parameters); Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); return(Ok(feedbackEntries)); }
string CreateFeedbackResourceUri(FeedbackViewResourceParameters parameters, ResourceUriType type) { switch (type) { case ResourceUriType.NextPage: return(_urlHelper.Link("ViewFeedbackEntries", CreateRouteValues(parameters.PageNumber + 1, parameters.PageSize, parameters.FeedbackScore))); case ResourceUriType.PreviousPage: return(_urlHelper.Link("ViewFeedbackEntries", CreateRouteValues(parameters.PageNumber - 1, parameters.PageSize, parameters.FeedbackScore))); default: return(_urlHelper.Link("ViewFeedbackEntries", CreateRouteValues(parameters.PageNumber, parameters.PageSize, parameters.FeedbackScore))); } }
object CreatePaginationMetadata(PagedList <FeedbackEntry> feedbackEntries, FeedbackViewResourceParameters parameters) { var nextPageLink = feedbackEntries.HasNextPage ? CreateFeedbackResourceUri(parameters, ResourceUriType.NextPage) : null; var previousPageLink = feedbackEntries.HasPreviousPage ? CreateFeedbackResourceUri(parameters, ResourceUriType.PreviousPage) : null; return(new { totalRecords = feedbackEntries.TotalRecordCount, currentPage = feedbackEntries.CurrentPage, pageSize = feedbackEntries.PageSize, totalPages = feedbackEntries.TotalPages, nextPageLink, previousPageLink }); }
public async void ViewFeedback_NonFiltered_ReturnsAllFeedbackEntries() { FeedbackViewResourceParameters parameters = new FeedbackViewResourceParameters(); int feedbackID = 1; _mockDataStore.Setup(x => x.ViewSubmittedFeedbackEntries(parameters)).ReturnsAsync( PagedList <FeedbackEntry> .Create(new List <FeedbackEntry> { new FeedbackEntry { Feedback = new Feedback { FeedbackID = feedbackID }, Game = new Game { GameID = 1 }, Gamer = new Player { PlayerID = 1 }, GameSession = new GameSession { GameSessionID = 1 } } }.AsQueryable().OrderBy(x => x), 1, 1, x => x)); SetUpControllerContext(); var result = await _sut.ViewFeedbackEntries(parameters); Assert.IsType <OkObjectResult>(result); Assert.IsType <PagedList <FeedbackEntry> >(((OkObjectResult)result).Value); Assert.Single((List <FeedbackEntry>)((OkObjectResult)result).Value); var feedbackEntries = (List <FeedbackEntry>)((OkObjectResult)result).Value; Assert.Equal(feedbackID, feedbackEntries[0].Feedback.FeedbackID); }