示例#1
0
        public void NoInputsShouldHaveNextWithTopBeingTheMaxAndSkipBeingCountAndRcBeing50NoPreviousRegardlessOfMaxCount()
        {
            var ctx     = GetActionExecutingContext();
            var builder = new PaginationMetadataBuilder();
            var ret     = builder.Build(100, ctx);

            Assert.NotNull(ret);
            Assert.NotNull(ret.Next);

            Assert.Contains("top=100", ret.Next);
            Assert.Contains("skip=100", ret.Next);
            Assert.Contains("runningCount=100", ret.Next);

            Assert.Null(ret.Previous);

            ctx     = GetActionExecutingContext();
            builder = new PaginationMetadataBuilder();
            ret     = builder.Build(10, ctx);

            Assert.NotNull(ret);
            Assert.NotNull(ret.Next);

            Assert.Contains("top=10", ret.Next);
            Assert.Contains("skip=10", ret.Next);
            Assert.Contains("runningCount=10", ret.Next);

            Assert.Null(ret.Previous);
        }
示例#2
0
        public void ResultsLessThanTopSoNextShouldBeNullButPreviousShouldHaveValue()
        {
            var ctx = GetActionExecutingContext();

            ctx.HttpContext.Request.QueryString = new QueryString("?top=10&skip=10&runningCount=10");

            var builder = new PaginationMetadataBuilder();
            var ret     = builder.Build(3, ctx);

            Assert.NotNull(ret.Previous);
            Assert.Null(ret.Next);
        }
示例#3
0
        public void ResultsLessThanTopButNonPaginationQueryParamsPassedSoNextAndPreviousShouldBeNull()
        {
            var ctx = GetActionExecutingContext();

            ctx.HttpContext.Request.QueryString = new QueryString("?OrderBy=foo.bar");

            var builder = new PaginationMetadataBuilder();
            var ret     = builder.Build(9, ctx);

            Assert.Null(ret.Previous);
            Assert.NotNull(ret.Next);
        }
示例#4
0
        public void NoResultsPaginationShouldBeEmpty()
        {
            var ctx = GetActionExecutingContext();

            ctx.HttpContext.Request.QueryString = new QueryString("?$top=2&$skip=5&rc=7");

            var builder = new PaginationMetadataBuilder();
            var ret     = builder.Build(0, ctx);

            Assert.Null(ret.Previous);
            Assert.Null(ret.Next);
            Assert.True(ret.ResultCount == 0);
        }
示例#5
0
        public void IncomingTopIsMoreThanSkipAndRcEqualsSkipSoNextValuesShouldBeCorrect()
        {
            var ctx = GetActionExecutingContext();

            ctx.HttpContext.Request.QueryString = new QueryString("?top=5&skip=3&rc=3");

            var builder = new PaginationMetadataBuilder();
            var ret     = builder.Build(10, ctx);

            Assert.NotNull(ret.Previous);
            Assert.NotNull(ret.Next);
            Assert.Contains("skip=8", ret.Next);
            Assert.Contains("top=5", ret.Next);
            Assert.Contains("runningCount=13", ret.Next);
        }
示例#6
0
        public void IncomingTopButNoSkipAndNoRcSoFirstCallShouldHaveNextButNoPrevious()
        {
            var ctx = GetActionExecutingContext();

            ctx.HttpContext.Request.QueryString = new QueryString("?top=10");

            var builder = new PaginationMetadataBuilder();
            var ret     = builder.Build(100, ctx);

            Assert.Null(ret.Previous);
            Assert.NotNull(ret.Next);
            Assert.Contains("skip=10", ret.Next);
            Assert.Contains("top=10", ret.Next);
            Assert.Contains("runningCount=100", ret.Next);
        }
示例#7
0
        public void IncomingAliasTests()
        {
            var ctx = GetActionExecutingContext();

            ctx.HttpContext.Request.QueryString = new QueryString("?take=2&offSet=5&rc=7&$SORTBY=foo.bar");

            var builder = new PaginationMetadataBuilder();
            var ret     = builder.Build(10, ctx);

            Assert.NotNull(ret.Previous);
            Assert.NotNull(ret.Next);
            Assert.Contains("skip=7", ret.Next);
            Assert.Contains("top=2", ret.Next);
            Assert.Contains("runningCount=17", ret.Next);
            Assert.Contains("$SORTBY=foo.bar", ret.Next);
        }
示例#8
0
        public void WhenTopOrSkipAreDisregardedOrMissingRcShouldBeDisregardedAsWell()
        {
            var ctx = GetActionExecutingContext();

            ctx.HttpContext.Request.QueryString = new QueryString("?skip=0&runningCount=10");

            var builder = new PaginationMetadataBuilder();
            var ret     = builder.Build(100, ctx);

            Assert.NotNull(ret);
            Assert.NotNull(ret.Next);

            Assert.Contains("top=100", ret.Next);
            Assert.Contains("skip=100", ret.Next);
            Assert.Contains("runningCount=100", ret.Next);
            Assert.Null(ret.Previous);
        }
示例#9
0
        public void ShouldTreatZerosAsNoInputsSoShouldHaveNextNoPrevious()
        {
            var ctx = GetActionExecutingContext();

            ctx.HttpContext.Request.QueryString = new QueryString("?top=0&skip=0&runningCount=0");

            var builder = new PaginationMetadataBuilder();
            var ret     = builder.Build(100, ctx);

            Assert.NotNull(ret);
            Assert.NotNull(ret.Next);

            Assert.Contains("top=100", ret.Next);
            Assert.Contains("skip=100", ret.Next);
            Assert.Contains("runningCount=100", ret.Next);
            Assert.Null(ret.Previous);

            ctx = GetActionExecutingContext();
            ctx.HttpContext.Request.QueryString = new QueryString("?top=100&skip=0&runningCount=0");

            builder = new PaginationMetadataBuilder();
            ret     = builder.Build(100, ctx);

            Assert.NotNull(ret);
            Assert.NotNull(ret.Next);

            Assert.Contains("top=100", ret.Next);
            Assert.Contains("skip=100", ret.Next);
            Assert.Contains("runningCount=100", ret.Next);
            Assert.Null(ret.Previous);

            ctx = GetActionExecutingContext();
            ctx.HttpContext.Request.QueryString = new QueryString("?$skip=0");

            builder = new PaginationMetadataBuilder();
            ret     = builder.Build(100, ctx);

            Assert.NotNull(ret);
            Assert.NotNull(ret.Next);

            Assert.Contains("top=100", ret.Next);
            Assert.Contains("skip=100", ret.Next);
            Assert.Contains("runningCount=100", ret.Next);

            Assert.Null(ret.Previous);
        }
示例#10
0
        public void ResourcesGetLinks_returns_previous_and_next_links()
        {
            var pagination = new PaginationMetadataBuilder()
                             .HasPrevious()
                             .HasNext()
                             .Build();

            var resourcesGetLinks = _controller.ResourcesGetLinks <object>(null, pagination);

            resourcesGetLinks
            .Any(l => l.Rel.Equals(HateoasConfig.Relationships.NextPage))
            .ShouldBeTrue();

            resourcesGetLinks
            .Any(l => l.Rel.Equals(HateoasConfig.Relationships.PreviousPage))
            .ShouldBeTrue();
        }
示例#11
0
        public void ResourcesGetLinks_returns_current_for_empty_list()
        {
            var pagination = new PaginationMetadataBuilder()
                             .WithPage(1)
                             .WithPageSize(20)
                             .WithTotalCount(0)
                             .Build();

            var resourcesGetLinks = _controller.ResourcesGetLinks <object>(null, pagination);

            resourcesGetLinks
            .Any(l => l.Rel.Equals(HateoasConfig.Relationships.NextPage))
            .ShouldBeFalse();

            resourcesGetLinks
            .Any(l => l.Rel.Equals(HateoasConfig.Relationships.PreviousPage))
            .ShouldBeFalse();
        }
示例#12
0
        public void ResourcesGetLinks_returns_current_page_only_for_single_page_lists()
        {
            var pagination = new PaginationMetadataBuilder()
                             .Build();

            var resourcesGetLinks = _controller.ResourcesGetLinks <object>(null, pagination);

            resourcesGetLinks
            .Any(l => l.Rel.Equals(HateoasConfig.Relationships.CurrentPage))
            .ShouldBeTrue();

            resourcesGetLinks
            .Any(l => l.Rel.Equals(HateoasConfig.Relationships.NextPage))
            .ShouldBeFalse();

            resourcesGetLinks
            .Any(l => l.Rel.Equals(HateoasConfig.Relationships.PreviousPage))
            .ShouldBeFalse();
        }
示例#13
0
        public void ShouldContainExtraStuffSentInQuery()
        {
            var ctx = GetActionExecutingContext();

            ctx.HttpContext.Request.QueryString = new QueryString("?top=10&myExtraData=999");

            var builder = new PaginationMetadataBuilder();
            var ret     = builder.Build(100, ctx);

            Assert.NotNull(ret);
            Assert.NotNull(ret.Next);

            Assert.Contains("top=10", ret.Next);
            Assert.Contains("skip=100", ret.Next);
            Assert.Contains("runningCount=100", ret.Next);

            Assert.Contains("myExtraData=999", ret.Next);

            Assert.Null(ret.Previous);
        }
示例#14
0
        public void IncomingTopSkipAndRcSoShouldHaveNextAndPreviousTopShouldNeverBeMoreThanMax()
        {
            var ctx = GetActionExecutingContext();

            ctx.HttpContext.Request.QueryString = new QueryString("?top=10&skip=10&runningCount=10");

            var builder = new PaginationMetadataBuilder();
            var ret     = builder.Build(100, ctx);

            Assert.NotNull(ret.Previous);
            Assert.NotNull(ret.Next);

            Assert.Contains("skip=20", ret.Next);
            Assert.Contains("top=10", ret.Next);
            Assert.Contains("runningCount=110", ret.Next);

            // RC should be gone
            Assert.Contains("top=10", ret.Previous);
            Assert.DoesNotContain("skip=", ret.Previous);
            Assert.DoesNotContain("runningCount=", ret.Previous);
        }