Skip to content

Commit

Permalink
Improve query.
Browse files Browse the repository at this point in the history
  • Loading branch information
SebastianStehle committed Aug 18, 2024
1 parent 655a8e7 commit 1801be3
Show file tree
Hide file tree
Showing 7 changed files with 494 additions and 87 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,58 +12,182 @@ public class ContentQueryTests
private readonly SquidexOptions options = new SquidexOptions();

[Fact]
public void Should_create_query_for_empty_query()
public void ContentQuery_as_default()
{
var query = new ContentQuery().ToQuery(true, options);
var query = new ContentQuery()
.ToQuery(true, options)
.ToString();

Assert.Empty(query);
Assert.Equal(string.Empty, query);
}

[Fact]
public void Should_create_query_for_top()
public void ContentQuery_with_top()
{
var query = new ContentQuery { Top = 10 }.ToQuery(true, options);
var query = new ContentQuery { Top = 10 }
.ToQuery(true, options)
.ToString();

Assert.Equal("?$top=10", query);
}

[Fact]
public void Should_create_query_for_skip()
public void ContentQuery_with_skip()
{
var query = new ContentQuery { Skip = 10 }.ToQuery(true, options);
var query = new ContentQuery { Skip = 10 }
.ToQuery(true, options)
.ToString();

Assert.Equal("?$skip=10", query);
}

[Fact]
public void Should_create_query_for_skip_and_top()
public void ContentQuery_with_skip_and_top()
{
var query = new ContentQuery { Skip = 20, Top = 10 }.ToQuery(true, options);
var query = new ContentQuery { Skip = 20, Top = 10 }
.ToQuery(true, options)
.ToString();

Assert.Equal("?$skip=20&$top=10", query);
}

[Fact]
public void Should_create_query_for_filter()
public void ContentQuery_with_filter()
{
var query = new ContentQuery { Filter = "my-filter" }.ToQuery(true, options);
var query = new ContentQuery { Filter = "my-filter" }
.ToQuery(true, options)
.ToString();

Assert.Equal("?$filter=my-filter", query);
}

[Fact]
public void Should_create_query_for_search()
public void ContentQuery_with_search()
{
var query = new ContentQuery { Search = "my-search" }.ToQuery(true, options);
var query = new ContentQuery { Search = "my-search" }
.ToQuery(true, options)
.ToString();

Assert.Equal("?$search=\"my-search\"", query);
}

[Fact]
public void Should_create_query_for_search_and_filter()
public void ContentQuery_with_search_and_filter()
{
var query = new ContentQuery { Search = "my-search", Filter = "my-filter" }.ToQuery(true, options);
var query = new ContentQuery { Search = "my-search", Filter = "my-filter" }
.ToQuery(true, options)
.ToString();

Assert.Equal("?$search=\"my-search\"&$filter=my-filter", query);
Assert.Equal("?$filter=my-filter&$search=\"my-search\"", query);
}

[Fact]
public void ContentQuery_with_ids()
{
var query = new ContentQuery { Ids = ["1", "2", "3"] }
.ToQuery(true, options)
.ToString();

Assert.Equal("?ids=1%2C2%2C3", query);
}

[Fact]
public void ContentCreateOptions_as_default()
{
var query = default(ContentCreateOptions)
.ToQuery()
.ToString();

Assert.Equal(string.Empty, query);
}

[Fact]
public void ContentCreateOptions_with_everything()
{
var query = new ContentCreateOptions { Id = "1", Publish = true }
.ToQuery()
.ToString();

Assert.Equal("?id=1&publish=true", query);
}

[Fact]
public void ContentUpsertOptions_as_default()
{
var query = default(ContentUpsertOptions)
.ToQuery()
.ToString();

Assert.Equal(string.Empty, query);
}

[Fact]
public void ContentUpsertOptions_with_everything()
{
var query = new ContentUpsertOptions { Publish = true, Patch = true, EnrichDefaults = true, EnrichRequiredFields = true }
.ToQuery()
.ToString();

Assert.Equal("?enrichDefaults=true&enrichRequiredFields=true&patch=true&publish=true", query);
}

[Fact]
public void ContentDeleteOptions_as_default()
{
var query = default(ContentDeleteOptions)
.ToQuery()
.ToString();

Assert.Equal(string.Empty, query);
}

[Fact]
public void ContentDeleteOptions_with_everything()
{
var query = new ContentDeleteOptions { Permanent = true }
.ToQuery()
.ToString();

Assert.Equal("?permanent=true", query);
}

[Fact]
public void ContentUpdateOptions_as_default()
{
var query = default(ContentUpdateOptions)
.ToQuery()
.ToString();

Assert.Equal(string.Empty, query);
}

[Fact]
public void ContentUpdateOptions_with_everything()
{
var query = new ContentUpdateOptions { EnrichDefaults = true, EnrichRequiredFields = true }
.ToQuery()
.ToString();

Assert.Equal("?enrichDefaults=true&enrichRequiredFields=true", query);
}

[Fact]
public void ContentEnrichDefaultsOptions_as_default()
{
var query = default(ContentEnrichDefaultsOptions)
.ToQuery()
.ToString();

Assert.Equal(string.Empty, query);
}

[Fact]
public void ContentEnrichDefaultsOptions_with_everything()
{
var query = new ContentEnrichDefaultsOptions { EnrichRequiredFields = true }
.ToQuery()
.ToString();

Assert.Equal("?enrichRequiredFields=true", query);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================

using Squidex.ClientLibrary.Utils;

namespace Squidex.ClientLibrary.Tests;

public class QueryTests
{
[Fact]
public void Should_build_empty_query()
{
var q = Query.Create().ToString();

Assert.Equal(string.Empty, q);
}

[Fact]
public void Should_build_query1()
{
var q = Query.Create().Append("k1", "v1").ToString();

Assert.Equal("?k1=v1", q);
}

[Fact]
public void Should_build_query2()
{
var q = Query.Create().Append("k1", "v1").Append("k2", "v2").ToString();

Assert.Equal("?k1=v1&k2=v2", q);
}

[Fact]
public void Should_build_escaped()
{
var q = Query.Create().Append("k1", "v1").Append("k2", "v2", true).ToString();

Assert.Equal("?k1=v1&k2=\"v2\"", q);
}

[Fact]
public void Should_not_append_default_boolean()
{
var q = Query.Create().Append("k1", false).Append("k2", true).ToString();

Assert.Equal("?k2=true", q);
}

[Fact]
public void Should_not_append_default_number()
{
var q = Query.Create().Append("k1", 0).Append("k2", 42).ToString();

Assert.Equal("?k2=42", q);
}

[Fact]
public void Should_not_append_default_nullable()
{
var q = Query.Create().Append("k1", default(int?)).Append("k2", (int?)42).ToString();

Assert.Equal("?k2=42", q);
}

[Fact]
public void Should_build_list()
{
var q = Query.Create().AppendMany("k1", new List<int> { 1, 2, 3 }).ToString();

Assert.Equal("?k1=1%2C2%2C3", q);
}

[Fact]
public void Should_not_build_null_list()
{
var q = Query.Create().AppendMany("k1", (List<int>)null!).ToString();

Assert.Equal(string.Empty, q);
}

[Fact]
public void Should_not_build_empty_list()
{
var q = Query.Create().AppendMany("k1", new List<int>()).ToString();

Assert.Equal(string.Empty, q);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<IsPackable>false</IsPackable>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

#pragma warning disable MA0048 // File name must match type name

using Squidex.ClientLibrary.Utils;

namespace Squidex.ClientLibrary;

/// <summary>
Expand Down Expand Up @@ -45,6 +47,13 @@ public record struct ContentCreateOptions
/// </summary>
public bool Publish { get; set; }

internal readonly Query ToQuery()
{
return Query.Create()
.Append("id", Id)
.Append("publish", Publish);
}

/// <summary>
/// A option where <see cref="Publish"/> is true.
/// </summary>
Expand Down Expand Up @@ -74,6 +83,20 @@ public record struct ContentUpsertOptions
/// </summary>
public bool EnrichDefaults { get; set; }

/// <summary>
/// True, to also enrich required fields. Default: false.
/// </summary>
public bool EnrichRequiredFields { get; set; }

internal readonly Query ToQuery()
{
return Query.Create()
.Append("enrichDefaults", EnrichDefaults)
.Append("enrichRequiredFields", EnrichRequiredFields)
.Append("patch", Patch)
.Append("publish", Publish);
}

/// <summary>
/// A option where <see cref="Publish"/> is true.
/// </summary>
Expand Down Expand Up @@ -114,6 +137,13 @@ public record struct ContentDeleteOptions
/// </summary>
public bool CheckReferrers { get; set; }

internal readonly Query ToQuery()
{
return Query.Create()
.Append("permanent", Permanent)
.Append("checkReferrers", CheckReferrers);
}

/// <summary>
/// A option where <see cref="Permanent"/> is true.
/// </summary>
Expand All @@ -133,6 +163,18 @@ public record struct ContentUpdateOptions
/// </summary>
public bool EnrichDefaults { get; set; }

/// <summary>
/// True, to also enrich required fields. Default: false.
/// </summary>
public bool EnrichRequiredFields { get; set; }

internal readonly Query ToQuery()
{
return Query.Create()
.Append("enrichDefaults", EnrichDefaults)
.Append("enrichRequiredFields", EnrichRequiredFields);
}

/// <summary>
/// A option where <see cref="EnrichDefaults"/> is true.
/// </summary>
Expand Down Expand Up @@ -173,6 +215,12 @@ public record struct ContentEnrichDefaultsOptions
/// </summary>
public bool EnrichRequiredFields { get; set; }

internal readonly Query ToQuery()
{
return Query.Create()
.Append("enrichRequiredFields", EnrichRequiredFields);
}

/// <summary>
/// A option where <see cref="EnrichRequiredFields"/> is true.
/// </summary>
Expand Down
Loading

0 comments on commit 1801be3

Please sign in to comment.