diff --git a/Kontent.Ai.Delivery.Tests/DeliveryClientTests.cs b/Kontent.Ai.Delivery.Tests/DeliveryClientTests.cs index 7ed77e24..2b0a4e6e 100644 --- a/Kontent.Ai.Delivery.Tests/DeliveryClientTests.cs +++ b/Kontent.Ai.Delivery.Tests/DeliveryClientTests.cs @@ -732,9 +732,8 @@ public async Task GetLanguagesAsync() [Fact] public async Task QueryParameters() { - string url = $"{_baseUrl}/items?elements.personas%5Ball%5D=barista%2Ccoffee%2Cblogger&elements.personas%5Bany%5D=barista%2Ccoffee%2Cblogger&system.sitemap_locations%5Bcontains%5D=cafes&elements.product_name%5Beq%5D=Hario%20V60&elements.product_name%5Bneq%5D=Hario%20V42&elements.price%5Bgt%5D=1000&elements.price%5Bgte%5D=50&system.type%5Bin%5D=cafe%2Ccoffee&system.type%5Bnin%5D=article%2Cblog_post&elements.price%5Blt%5D=10&elements.price%5Blte%5D=4&elements.country%5Brange%5D=Guatemala%2CNicaragua&elements.price%5Bempty%5D&elements.country%5Bnempty%5D&depth=2&elements=price%2Cproduct_name&limit=10&order=elements.price%5Bdesc%5D&skip=2&language=en&includeTotalCount"; - _mockHttp - .When($"{url}") + _mockHttp.Expect($"{_baseUrl}/items") + .WithExactQueryString("elements.personas%5Ball%5D=barista%2Ccoffee%2Cblogger&elements.personas%5Bany%5D=barista%2Ccoffee%2Cblogger&system.sitemap_locations%5Bcontains%5D=cafes&elements.product_name%5Beq%5D=Hario%20V60&elements.product_name%5Bneq%5D=Hario%20V42&elements.price%5Bgt%5D=1000&elements.price%5Bgte%5D=50&system.type%5Bin%5D=cafe%2Ccoffee&system.type%5Bnin%5D=article%2Cblog_post&elements.price%5Blt%5D=10&elements.price%5Blte%5D=4&elements.country%5Brange%5D=Guatemala%2CNicaragua&elements.price%5Bempty%5D&elements.country%5Bnempty%5D&depth=2&elements=price%2Cproduct_name&excludeElements=product_description%2Cproduct_thumbnail&limit=10&order=elements.price%5Bdesc%5D&skip=2&language=en&includeTotalCount") .Respond("application/json", " { 'items': [],'modular_content': {},'pagination': {'skip': 2,'limit': 10,'count': 0, 'total_count': 0, 'next_page': ''}}"); var client = InitializeDeliveryClientWithACustomTypeProvider(_mockHttp); @@ -757,6 +756,7 @@ public async Task QueryParameters() new NotEmptyFilter("elements.country"), new DepthParameter(2), new ElementsParameter("price", "product_name"), + new ExcludeElementsParameter("product_description", "product_thumbnail"), new LimitParameter(10), new OrderParameter("elements.price", SortOrder.Descending), new SkipParameter(2), diff --git a/Kontent.Ai.Urls/Delivery/QueryParameters/ExcludeElementsParameter.cs b/Kontent.Ai.Urls/Delivery/QueryParameters/ExcludeElementsParameter.cs new file mode 100644 index 00000000..f4fd1215 --- /dev/null +++ b/Kontent.Ai.Urls/Delivery/QueryParameters/ExcludeElementsParameter.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Kontent.Ai.Delivery.Abstractions; + +namespace Kontent.Ai.Urls.Delivery.QueryParameters +{ + /// + /// Specifies the content elements to exclude from response. + /// + public sealed class ExcludeElementsParameter : IQueryParameter + { + /// + /// Gets the list of codenames of content elements that should be excluded from response. + /// + public IReadOnlyList ElementCodenames { get; } + + /// + /// Initializes a new instance of the class using the specified content elements codenames. + /// + /// An array that contains zero or more codenames of the content elements that should be excluded from response. + public ExcludeElementsParameter(params string[] elementCodenames) + { + ElementCodenames = elementCodenames.ToList().AsReadOnly(); + } + + /// + /// Returns the query string representation of the query parameter. + /// + public string GetQueryStringParameter() + { + return $"excludeElements={string.Join(Uri.EscapeDataString(","), ElementCodenames.Select(Uri.EscapeDataString))}"; + } + } +} \ No newline at end of file