Browse Source

Test for filter of json fields. (#826)

* Test for filter of json fields.

* Fix test.
pull/830/head
Sebastian Stehle 5 years ago
committed by GitHub
parent
commit
7123f70de2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      backend/src/Squidex/wwwroot/scripts/editor-json-schema.html
  2. 4
      backend/tools/TestSuite/TestSuite.ApiTests/ContentCleanupTests.cs
  3. 137
      backend/tools/TestSuite/TestSuite.ApiTests/ContentQueryTests.cs
  4. 6
      backend/tools/TestSuite/TestSuite.ApiTests/ContentScriptingTests.cs
  5. 80
      backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs
  6. 10
      backend/tools/TestSuite/TestSuite.LoadTests/ReadingContentBenchmarks.cs
  7. 2
      backend/tools/TestSuite/TestSuite.LoadTests/WritingBenchmarks.cs
  8. 15
      backend/tools/TestSuite/TestSuite.Shared/Fixtures/ContentQueryFixture1to10.cs
  9. 37
      backend/tools/TestSuite/TestSuite.Shared/Model/TestEntity.cs

2
backend/src/Squidex/wwwroot/scripts/editor-json-schema.html

@ -10,7 +10,7 @@
<script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@rjsf/core/dist/react-jsonschema-form.js"></script>
<link rel="stylesheet" type="text/css" href="https://cloud.squidex.io/build/app.css">
<link rel="stylesheet" type="text/css" href="https://cloud.squidex.io/build/styles.css">
<style>
body {

4
backend/tools/TestSuite/TestSuite.ApiTests/ContentCleanupTests.cs

@ -35,7 +35,7 @@ namespace TestSuite.ApiTests
// STEP 2: Create a content for this schema.
var data = new TestEntityData { Number = 12, String = "hello" };
var data = new TestEntityData { Number1 = 12, String = "hello" };
var content_1 = await contents.CreateAsync(data);
@ -43,7 +43,7 @@ namespace TestSuite.ApiTests
// STEP 3: Delete a field from schema.
await _.Schemas.DeleteFieldAsync(_.AppName, schema.Name, schema.Fields[1].FieldId);
await _.Schemas.DeleteFieldAsync(_.AppName, schema.Name, schema.Fields.First(x => x.Name == TestEntityData.StringField).FieldId);
// STEP 4: Make any update.

137
backend/tools/TestSuite/TestSuite.ApiTests/ContentQueryTests.cs

@ -46,7 +46,7 @@ namespace TestSuite.ApiTests
{
var items = await _.Contents.GetAsync(new ContentQuery
{
OrderBy = "data/number/iv asc"
OrderBy = "data/number1/iv asc"
});
var itemsById = await _.Contents.GetAsync(new HashSet<string>(items.Items.Take(3).Select(x => x.Id)));
@ -66,7 +66,7 @@ namespace TestSuite.ApiTests
{
var items = await _.Contents.GetAsync(new ContentQuery
{
OrderBy = "data/number/iv asc"
OrderBy = "data/number1/iv asc"
});
AssertItems(items, 10, new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
@ -83,7 +83,7 @@ namespace TestSuite.ApiTests
{
new
{
path = "data.number.iv", order = "ascending"
path = "data.number1.iv", order = "ascending"
}
}
}
@ -97,7 +97,7 @@ namespace TestSuite.ApiTests
{
var items = await _.Contents.GetAsync(new ContentQuery
{
Skip = 5, OrderBy = "data/number/iv asc"
Skip = 5, OrderBy = "data/number1/iv asc"
});
AssertItems(items, 10, new[] { 6, 7, 8, 9, 10 });
@ -114,7 +114,7 @@ namespace TestSuite.ApiTests
{
new
{
path = "data.number.iv", order = "ascending"
path = "data.number1.iv", order = "ascending"
}
},
skip = 5
@ -129,7 +129,7 @@ namespace TestSuite.ApiTests
{
var items = await _.Contents.GetAsync(new ContentQuery
{
Skip = 2, Top = 5, OrderBy = "data/number/iv asc"
Skip = 2, Top = 5, OrderBy = "data/number1/iv asc"
});
AssertItems(items, 10, new[] { 3, 4, 5, 6, 7 });
@ -146,7 +146,7 @@ namespace TestSuite.ApiTests
{
new
{
path = "data.number.iv", order = "ascending"
path = "data.number1.iv", order = "ascending"
}
},
skip = 2, top = 5
@ -161,7 +161,7 @@ namespace TestSuite.ApiTests
{
var items = await _.Contents.GetAsync(new ContentQuery
{
Filter = "data/number/iv gt 3 and data/number/iv lt 7", OrderBy = "data/number/iv asc"
Filter = "data/number1/iv gt 3 and data/number1/iv lt 7", OrderBy = "data/number1/iv asc"
});
AssertItems(items, 3, new[] { 4, 5, 6 });
@ -178,7 +178,7 @@ namespace TestSuite.ApiTests
{
new
{
path = "data.number.iv", order = "ascending"
path = "data.number1.iv", order = "ascending"
}
},
filter = new
@ -187,13 +187,51 @@ namespace TestSuite.ApiTests
{
new
{
path = "data.number.iv",
path = "data.number1.iv",
op = "gt",
value = 3
},
new
{
path = "data.number.iv",
path = "data.number1.iv",
op = "lt",
value = 7
}
}
}
}
});
AssertItems(items, 3, new[] { 4, 5, 6 });
}
[Fact]
public async Task Should_return_items_by_json_filter_with_json()
{
var items = await _.Contents.GetAsync(new ContentQuery
{
JsonQuery = new
{
sort = new[]
{
new
{
path = "data.json.iv.nested1.nested2", order = "ascending"
}
},
filter = new
{
and = new[]
{
new
{
path = "data.json.iv.nested1.nested2",
op = "gt",
value = 3
},
new
{
path = "data.json.iv.nested1.nested2",
op = "lt",
value = 7
}
@ -380,13 +418,19 @@ namespace TestSuite.ApiTests
query = @"
mutation {
createMyReadsContent(data: {
number: {
iv: 999
number1: {
iv: 555
},
number2: {
iv: 556
}
}) {
id,
data {
number {
number1 {
iv
},
number2 {
iv
}
}
@ -396,9 +440,11 @@ namespace TestSuite.ApiTests
var result = await _.Contents.GraphQlAsync<JObject>(query);
var value = result["createMyReadsContent"]["data"]["number"]["iv"].Value<int>();
var value1 = result["createMyReadsContent"]["data"]["number1"]["iv"].Value<int>();
var value2 = result["createMyReadsContent"]["data"]["number2"]["iv"].Value<int>();
Assert.Equal(999, value);
Assert.Equal(555, value1);
Assert.Equal(556, value2);
}
[Fact]
@ -411,7 +457,10 @@ namespace TestSuite.ApiTests
createMyReadsContent(data: $data) {
id,
data {
number {
number1 {
iv
}
number2 {
iv
}
}
@ -421,9 +470,13 @@ namespace TestSuite.ApiTests
{
data = new
{
number = new
number1 = new
{
iv = 998
},
number2 = new
{
iv = 999
}
}
}
@ -431,9 +484,11 @@ namespace TestSuite.ApiTests
var result = await _.Contents.GraphQlAsync<JObject>(query);
var value = result["createMyReadsContent"]["data"]["number"]["iv"].Value<int>();
var value1 = result["createMyReadsContent"]["data"]["number1"]["iv"].Value<int>();
var value2 = result["createMyReadsContent"]["data"]["number2"]["iv"].Value<int>();
Assert.Equal(998, value);
Assert.Equal(998, value1);
Assert.Equal(999, value2);
}
[Fact]
@ -443,10 +498,10 @@ namespace TestSuite.ApiTests
{
query = @"
query ContentsQuery($filter: String!) {
queryMyReadsContents(filter: $filter, orderby: ""data/number/iv asc"") {
queryMyReadsContents(filter: $filter, orderby: ""data/number1/iv asc"") {
id,
data {
number {
number1 {
iv
}
}
@ -454,7 +509,7 @@ namespace TestSuite.ApiTests
}",
variables = new
{
filter = @"data/number/iv gt 3 and data/number/iv lt 7"
filter = @"data/number1/iv gt 3 and data/number1/iv lt 7"
}
};
@ -462,10 +517,10 @@ namespace TestSuite.ApiTests
{
query = @"
query ContentsQuery($filter: String!) {
queryMyReadsContents(filter: $filter, orderby: ""data/number/iv asc"") {
queryMyReadsContents(filter: $filter, orderby: ""data/number1/iv asc"") {
id,
data {
number {
number1 {
iv
}
}
@ -473,7 +528,7 @@ namespace TestSuite.ApiTests
}",
variables = new
{
filter = @"data/number/iv gt 4 and data/number/iv lt 7"
filter = @"data/number1/iv gt 4 and data/number1/iv lt 7"
}
};
@ -482,8 +537,8 @@ namespace TestSuite.ApiTests
var items1 = results.ElementAt(0).Data.Items;
var items2 = results.ElementAt(1).Data.Items;
Assert.Equal(items1.Select(x => x.Data.Number).ToArray(), new[] { 4, 5, 6 });
Assert.Equal(items2.Select(x => x.Data.Number).ToArray(), new[] { 5, 6 });
Assert.Equal(items1.Select(x => x.Data.Number1).ToArray(), new[] { 4, 5, 6 });
Assert.Equal(items2.Select(x => x.Data.Number1).ToArray(), new[] { 5, 6 });
}
[Fact]
@ -493,10 +548,10 @@ namespace TestSuite.ApiTests
{
query = @"
query ContentsQuery($filter: String!) {
queryMyReadsContents(filter: $filter, orderby: ""data/number/iv asc"") {
queryMyReadsContents(filter: $filter, orderby: ""data/number1/iv asc"") {
id,
data {
number {
number1 {
iv
}
}
@ -504,7 +559,7 @@ namespace TestSuite.ApiTests
}",
variables = new
{
filter = @"data/number/iv gt 3 and data/number/iv lt 7"
filter = @"data/number1/iv gt 3 and data/number1/iv lt 7"
}
};
@ -512,7 +567,7 @@ namespace TestSuite.ApiTests
var items = result.Items;
Assert.Equal(items.Select(x => x.Data.Number).ToArray(), new[] { 4, 5, 6 });
Assert.Equal(items.Select(x => x.Data.Number1).ToArray(), new[] { 4, 5, 6 });
}
[Fact]
@ -522,10 +577,10 @@ namespace TestSuite.ApiTests
{
query = @"
query ContentsQuery($filter: String!) {
queryMyReadsContents(filter: $filter, orderby: ""data/number/iv asc"") {
queryMyReadsContents(filter: $filter, orderby: ""data/number1/iv asc"") {
id,
data {
number {
number1 {
iv
}
}
@ -533,7 +588,7 @@ namespace TestSuite.ApiTests
}",
variables = new
{
filter = @"data/number/iv gt 3 and data/number/iv lt 7"
filter = @"data/number1/iv gt 3 and data/number1/iv lt 7"
}
};
@ -541,7 +596,7 @@ namespace TestSuite.ApiTests
var items = result.Items;
Assert.Equal(items.Select(x => x.Data.Number).ToArray(), new[] { 4, 5, 6 });
Assert.Equal(items.Select(x => x.Data.Number1).ToArray(), new[] { 4, 5, 6 });
}
[Fact]
@ -551,10 +606,10 @@ namespace TestSuite.ApiTests
{
query = @"
{
queryMyReadsContents(filter: ""data/number/iv gt 3 and data/number/iv lt 7"", orderby: ""data/number/iv asc"") {
queryMyReadsContents(filter: ""data/number1/iv gt 3 and data/number1/iv lt 7"", orderby: ""data/number1/iv asc"") {
id,
data {
number {
number1 {
iv
}
}
@ -566,7 +621,7 @@ namespace TestSuite.ApiTests
var items = result["queryMyReadsContents"];
Assert.Equal(items.Select(x => x["data"]["number"]["iv"].Value<int>()).ToArray(), new[] { 4, 5, 6 });
Assert.Equal(items.Select(x => x["data"]["number1"]["iv"].Value<int>()).ToArray(), new[] { 4, 5, 6 });
}
private sealed class QueryResult
@ -585,13 +640,13 @@ namespace TestSuite.ApiTests
private sealed class QueryItemData
{
[JsonConverter(typeof(InvariantConverter))]
public int Number { get; set; }
public int Number1 { get; set; }
}
private static void AssertItems(ContentsResult<TestEntity, TestEntityData> entities, int total, int[] expected)
{
Assert.Equal(total, entities.Total);
Assert.Equal(expected, entities.Items.Select(x => x.Data.Number).ToArray());
Assert.Equal(expected, entities.Items.Select(x => x.Data.Number1).ToArray());
}
}
}

6
backend/tools/TestSuite/TestSuite.ApiTests/ContentScriptingTests.cs

@ -41,7 +41,7 @@ namespace TestSuite.ApiTests
replace()",
Create = @$"
ctx.data.{TestEntityData.NumberField}.iv *= 2;
ctx.data.{TestEntityData.Number1Field}.iv *= 2;
replace()"
});
@ -49,11 +49,11 @@ namespace TestSuite.ApiTests
// STEP 3: Create content
var contents = _.ClientManager.CreateContentsClient<TestEntity, TestEntityData>(schemaName);
var data = new TestEntityData { Number = 13, String = "Hello" };
var data = new TestEntityData { Number1 = 13, String = "Hello" };
var content = await contents.CreateAsync(data);
Assert.Equal(26, content.Data.Number);
Assert.Equal(26, content.Data.Number1);
Assert.Equal("Hello_Updated", content.Data.String);
}
}

80
backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs

@ -34,7 +34,7 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Create the item unpublished.
content = await _.Contents.CreateAsync(new TestEntityData { Number = 1 });
content = await _.Contents.CreateAsync(new TestEntityData { Number1 = 1 });
// STEP 2: Publish the item.
@ -60,7 +60,7 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Create the item published.
content = await _.Contents.CreateAsync(new TestEntityData { Number = 1 }, true);
content = await _.Contents.CreateAsync(new TestEntityData { Number1 = 1 }, true);
// STEP 2: Archive the item.
@ -86,7 +86,7 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Create the item unpublished.
content = await _.Contents.CreateAsync(new TestEntityData { Number = 1 });
content = await _.Contents.CreateAsync(new TestEntityData { Number1 = 1 });
// STEP 2: Change the status to publiushed and then to draft.
@ -196,9 +196,9 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Create a content item with a value that triggers the schema.
content = await _.Contents.CreateAsync(new TestEntityData { Number = -99 }, true);
content = await _.Contents.CreateAsync(new TestEntityData { Number1 = -99 }, true);
Assert.True(content.Data.Number > 0);
Assert.True(content.Data.Number1 > 0);
}
finally
{
@ -226,7 +226,7 @@ namespace TestSuite.ApiTests
Type = BulkUpdateType.Upsert,
Data = new
{
number = new
number1 = new
{
iv = TestEntity.ScriptTrigger
}
@ -243,7 +243,7 @@ namespace TestSuite.ApiTests
// STEP 2: Query content.
content = await _.Contents.GetAsync(results[0].ContentId);
Assert.True(content.Data.Number > 0);
Assert.True(content.Data.Number1 > 0);
}
finally
{
@ -270,7 +270,7 @@ namespace TestSuite.ApiTests
Type = BulkUpdateType.Upsert,
Data = new
{
number = new
number1 = new
{
iv = TestEntity.ScriptTrigger
}
@ -287,7 +287,7 @@ namespace TestSuite.ApiTests
// STEP 2: Query content.
content = await _.Contents.GetAsync(results[0].ContentId);
Assert.Equal(-99, content.Data.Number);
Assert.Equal(-99, content.Data.Number1);
}
finally
{
@ -305,7 +305,7 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Create the item unpublished.
content = await _.Contents.CreateAsync(new TestEntityData { Number = 1 });
content = await _.Contents.CreateAsync(new TestEntityData { Number1 = 1 });
// STEP 2. Get a 404 for the item because it is not published.
@ -327,7 +327,7 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Create the item published.
content = await _.Contents.CreateAsync(new TestEntityData { Number = 1 }, true);
content = await _.Contents.CreateAsync(new TestEntityData { Number1 = 1 }, true);
// STEP 2: Get the item.
@ -351,7 +351,7 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Create a new item with a custom id.
content = await _.Contents.CreateAsync(new TestEntityData { Number = 1 }, id, true);
content = await _.Contents.CreateAsync(new TestEntityData { Number1 = 1 }, id, true);
Assert.Equal(id, content.Id);
}
@ -373,13 +373,13 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Create a new item with a custom id.
content = await _.Contents.CreateAsync(new TestEntityData { Number = 1 }, id, true);
content = await _.Contents.CreateAsync(new TestEntityData { Number1 = 1 }, id, true);
Assert.Equal(id, content.Id);
// STEP 2: Create a new item with a custom id.
var ex = await Assert.ThrowsAsync<SquidexException>(() => _.Contents.CreateAsync(new TestEntityData { Number = 1 }, id, true));
var ex = await Assert.ThrowsAsync<SquidexException>(() => _.Contents.CreateAsync(new TestEntityData { Number1 = 1 }, id, true));
Assert.Contains("\"statusCode\":409", ex.Message, StringComparison.Ordinal);
}
@ -401,21 +401,21 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Upsert a new item with a custom id.
content = await _.Contents.UpsertAsync(id, new TestEntityData { Number = 1 }, true);
content = await _.Contents.UpsertAsync(id, new TestEntityData { Number1 = 1 }, true);
Assert.Equal(id, content.Id);
// STEP 2: Make an update with the upsert endpoint.
content = await _.Contents.UpsertAsync(id, new TestEntityData { Number = 2 });
content = await _.Contents.UpsertAsync(id, new TestEntityData { Number1 = 2 });
Assert.Equal(2, content.Data.Number);
Assert.Equal(2, content.Data.Number1);
// STEP 3: Make an update with the update endpoint.
content = await _.Contents.UpdateAsync(id, new TestEntityData { Number = 3 });
content = await _.Contents.UpdateAsync(id, new TestEntityData { Number1 = 3 });
Assert.Equal(3, content.Data.Number);
Assert.Equal(3, content.Data.Number1);
}
finally
{
@ -433,15 +433,15 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Create a new item.
content = await _.Contents.CreateAsync(new TestEntityData { Number = 2 }, true);
content = await _.Contents.CreateAsync(new TestEntityData { Number1 = 2 }, true);
// STEP 2: Update the item and ensure that the data has changed.
await _.Contents.UpdateAsync(content.Id, new TestEntityData { Number = 2 });
await _.Contents.UpdateAsync(content.Id, new TestEntityData { Number1 = 2 });
var updated = await _.Contents.GetAsync(content.Id);
Assert.Equal(2, content.Data.Number);
Assert.Equal(2, content.Data.Number1);
}
finally
{
@ -489,15 +489,15 @@ namespace TestSuite.ApiTests
// STEP 2: Path an item.
await _.Contents.PatchAsync(content.Id, new TestEntityData { Number = 1 });
await _.Contents.PatchAsync(content.Id, new TestEntityData { Number1 = 1 });
// STEP 3: Update the item and ensure that the data has changed.
await _.Contents.PatchAsync(content.Id, new TestEntityData { Number = 2 });
await _.Contents.PatchAsync(content.Id, new TestEntityData { Number1 = 2 });
var updated = await _.Contents.GetAsync(content.Id);
Assert.Equal(2, updated.Data.Number);
Assert.Equal(2, updated.Data.Number1);
// Should not change other value with patch.
Assert.Equal("test", updated.Data.String);
@ -570,7 +570,7 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Create a new item.
content = await _.Contents.CreateAsync(new TestEntityData { Number = 1 }, true);
content = await _.Contents.CreateAsync(new TestEntityData { Number1 = 1 }, true);
// STEP 2: Create draft.
@ -578,17 +578,17 @@ namespace TestSuite.ApiTests
// STEP 3: Update the item and ensure that the data has not changed.
await _.Contents.PatchAsync(content.Id, new TestEntityData { Number = 2 });
await _.Contents.PatchAsync(content.Id, new TestEntityData { Number1 = 2 });
var updated_1 = await _.Contents.GetAsync(content.Id);
Assert.Equal(1, updated_1.Data.Number);
Assert.Equal(1, updated_1.Data.Number1);
// STEP 4: Get the unpublished version
var unpublished = await _.Contents.GetAsync(content.Id, QueryContext.Default.Unpublished());
Assert.Equal(2, unpublished.Data.Number);
Assert.Equal(2, unpublished.Data.Number1);
// STEP 5: Publish draft and ensure that it has been updated.
@ -596,7 +596,7 @@ namespace TestSuite.ApiTests
var updated_2 = await _.Contents.GetAsync(content.Id);
Assert.Equal(2, updated_2.Data.Number);
Assert.Equal(2, updated_2.Data.Number1);
}
finally
{
@ -613,7 +613,7 @@ namespace TestSuite.ApiTests
public async Task Should_delete_content(bool permanent)
{
// STEP 1: Create a new item.
var content_1 = await _.Contents.CreateAsync(new TestEntityData { Number = 2 }, true);
var content_1 = await _.Contents.CreateAsync(new TestEntityData { Number1 = 2 }, true);
// STEP 2: Delete the item.
@ -641,7 +641,7 @@ namespace TestSuite.ApiTests
public async Task Should_recreate_deleted_content(bool permanent)
{
// STEP 1: Create a new item.
var content_1 = await _.Contents.CreateAsync(new TestEntityData { Number = 2 }, true);
var content_1 = await _.Contents.CreateAsync(new TestEntityData { Number1 = 2 }, true);
// STEP 2: Delete the item.
@ -649,7 +649,7 @@ namespace TestSuite.ApiTests
// STEP 3: Recreate the item with the same id.
var content_2 = await _.Contents.CreateAsync(new TestEntityData { Number = 2 }, content_1.Id, true);
var content_2 = await _.Contents.CreateAsync(new TestEntityData { Number1 = 2 }, content_1.Id, true);
Assert.Equal(Status.Published, content_2.Status);
@ -666,7 +666,7 @@ namespace TestSuite.ApiTests
public async Task Should_recreate_deleted_content_with_upsert(bool permanent)
{
// STEP 1: Create a new item.
var content_1 = await _.Contents.CreateAsync(new TestEntityData { Number = 2 }, true);
var content_1 = await _.Contents.CreateAsync(new TestEntityData { Number1 = 2 }, true);
// STEP 2: Delete the item.
@ -674,7 +674,7 @@ namespace TestSuite.ApiTests
// STEP 3: Recreate the item with the same id.
var content_2 = await _.Contents.UpsertAsync(content_1.Id, new TestEntityData { Number = 2 }, true);
var content_2 = await _.Contents.UpsertAsync(content_1.Id, new TestEntityData { Number1 = 2 }, true);
Assert.Equal(Status.Published, content_2.Status);
@ -736,29 +736,29 @@ namespace TestSuite.ApiTests
try
{
// STEP 1: Create a new item.
content = await _.Contents.CreateAsync(new TestEntityData { Number = 1 }, true);
content = await _.Contents.CreateAsync(new TestEntityData { Number1 = 1 }, true);
// STEP 2: Update content.
content = await _.Contents.UpdateAsync(content.Id, new TestEntityData { Number = 2 });
content = await _.Contents.UpdateAsync(content.Id, new TestEntityData { Number1 = 2 });
// STEP 3: Get current version.
var content_latest = await _.Contents.GetAsync(content.Id);
Assert.Equal(2, content_latest.Data.Number);
Assert.Equal(2, content_latest.Data.Number1);
// STEP 4: Get current version.
var data_2 = await _.Contents.GetDataAsync(content.Id, content.Version);
Assert.Equal(2, data_2.Number);
Assert.Equal(2, data_2.Number1);
// STEP 4: Get previous version
var data_1 = await _.Contents.GetDataAsync(content.Id, content.Version - 1);
Assert.Equal(1, data_1.Number);
Assert.Equal(1, data_1.Number1);
}
finally
{

10
backend/tools/TestSuite/TestSuite.LoadTests/ReadingContentBenchmarks.cs

@ -61,7 +61,7 @@ namespace TestSuite.LoadTests
{
await Run.Parallel(numUsers, numIterationsPerUser, async () =>
{
await _.Contents.GetAsync(new ContentQuery { OrderBy = "data/number/iv asc" });
await _.Contents.GetAsync(new ContentQuery { OrderBy = "data/number1/iv asc" });
});
}
@ -71,7 +71,7 @@ namespace TestSuite.LoadTests
{
await Run.Parallel(numUsers, numIterationsPerUser, async () =>
{
await _.Contents.GetAsync(new ContentQuery { Skip = 5, OrderBy = "data/number/iv asc" });
await _.Contents.GetAsync(new ContentQuery { Skip = 5, OrderBy = "data/number1/iv asc" });
});
}
@ -81,7 +81,7 @@ namespace TestSuite.LoadTests
{
await Run.Parallel(numUsers, numIterationsPerUser, async () =>
{
await _.Contents.GetAsync(new ContentQuery { Skip = 2, Top = 5, OrderBy = "data/number/iv asc" });
await _.Contents.GetAsync(new ContentQuery { Skip = 2, Top = 5, OrderBy = "data/number1/iv asc" });
});
}
@ -91,7 +91,7 @@ namespace TestSuite.LoadTests
{
await Run.Parallel(numUsers, numIterationsPerUser, async () =>
{
await _.Contents.GetAsync(new ContentQuery { Skip = 2, Top = 5, OrderBy = "data/number/iv desc" });
await _.Contents.GetAsync(new ContentQuery { Skip = 2, Top = 5, OrderBy = "data/number1/iv desc" });
});
}
@ -101,7 +101,7 @@ namespace TestSuite.LoadTests
{
await Run.Parallel(numUsers, numIterationsPerUser, async () =>
{
await _.Contents.GetAsync(new ContentQuery { Filter = "data/number/iv gt 3 and data/number/iv lt 7", OrderBy = "data/number/iv asc" });
await _.Contents.GetAsync(new ContentQuery { Filter = "data/number1/iv gt 3 and data/number1/iv lt 7", OrderBy = "data/number1/iv asc" });
});
}
}

2
backend/tools/TestSuite/TestSuite.LoadTests/WritingBenchmarks.cs

@ -61,7 +61,7 @@ namespace TestSuite.LoadTests
await Run.Parallel(numUsers, numIterationsPerUser, async () =>
{
await _.Contents.CreateAsync(new TestEntityData { Number = random.Next() }, true);
await _.Contents.CreateAsync(new TestEntityData { Number1 = random.Next() }, true);
});
}
}

15
backend/tools/TestSuite/TestSuite.Shared/Fixtures/ContentQueryFixture1to10.cs

@ -6,6 +6,7 @@
// ==========================================================================
using System.Globalization;
using Newtonsoft.Json.Linq;
using TestSuite.Model;
namespace TestSuite.Fixtures
@ -30,7 +31,19 @@ namespace TestSuite.Fixtures
{
var text = i.ToString(CultureInfo.InvariantCulture);
var data = new TestEntityData { Number = i, String = text };
var data = new TestEntityData
{
String = text,
Number1 = i,
Number2 = i,
Json = JObject.FromObject(new
{
nested1 = new
{
nested2 = i
}
})
};
if (i % 2 == 0)
{

37
backend/tools/TestSuite/TestSuite.Shared/Model/TestEntity.cs

@ -6,6 +6,7 @@
// ==========================================================================
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Squidex.ClientLibrary;
using Squidex.ClientLibrary.Management;
@ -24,13 +25,21 @@ namespace TestSuite.Model
{
new UpsertSchemaFieldDto
{
Name = TestEntityData.NumberField,
Name = TestEntityData.Number1Field,
Properties = new NumberFieldPropertiesDto
{
IsRequired = true
}
},
new UpsertSchemaFieldDto
{
Name = TestEntityData.Number2Field,
Properties = new NumberFieldPropertiesDto
{
IsRequired = false
}
},
new UpsertSchemaFieldDto
{
Name = TestEntityData.StringField,
Properties = new StringFieldPropertiesDto
@ -47,6 +56,14 @@ namespace TestSuite.Model
}
},
new UpsertSchemaFieldDto
{
Name = TestEntityData.JsonField,
Properties = new JsonFieldPropertiesDto
{
IsRequired = false
}
},
new UpsertSchemaFieldDto
{
Name = TestEntityData.LocalizedField,
Partitioning = "language",
@ -67,8 +84,8 @@ namespace TestSuite.Model
Scripts = new SchemaScriptsDto
{
Create = $@"
if (ctx.data.{TestEntityData.NumberField}.iv === {ScriptTrigger}) {{
ctx.data.{TestEntityData.NumberField}.iv = incrementCounter('my');
if (ctx.data.{TestEntityData.Number1Field}.iv === {ScriptTrigger}) {{
ctx.data.{TestEntityData.Number1Field}.iv = incrementCounter('my');
replace();
}}"
},
@ -85,7 +102,11 @@ namespace TestSuite.Model
public static readonly string StringField = nameof(String).ToLowerInvariant();
public static readonly string NumberField = nameof(Number).ToLowerInvariant();
public static readonly string Number1Field = nameof(Number1).ToLowerInvariant();
public static readonly string Number2Field = nameof(Number2).ToLowerInvariant();
public static readonly string JsonField = nameof(Json).ToLowerInvariant();
public static readonly string GeoField = nameof(Geo).ToLowerInvariant();
@ -94,7 +115,10 @@ namespace TestSuite.Model
public Dictionary<string, string> Localized { get; set; }
[JsonConverter(typeof(InvariantConverter))]
public int Number { get; set; }
public int Number1 { get; set; }
[JsonConverter(typeof(InvariantConverter))]
public int Number2 { get; set; }
[JsonConverter(typeof(InvariantConverter))]
public string Id { get; set; }
@ -102,6 +126,9 @@ namespace TestSuite.Model
[JsonConverter(typeof(InvariantConverter))]
public string String { get; set; }
[JsonConverter(typeof(InvariantConverter))]
public JToken Json { get; set; }
[JsonConverter(typeof(InvariantConverter))]
public object Geo { get; set; }
}

Loading…
Cancel
Save