Skip to content

Commit

Permalink
Add support for exclude parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
zdenekjurka authored and pokornyd committed Mar 6, 2024
1 parent e2045fe commit 9149af7
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
6 changes: 3 additions & 3 deletions Kontent.Ai.Delivery.Tests/DeliveryClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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&exclude=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);
Expand All @@ -757,6 +756,7 @@ public async Task QueryParameters()
new NotEmptyFilter("elements.country"),
new DepthParameter(2),
new ElementsParameter("price", "product_name"),
new ExcludeParameter("product_description", "product_thumbnail"),
new LimitParameter(10),
new OrderParameter("elements.price", SortOrder.Descending),
new SkipParameter(2),
Expand Down
35 changes: 35 additions & 0 deletions Kontent.Ai.Urls/Delivery/QueryParameters/ExcludeParameter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Kontent.Ai.Delivery.Abstractions;

namespace Kontent.Ai.Urls.Delivery.QueryParameters
{
/// <summary>
/// Specifies the content elements to exclude from response.
/// </summary>
public sealed class ExcludeParameter : IQueryParameter
{
/// <summary>
/// Gets the list of codenames of content elements that should be excluded from response.
/// </summary>
public IReadOnlyList<string> ElementCodenames { get; }

/// <summary>
/// Initializes a new instance of the <see cref="ExcludeParameter"/> class using the specified content elements codenames.
/// </summary>
/// <param name="elementCodenames">An array that contains zero or more codenames of the content elements that should be excluded from response.</param>
public ExcludeParameter(params string[] elementCodenames)
{
ElementCodenames = elementCodenames.ToList().AsReadOnly();
}

/// <summary>
/// Returns the query string representation of the query parameter.
/// </summary>
public string GetQueryStringParameter()
{
return $"exclude={string.Join(Uri.EscapeDataString(","), ElementCodenames.Select(Uri.EscapeDataString))}";
}
}
}

0 comments on commit 9149af7

Please sign in to comment.