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() 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() 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) protected override void PrepareJsonSchema(JsonProperty jsonProperty, Func<string, JsonSchema4, JsonSchema4> schemaResolver)
{ {
jsonProperty.Type = JsonObjectType.String; jsonProperty.Type = JsonObjectType.String;
@ -69,10 +74,5 @@ namespace Squidex.Domain.Apps.Core.Schemas
{ {
return EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.String, !Properties.IsRequired); 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) 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) 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.Contents.Edm;
using Squidex.Domain.Apps.Read.MongoDb.Contents; using Squidex.Domain.Apps.Read.MongoDb.Contents;
using Squidex.Domain.Apps.Read.MongoDb.Contents.Visitors; using Squidex.Domain.Apps.Read.MongoDb.Contents.Visitors;
using Squidex.Domain.Apps.Read.Schemas;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.MongoDb; using Squidex.Infrastructure.MongoDb;
using Xunit; using Xunit;
// ReSharper disable SpecifyACultureInStringConversionExplicitly // ReSharper disable SpecifyACultureInStringConversionExplicitly
namespace Squidex.Domain.Apps.Read.Schemas namespace Squidex.Domain.Apps.Read.Contents
{ {
public class ODataQueryTests public class ODataQueryTests
{ {
@ -41,7 +42,11 @@ namespace Squidex.Domain.Apps.Read.Schemas
.AddOrUpdateField(new NumberField(4, "age", Partitioning.Invariant, .AddOrUpdateField(new NumberField(4, "age", Partitioning.Invariant,
new NumberFieldProperties { MinValue = 1, MaxValue = 10 })) new NumberFieldProperties { MinValue = 1, MaxValue = 10 }))
.AddOrUpdateField(new DateTimeField(5, "birthday", Partitioning.Invariant, .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 IBsonSerializerRegistry registry = BsonSerializer.SerializerRegistry;
private readonly IBsonSerializer<MongoContentEntity> serializer = BsonSerializer.SerializerRegistry.GetSerializer<MongoContentEntity>(); 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() public void Should_create_string_not_equals_query()
{ {
var i = F("$filter=data/firstName/de ne 'Sebastian'"); 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); Assert.Equal(o, i);
} }
@ -213,6 +218,24 @@ namespace Squidex.Domain.Apps.Read.Schemas
Assert.Equal(o, i); 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] [Fact]
public void Should_create_and_query() public void Should_create_and_query()
{ {
Loading…
Cancel
Save