Browse Source

Closes #87

pull/95/head
Sebastian Stehle 9 years ago
parent
commit
da4f38e9f3
  1. 2
      src/Squidex.Domain.Apps.Core/Schemas/AssetsField.cs
  2. 2
      src/Squidex.Domain.Apps.Core/Schemas/ReferencesField.cs
  3. 10
      src/Squidex.Domain.Apps.Core/Schemas/StringField.cs
  4. 6
      src/Squidex.Domain.Apps.Read.MongoDb/Contents/Visitors/FilterVisitor.cs
  5. 29
      tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs

2
src/Squidex.Domain.Apps.Core/Schemas/AssetsField.cs

@ -78,7 +78,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
protected override IEdmTypeReference CreateEdmType()
{
return null;
return EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.String, !Properties.IsRequired);
}
}
}

2
src/Squidex.Domain.Apps.Core/Schemas/ReferencesField.cs

@ -86,7 +86,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
protected override IEdmTypeReference CreateEdmType()
{
return null;
return EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.String, !Properties.IsRequired);
}
}
}

10
src/Squidex.Domain.Apps.Core/Schemas/StringField.cs

@ -52,6 +52,11 @@ namespace Squidex.Domain.Apps.Core.Schemas
}
}
public override object ConvertValue(JToken value)
{
return value.ToString();
}
protected override void PrepareJsonSchema(JsonProperty jsonProperty, Func<string, JsonSchema4, JsonSchema4> schemaResolver)
{
jsonProperty.Type = JsonObjectType.String;
@ -69,10 +74,5 @@ namespace Squidex.Domain.Apps.Core.Schemas
{
return EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.String, !Properties.IsRequired);
}
public override object ConvertValue(JToken value)
{
return value.ToString();
}
}
}

6
src/Squidex.Domain.Apps.Read.MongoDb/Contents/Visitors/FilterVisitor.cs

@ -110,7 +110,11 @@ namespace Squidex.Domain.Apps.Read.MongoDb.Contents.Visitors
{
if (nodeIn.OperatorKind == BinaryOperatorKind.NotEqual)
{
return Filter.Ne(BuildFieldDefinition(nodeIn.Left), BuildValue(nodeIn.Right));
var field = BuildFieldDefinition(nodeIn.Left);
return Filter.Or(
Filter.Not(Filter.Exists(field)),
Filter.Ne(field, BuildValue(nodeIn.Right)));
}
if (nodeIn.OperatorKind == BinaryOperatorKind.Equal)
{

29
tests/Squidex.Domain.Apps.Read.Tests/Schemas/ODataQueryTests.cs → tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs

@ -20,13 +20,14 @@ using Squidex.Domain.Apps.Read.Apps;
using Squidex.Domain.Apps.Read.Contents.Edm;
using Squidex.Domain.Apps.Read.MongoDb.Contents;
using Squidex.Domain.Apps.Read.MongoDb.Contents.Visitors;
using Squidex.Domain.Apps.Read.Schemas;
using Squidex.Infrastructure;
using Squidex.Infrastructure.MongoDb;
using Xunit;
// ReSharper disable SpecifyACultureInStringConversionExplicitly
namespace Squidex.Domain.Apps.Read.Schemas
namespace Squidex.Domain.Apps.Read.Contents
{
public class ODataQueryTests
{
@ -41,7 +42,11 @@ namespace Squidex.Domain.Apps.Read.Schemas
.AddOrUpdateField(new NumberField(4, "age", Partitioning.Invariant,
new NumberFieldProperties { MinValue = 1, MaxValue = 10 }))
.AddOrUpdateField(new DateTimeField(5, "birthday", Partitioning.Invariant,
new DateTimeFieldProperties()));
new DateTimeFieldProperties()))
.AddOrUpdateField(new AssetsField(6, "pictures", Partitioning.Invariant,
new AssetsFieldProperties()))
.AddOrUpdateField(new ReferencesField(7, "friends", Partitioning.Invariant,
new ReferencesFieldProperties()));
private readonly IBsonSerializerRegistry registry = BsonSerializer.SerializerRegistry;
private readonly IBsonSerializer<MongoContentEntity> serializer = BsonSerializer.SerializerRegistry.GetSerializer<MongoContentEntity>();
@ -172,7 +177,7 @@ namespace Squidex.Domain.Apps.Read.Schemas
public void Should_create_string_not_equals_query()
{
var i = F("$filter=data/firstName/de ne 'Sebastian'");
var o = C("{ 'do.1.de' : { '$ne' : 'Sebastian' } }");
var o = C("{ '$or' : [{ 'do.1.de' : { '$exists' : false } }, { 'do.1.de' : { '$ne' : 'Sebastian' } }] }");
Assert.Equal(o, i);
}
@ -213,6 +218,24 @@ namespace Squidex.Domain.Apps.Read.Schemas
Assert.Equal(o, i);
}
[Fact]
public void Should_create_equals_query_for_assets()
{
var i = F("$filter=data/pictures/iv eq 'guid'");
var o = C("{ 'do.6.iv' : 'guid' }");
Assert.Equal(o, i);
}
[Fact]
public void Should_create_equals_query_for_references()
{
var i = F("$filter=data/friends/iv eq 'guid'");
var o = C("{ 'do.7.iv' : 'guid' }");
Assert.Equal(o, i);
}
[Fact]
public void Should_create_and_query()
{
Loading…
Cancel
Save