Ejemplo n.º 1
0
        void GetExpectedResult(string value, string expected)
        {
            var parser = new LinkHeaderParser();
            var result = parser.GetNextPageFromHeader(value);

            Assert.Equal(expected, result);
        }
        public void Parse_PrevLinkOnly()
        {
            var res = LinkHeaderParser.Parse <Product>("<https://test.myshopify.com/admin/api/2019-07/products.json?page_info=vwxyzab&limit=6>; rel=\"previous\"");

            Assert.Null(res.NextLink);
            Assert.NotNull(res.PreviousLink);
            Assert.Equal(res.PreviousLink.Url, "https://test.myshopify.com/admin/api/2019-07/products.json?page_info=vwxyzab&limit=6");
            Assert.Equal(res.PreviousLink.PageInfo, "vwxyzab");
        }
        public void ParseLinkWithoutRelation()
        {
            var headerValue = "<https://my-server.dev/api/v1/users?limit=25>; rel=\"self\"";
            var links       = LinkHeaderParser.Parse(headerValue);

            links.Count().Should().Be(1);
            links.Single().Target.Should().Be("https://my-server.dev/api/v1/users?limit=25");
            links.Single().Relation.Should().Be("self");
        }
        public void IgnoreBadInlineLinks()
        {
            var headerValue = @"
<https://my-server.dev/api/v1/users?after=abc123>; rel=""next"",,
  definitelyinvalid!";
            var links       = LinkHeaderParser.Parse(headerValue);

            links.Count().Should().Be(1);
            links.Single().Target.Should().Be("https://my-server.dev/api/v1/users?after=abc123");
        }
        public void IgnoreBadInlineLinkValues()
        {
            var headerValue = @"<https://my-server.dev/api/v1/users?after=abc123>;
; foo=""bar""; rel=""next""";
            var links       = LinkHeaderParser.Parse(headerValue);

            links.Count().Should().Be(1);
            links.Single().Target.Should().Be("https://my-server.dev/api/v1/users?after=abc123");
            links.Single().Relation.Should().Be("next");
        }
        public void Parse_PrevThenNext_PageInfoIsNotFirstQueryParam()
        {
            var res = LinkHeaderParser.Parse <Product>("<https://test.myshopify.com/admin/api/2019-07/products.json?limit=3&page_info=abcdefg>; rel=\"previous\", <https://test.myshopify.com/admin/api/2019-07/products.json?limit=3&page_info=opqrstu>; rel=\"next\"");

            Assert.NotNull(res.PreviousLink);
            Assert.NotNull(res.NextLink);
            Assert.Equal(res.PreviousLink.Url, "https://test.myshopify.com/admin/api/2019-07/products.json?limit=3&page_info=abcdefg");
            Assert.Equal(res.PreviousLink.PageInfo, "abcdefg");
            Assert.Equal(res.NextLink.Url, "https://test.myshopify.com/admin/api/2019-07/products.json?limit=3&page_info=opqrstu");
            Assert.Equal(res.NextLink.PageInfo, "opqrstu");
        }
        public void Parse_PrevThenNext_WithFieldsParam()
        {
            var res = LinkHeaderParser.Parse <Product>("<https://test.myshopify.com/admin/api/2019-07/products.json?page_info=abcdefg&limit=3&fields=id,images,title>; rel=\"previous\", <https://test.myshopify.com/admin/api/2019-07/products.json?page_info=opqrstu&limit=3&fields=id,images,title>; rel=\"next\"");

            Assert.NotNull(res.PreviousLink);
            Assert.NotNull(res.NextLink);
            Assert.Equal(res.PreviousLink.Url, "https://test.myshopify.com/admin/api/2019-07/products.json?page_info=abcdefg&limit=3&fields=id,images,title");
            Assert.Equal(res.PreviousLink.PageInfo, "abcdefg");
            Assert.Equal(res.NextLink.Url, "https://test.myshopify.com/admin/api/2019-07/products.json?page_info=opqrstu&limit=3&fields=id,images,title");
            Assert.Equal(res.NextLink.PageInfo, "opqrstu");
        }
        public void Parse_NextThenPrev()
        {
            var res = LinkHeaderParser.Parse <Product>("<https://test.myshopify.com/admin/api/2019-07/products.json?page_info=opqrstu&limit=3>; rel=\"next\", <https://test.myshopify.com/admin/api/2019-07/products.json?page_info=abcdefg&limit=3>; rel=\"previous\"");

            Assert.NotNull(res.PreviousLink);
            Assert.NotNull(res.NextLink);
            Assert.Equal(res.PreviousLink.Url, "https://test.myshopify.com/admin/api/2019-07/products.json?page_info=abcdefg&limit=3");
            Assert.Equal(res.PreviousLink.PageInfo, "abcdefg");
            Assert.Equal(res.NextLink.Url, "https://test.myshopify.com/admin/api/2019-07/products.json?page_info=opqrstu&limit=3");
            Assert.Equal(res.NextLink.PageInfo, "opqrstu");
        }
Ejemplo n.º 9
0
        private static LinkItem GetNextLink(HttpResponseHeaders headers)
        {
            LinkItem             nextLink = null;
            IEnumerable <string> values;

            if (headers.TryGetValues("Link", out values))
            {
                nextLink = LinkHeaderParser.ParseLinks(values.First())?.SingleOrDefault(l => l.Rel == "next");
            }
            return(nextLink);
        }
Ejemplo n.º 10
0
        public static List <ILink> ParseLinkHeaders(this HttpHeaders headers, Uri baseUri, ILinkFactory linkRegistry)
        {
            var list        = new List <ILink>();
            var parser      = new LinkHeaderParser(linkRegistry);
            var linkHeaders = headers.GetValues("Link");

            foreach (var linkHeader in linkHeaders)
            {
                list.AddRange(parser.Parse(baseUri, linkHeader));
            }
            return(list);
        }
        public void ParseMultipleLinksInSingleValue()
        {
            var headerValue = @"
<https://my-server.dev/api/v1/users?after=abc123>; rel=""next"",
  <https://my-server.dev/api/v1/users?after=xyz987>; rel=""self""";
            var links       = LinkHeaderParser.Parse(headerValue);

            links.ElementAt(0).Target.Should().Be("https://my-server.dev/api/v1/users?after=abc123");
            links.ElementAt(0).Relation.Should().Be("next");

            links.ElementAt(1).Target.Should().Be("https://my-server.dev/api/v1/users?after=xyz987");
            links.ElementAt(1).Relation.Should().Be("self");
        }
        public void IgnoreBadLinks()
        {
            var headerValues = new List <string>()
            {
                "barbaz",
                "nope!",
                "   ",
                "<https://foo.bar>; rel=\"prev\"",
            };
            var links = LinkHeaderParser.Parse(headerValues);

            links.Count().Should().Be(1);
            links.Single().Target.Should().Be("https://foo.bar");
            links.Single().Relation.Should().Be("prev");
        }
        public void IgnoreEmptyValues()
        {
            var headerValues = new List <string>()
            {
                #pragma warning disable SA1122
                "",
                #pragma warning restore SA1122
                string.Empty,
                null,
                "<https://foo.bar>; rel=\"self\"",
            };
            var links = LinkHeaderParser.Parse(headerValues);

            links.Count().Should().Be(1);
            links.Single().Target.Should().Be("https://foo.bar");
            links.Single().Relation.Should().Be("self");
        }
        public void ParseMultipleLinks()
        {
            var headerValues = new List <string>()
            {
                "<https://my-server.dev/api/v1/users?limit=25>; rel=\"self\"",
                "<https://my-server.dev/api/v1/users?after=asdf123&limit=25>; rel=\"next\"",
            };
            var links = LinkHeaderParser.Parse(headerValues);

            links.Count().Should().Be(2);

            links.ElementAt(0).Target.Should().Be("https://my-server.dev/api/v1/users?limit=25");
            links.ElementAt(0).Relation.Should().Be("self");

            links.ElementAt(1).Target.Should().Be("https://my-server.dev/api/v1/users?after=asdf123&limit=25");
            links.ElementAt(1).Relation.Should().Be("next");
        }
Ejemplo n.º 15
0
        private static WebLink GetNextLink(HttpResponse response)
        {
            if (response?.Headers == null)
            {
                return(null);
            }

            var linkHeaders = response
                              .Headers
                              .Where(kvp => kvp.Key.Equals("Link", StringComparison.OrdinalIgnoreCase))
                              .Select(kvp => kvp.Value);

            var nextLink = LinkHeaderParser
                           .Parse(linkHeaders.SelectMany(x => x))
                           .Where(x => x.Relation == "next")
                           .FirstOrDefault();

            return(nextLink);
        }
        public void Parses_Fields_Parameter()
        {
            var res = LinkHeaderParser.Parse <Product>("<https://test.myshopify.com/admin/api/2019-07/products.json?limit=3&page_info=abcdefg&fields=id%2Ccustomer%2Ccreated_at>; rel=\"previous\", <https://test.myshopify.com/admin/api/2019-07/products.json?limit=3&page_info=opqrstu&fields=id%2Ccustomer%2Ccreated_at>; rel=\"next\"");

            Assert.NotNull(res.PreviousLink);
            Assert.NotNull(res.NextLink);
            Assert.Equal("https://test.myshopify.com/admin/api/2019-07/products.json?limit=3&page_info=abcdefg&fields=id%2Ccustomer%2Ccreated_at", res.PreviousLink.Url);
            Assert.Equal("id,customer,created_at", res.PreviousLink.Fields);
            Assert.Equal("https://test.myshopify.com/admin/api/2019-07/products.json?limit=3&page_info=opqrstu&fields=id%2Ccustomer%2Ccreated_at", res.NextLink.Url);
            Assert.Equal("id,customer,created_at", res.NextLink.Fields);

            var nextPageFilter = res.NextLink.GetFollowingPageFilter();

            Assert.Equal("id,customer,created_at", nextPageFilter.Fields);

            var previousPageFilter = res.PreviousLink.GetFollowingPageFilter();

            Assert.Equal("id,customer,created_at", previousPageFilter.Fields);
        }
Ejemplo n.º 17
0
        public async Task <ResponseCollection <T> > GetCollection <T>(string url)
            where T : IBaseMastodonEntity
        {
            var response = await GetEntirely(url).ConfigureAwait(false);

            var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

            var entity = MastodonJsonConverter.TryDeserialize <IEnumerable <T> >(content);
            var result = new ResponseCollection <T>(entity);

            result.RawJson = content;

            IEnumerable <string> link;

            if (response.Headers.TryGetValues("Link", out link))
            {
                result.Links = LinkHeaderParser.GetHeader(link.First());
            }

            return(result);
        }
        public void IgnoreEmptyArgs()
        {
            var links = LinkHeaderParser.Parse();

            links.Count().Should().Be(0);
        }
Ejemplo n.º 19
0
        public static IList <ILink> ParseLinkHeader(this ILink link, string linkHeader, ILinkFactory linkRegistry)
        {
            var parser = new LinkHeaderParser(linkRegistry);

            return(parser.Parse(link.Target, linkHeader));
        }
        public void ParseNull()
        {
            var links = LinkHeaderParser.Parse((IEnumerable <string>)null);

            links.Count().Should().Be(0);
        }
        public void ParseEmptyString()
        {
            var links = LinkHeaderParser.Parse(string.Empty);

            links.Count().Should().Be(0);
        }
        public void ParseEmptyArray()
        {
            var links = LinkHeaderParser.Parse(new string[0]);

            links.Count().Should().Be(0);
        }
Ejemplo n.º 23
0
 /// <summary>
 /// Parses a link header value into a ListResult<T>. The Items property will need to be manually set.
 /// </summary>
 protected ListResult <T> ParseLinkHeaderToListResult <T>(RequestResult <List <T> > requestResult)
 {
     return(new ListResult <T>(requestResult.Result, requestResult.RawLinkHeaderValue == null ? null : LinkHeaderParser.Parse <T>(requestResult.RawLinkHeaderValue)));
 }
        public void IgnoreNullAndEmptyArgs()
        {
            var links = LinkHeaderParser.Parse(string.Empty, null);

            links.Count().Should().Be(0);
        }