public void SortDirective_CannotParseADirectiveWithoutAField() { var result = SortDirective.TryParse(":asc", out var directive); Assert.IsFalse(result); Assert.IsNull(directive); }
public void SortDirective_ReturnsNullForInvalidDirectives() { var directives = SortDirective .GetSortDirectivesFrom("age:desc,:,name:asc"); Assert.IsNull(directives); }
public void SortDirective_CannotParseADirectiveWithAnInvalidDirectionSpecified() { var result = SortDirective.TryParse("name:invalid", out var directive); Assert.IsFalse(result); Assert.IsNull(directive); }
public IResult <Pagination <TSource> > Paginate ( IEnumerable <TSource> items, IPaginationInstruction paginationInstruction ) { var limit = paginationInstruction.Limit; var maxLimit = paginationInstruction.MaxLimit; var offset = paginationInstruction.Offset; var sort = paginationInstruction.Sort; if (limit < 1) { return(ResultFactory .Failure($"The limit parameter is expected to be a positive number (max: {maxLimit}).")); } if (limit > maxLimit) { return(ResultFactory .Failure($"The limit parameter must not exceed what is max allowed (max: {maxLimit}).")); } if (offset < 0) { return(ResultFactory .Failure("The offset parameter is expected to be a non-negative number.")); } var sortDirectives = SortDirective .GetSortDirectivesFrom(sort); if (sortDirectives == null) { return(ResultFactory .Failure("The sort parameter contains invalid directives (expected format: 'property[:asc|desc][,property..]', e.g. 'property1,property2:desc').")); } var invalidSortFields = sortDirectives .Where(x => !_sorters.ContainsKey(x.Property)) .Select(x => x.Property) .ToList(); if (invalidSortFields.Any()) { return(ResultFactory .Failure($"The sort parameter contains directives for nonexistent fields ('${string.Join("', '", invalidSortFields)}').")); } var paginated = Sort(items, sortDirectives) .Skip(offset) .Take(limit) .ToList(); var pagination = new Pagination <TSource>(paginated, limit, offset, sort, items.Count()); return(ResultFactory .Success(pagination)); }
public void SortDirective_CanParseADirectiveWithSurroundingWhiteSpace() { var result = SortDirective.TryParse(" name : asc ", out var directive); Assert.IsTrue(result); Assert.AreEqual("name", directive.Property); Assert.AreEqual(SortDirection.Asc, directive.Direction); }
public void SortDirective_CanParseADirectiveWithDirectionSeparatorButNoDirection() { var result = SortDirective.TryParse("name:", out var directive); Assert.IsTrue(result); Assert.AreEqual("name", directive.Property); Assert.AreEqual(SortDirection.Asc, directive.Direction); }
public void SortDirective_CanParseADirectiveWithoutSpecifiedDirection() { var result = SortDirective.TryParse("name", out var directive); Assert.IsTrue(result); Assert.AreEqual("name", directive.Property); Assert.AreEqual(SortDirection.Asc, directive.Direction); }
public void SortDirective_OnlyReturnsTheFirstSpecifiedDirectivePerField() { var directives = SortDirective .GetSortDirectivesFrom("age:desc,name:asc,age:asc"); Assert.AreEqual(2, directives.Count()); var first = directives.First(); var last = directives.Last(); Assert.AreEqual("age", first.Property); Assert.AreEqual(SortDirection.Desc, first.Direction); Assert.AreEqual("name", last.Property); Assert.AreEqual(SortDirection.Asc, last.Direction); }
public void SortDirective_IgnoresEmptyDirectives() { var directives = SortDirective .GetSortDirectivesFrom("age:desc,,name:asc"); Assert.AreEqual(2, directives.Count()); var first = directives.First(); var last = directives.Last(); Assert.AreEqual("age", first.Property); Assert.AreEqual(SortDirection.Desc, first.Direction); Assert.AreEqual("name", last.Property); Assert.AreEqual(SortDirection.Asc, last.Direction); }