public static CollectionPageData <T> GetExpectedPage <T>
        (
            Page <T> expectedPage,
            string baseUrl,
            RelTypes removeRel = RelTypes.notfound
        )
            where T : IEntity
        {
            var links = new PageLinksFormatter().GetLinks(baseUrl, expectedPage);

            if (removeRel != RelTypes.notfound)
            {
                var linksArray = links.Split(',');
                var linksList  = new List <string>();
                foreach (var link in linksArray)
                {
                    var match = Regex.Match(link, ClientConstants.LinksPattern);
                    var url   = match.Groups[ClientConstants.UrlGroup].Value;
                    var rel   = match.Groups[ClientConstants.RelGroup].Value;
                    Enum.TryParse(rel, out RelTypes relEnum);
                    if (relEnum != removeRel)
                    {
                        linksList.Add(link);
                    }
                }
                links = string.Join(", ", linksList);
            }

            return(new CollectionPageData <T>(expectedPage.Items, links));
        }
예제 #2
0
        public void BuildOnLastPageOfMany()
        {
            var links      = new PageLinksFormatter().GetLinks("http://localhost/acid/base", new Page <Uom>("", 40, 30, 10, new List <Uom>()));
            var linksArray = links.Split(',');

            Assert.AreEqual(4, linksArray.Length);
            Assert.AreEqual("http://localhost/acid/base?searchText=&skip=30&take=10", GetUrlString(linksArray, "self"));
            Assert.AreEqual("http://localhost/acid/base?searchText=&skip=0&take=10", GetUrlString(linksArray, "first"));
            Assert.AreEqual("http://localhost/acid/base?searchText=&skip=20&take=10", GetUrlString(linksArray, "prev"));
            Assert.AreEqual("http://localhost/acid/base?searchText=&skip=30&take=10", GetUrlString(linksArray, "last"));
        }
        public void Constructor()
        {
            var items = new Mock <IImmutableList <Uom> >().Object;
            var links = new PageLinksFormatter().GetLinks(Url, new Page <Uom>("", 40, 0, 10, new List <Uom>()));

            ConstructorTests <CollectionPageData <Uom> >
            .For(typeof(IImmutableList <Uom>), typeof(string))
            .Fail(new object[] { items, null }, typeof(ArgumentNullException), "Null links")
            .Fail(new object[] { null, links }, typeof(ArgumentNullException), "Null items")
            .Succeed(new object[] { items, links }, "Constructor args valid.")
            .Assert();
        }
        public void NotPaging()
        {
            var items = new List <Uom>().ToImmutableList();
            var links = new PageLinksFormatter().GetLinks(Url, new Page <Uom>("", 40, 0, 50, new List <Uom>()));
            var data  = new CollectionPageData <Uom>(items, links);

            data.Links.TryGetValue(RelTypes.self, out var value);

            Assert.IsFalse(data.IsPaging);
            Assert.AreEqual(1, data.Links.Count);
            Assert.NotNull(value);
            Assert.AreEqual($"{Url}?searchText=&skip=0&take=50", value);
        }
예제 #5
0
        public static HttpResponseMessage GetExpectedResponse <T>
        (
            Page <T> expectedPage,
            string baseUrl
        )
            where T : class, IEntity
        {
            var links    = new PageLinksFormatter().GetLinks(baseUrl, expectedPage);
            var response = new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.OK,
                Content    = new StringContent(JsonConvert.SerializeObject(expectedPage.Items))
            };

            response.Headers.Add("Link", links);
            return(response);
        }
        public void OnFirstPage()
        {
            var items = new List <Uom>().ToImmutableList();
            var links = new PageLinksFormatter().GetLinks(Url, new Page <Uom>("", 200, 0, 50, new List <Uom>()));
            var expectedPagingText = PagingTextCalculator.Calculate(0, 50, 200);
            var data = new CollectionPageData <Uom>(items, links);

            Assert.IsTrue(data.IsPaging);
            Assert.AreEqual(4, data.Links.Count);

            data.Links.TryGetValue(RelTypes.self, out var selfUrl);
            data.Links.TryGetValue(RelTypes.first, out var firstUrl);
            data.Links.TryGetValue(RelTypes.next, out var nextUrl);
            data.Links.TryGetValue(RelTypes.last, out var lastUrl);
            Assert.AreEqual($"{Url}?searchText=&skip=0&take=50", selfUrl);
            Assert.AreEqual($"{Url}?searchText=&skip=0&take=50", firstUrl);
            Assert.AreEqual($"{Url}?searchText=&skip=50&take=50", nextUrl);
            Assert.AreEqual($"{Url}?searchText=&skip=150&take=50", lastUrl);

            Assert.AreEqual(expectedPagingText, data.PagingText);
        }