public void ParseLinkResponseHeaderTest() { var queryResult = new QueryResult<CaseFile>(); const string linkHeader = "Link=<https://app.penneo.com/api/v1/casefiles?page=17&per_page=10>; rel=\"next\",<https://app.penneo.com/api/v1/casefiles?page=1&per_page=10>; rel=\"first\",<https://app.penneo.com/api/v1/casefiles?page=15&per_page=10>; rel=\"prev\""; PaginationUtil.ParseRepsonseHeadersForPagination(linkHeader, queryResult); Assert.AreEqual(17, queryResult.NextPage); Assert.AreEqual(15, queryResult.PrevPage); Assert.AreEqual(1, queryResult.FirstPage); }
/// <summary> /// Find entities based on an input object. /// Returns output with data and metadata /// </summary> public QueryResult <T> FindBy <T>(QueryInput input) where T : Entity { _con.Log("FindBy (" + typeof(T).Name + ")", LogSeverity.Information); var criteria = input.Criteria; var orderBy = input.OrderBy; var offset = input.Offset; var limit = input.Limit; UpdateCriteriaDateTimesToUnix(input); var query = criteria ?? new Dictionary <string, object>(); if (limit.HasValue) { query["limit"] = limit; } if (offset.HasValue) { query["offset"] = offset; } if (orderBy != null) { var sort = string.Join(",", orderBy.Keys); var order = string.Join(",", orderBy.Values); query["sort"] = sort; query["order"] = order; } var output = new QueryResult <T>(); output.Input = input; IEnumerable <T> objects; IRestResponse response; output.Success = _con.ApiConnector.FindBy(query, out objects, out response, input.Page, input.PerPage); output.Objects = objects; output.StatusCode = response.StatusCode; output.ErrorMessage = response.ErrorMessage; if (output.Success) { //Map objects var postProcessor = _con.Setup.GetPostProcessor(typeof(T)); if (postProcessor != null) { output.Objects = (IEnumerable <T>)postProcessor(output.Objects); } //Pagination output.Page = input.Page; output.PerPage = input.PerPage; var linkHeader = response.Headers.FirstOrDefault(x => x.Name.Equals("link", StringComparison.OrdinalIgnoreCase)); if (linkHeader != null && linkHeader.Value != null) { PaginationUtil.ParseRepsonseHeadersForPagination(linkHeader.Value.ToString(), output); } //If no objects were returned, assume that there is no next page - regardless of any returned Link response header if (objects == null || !objects.Any()) { output.NextPage = null; } } return(output); }