Browse Source

Consistent ordering through ids. (#601)

pull/604/head
Sebastian Stehle 5 years ago
committed by GitHub
parent
commit
98e2ed1987
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      backend/src/Squidex.Domain.Apps.Entities/Assets/Queries/AssetQueryParser.cs
  2. 5
      backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentQueryParser.cs
  3. 24
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/Queries/AssetQueryParserTests.cs
  4. 26
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ContentQueryParserTests.cs

6
backend/src/Squidex.Domain.Apps.Entities/Assets/Queries/AssetQueryParser.cs

@ -7,6 +7,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Options;
using Microsoft.OData;
@ -84,6 +85,11 @@ namespace Squidex.Domain.Apps.Entities.Assets.Queries
result.Sort.Add(new SortNode(new List<string> { "lastModified" }, SortOrder.Descending));
}
if (!result.Sort.Any(x => string.Equals(x.Path.ToString(), "id", StringComparison.OrdinalIgnoreCase)))
{
result.Sort.Add(new SortNode(new List<string> { "id" }, SortOrder.Ascending));
}
if (result.Take == long.MaxValue)
{
result.Take = options.DefaultPageSize;

5
backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentQueryParser.cs

@ -89,6 +89,11 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
result.Sort.Add(new SortNode(new List<string> { "lastModified" }, SortOrder.Descending));
}
if (!result.Sort.Any(x => string.Equals(x.Path.ToString(), "id", StringComparison.OrdinalIgnoreCase)))
{
result.Sort.Add(new SortNode(new List<string> { "id" }, SortOrder.Ascending));
}
if (result.Take == long.MaxValue)
{
result.Take = options.DefaultPageSize;

24
backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/Queries/AssetQueryParserTests.cs

@ -67,7 +67,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.Queries
var parsed = await sut.ParseQueryAsync(requestContext, query);
Assert.Equal("FullText: 'Hello World'; Take: 100; Sort: fileName Ascending", parsed.ToString());
Assert.Equal("FullText: 'Hello World'; Take: 100; Sort: fileName Ascending, id Ascending", parsed.ToString());
}
[Fact]
@ -77,7 +77,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.Queries
var parsed = await sut.ParseQueryAsync(requestContext, query);
Assert.Equal("Filter: fileName == 'ABC'; Take: 200; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("Filter: fileName == 'ABC'; Take: 200; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
@ -87,7 +87,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.Queries
var parsed = await sut.ParseQueryAsync(requestContext, query);
Assert.Equal("Filter: fileName == 'ABC'; Take: 30; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("Filter: fileName == 'ABC'; Take: 30; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
@ -97,7 +97,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.Queries
var parsed = await sut.ParseQueryAsync(requestContext, query);
Assert.Equal("FullText: 'Hello'; Take: 30; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("FullText: 'Hello'; Take: 30; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
@ -107,7 +107,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.Queries
var parsed = await sut.ParseQueryAsync(requestContext, query);
Assert.Equal("Take: 30; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("Take: 30; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
@ -117,7 +117,17 @@ namespace Squidex.Domain.Apps.Entities.Assets.Queries
var parsed = await sut.ParseQueryAsync(requestContext, query);
Assert.Equal("Skip: 20; Take: 200; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("Skip: 20; Take: 200; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
public async Task Should_not_apply_id_ordering_twice()
{
var query = Q.Empty.WithODataQuery("$top=300&$skip=20&$orderby=id desc");
var parsed = await sut.ParseQueryAsync(requestContext, query);
Assert.Equal("Skip: 20; Take: 200; Sort: id Descending", parsed.ToString());
}
[Fact]
@ -130,7 +140,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.Queries
var parsed = await sut.ParseQueryAsync(requestContext, query);
Assert.Equal("Filter: tags == 'id1'; Take: 30; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("Filter: tags == 'id1'; Take: 30; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
private static string Json(string text)

26
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ContentQueryParserTests.cs

@ -78,7 +78,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
var parsed = await sut.ParseQueryAsync(requestContext, schema, query);
Assert.Equal("FullText: 'Hello World'; Take: 100; Sort: data.firstName.iv Ascending", parsed.ToString());
Assert.Equal("FullText: 'Hello World'; Take: 100; Sort: data.firstName.iv Ascending, id Ascending", parsed.ToString());
}
[Fact]
@ -88,7 +88,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
var parsed = await sut.ParseQueryAsync(requestContext, schema, query);
Assert.Equal("Filter: data.firstName.iv == 'ABC'; Take: 200; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("Filter: data.firstName.iv == 'ABC'; Take: 200; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
@ -98,7 +98,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
var parsed = await sut.ParseQueryAsync(requestContext, schema, query);
Assert.Equal("Filter: data.firstName.iv == 'ABC'; Take: 30; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("Filter: data.firstName.iv == 'ABC'; Take: 30; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
@ -112,7 +112,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
var parsed = await sut.ParseQueryAsync(requestContext, schema, query);
Assert.Equal("Filter: data.firstName.iv == 'ABC'; Take: 30; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("Filter: data.firstName.iv == 'ABC'; Take: 30; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
@ -122,7 +122,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
var parsed = await sut.ParseQueryAsync(requestContext, schema, query);
Assert.Equal("FullText: 'Hello'; Take: 30; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("FullText: 'Hello'; Take: 30; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
@ -136,7 +136,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
var parsed = await sut.ParseQueryAsync(requestContext, schema, query);
Assert.Equal("FullText: 'Hello'; Take: 30; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("FullText: 'Hello'; Take: 30; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
@ -146,7 +146,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
var parsed = await sut.ParseQueryAsync(requestContext, schema, query);
Assert.Equal("Take: 30; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("Take: 30; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
@ -156,7 +156,17 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
var parsed = await sut.ParseQueryAsync(requestContext, schema, query);
Assert.Equal("Skip: 20; Take: 200; Sort: lastModified Descending", parsed.ToString());
Assert.Equal("Skip: 20; Take: 200; Sort: lastModified Descending, id Ascending", parsed.ToString());
}
[Fact]
public async Task Should_not_apply_id_ordering_twice()
{
var query = Q.Empty.WithODataQuery("$top=300&$skip=20&$orderby=id desc");
var parsed = await sut.ParseQueryAsync(requestContext, schema, query);
Assert.Equal("Skip: 20; Take: 200; Sort: id Descending", parsed.ToString());
}
private static string Json(string text)

Loading…
Cancel
Save