Browse Source

Serializer fix and fallback for old bug

pull/141/head
Sebastian Stehle 9 years ago
parent
commit
5d63d34e70
  1. 12
      src/Squidex.Domain.Apps.Events/Schemas/Utils/SchemaEventDispatcher.cs
  2. 38
      src/Squidex.Infrastructure.MongoDb/MongoDb/BsonConverter.cs
  3. 2
      src/Squidex/Controllers/UI/Account/AccountController.cs
  4. 93
      tests/Squidex.Infrastructure.Tests/MongoDb/BsonConverterTests.cs
  5. 1
      tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj

12
src/Squidex.Domain.Apps.Events/Schemas/Utils/SchemaEventDispatcher.cs

@ -62,7 +62,17 @@ namespace Squidex.Domain.Apps.Events.Schemas.Utils
Partitioning.Language :
Partitioning.Invariant;
return schema.AddField(registry.CreateField(@event.FieldId.Id, @event.Name, partitioning, @event.Properties));
var fieldId = @event.FieldId.Id;
var field = registry.CreateField(fieldId, @event.Name, partitioning, @event.Properties);
if (schema.FieldsById.ContainsKey(fieldId))
{
return schema.UpdateField(fieldId, f => field);
}
else
{
return schema.AddField(field);
}
}
public static Schema Dispatch(FieldUpdated @event, Schema schema)

38
src/Squidex.Infrastructure.MongoDb/MongoDb/BsonConverter.cs

@ -68,14 +68,34 @@ namespace Squidex.Infrastructure.MongoDb
public static BsonValue ToBson(this JToken source)
{
switch (source)
switch (source.Type)
{
case JObject jObject:
return jObject.ToBson();
case JArray jArray:
return jArray.ToBson();
case JValue jValue:
return BsonValue.Create(jValue.Value);
case JTokenType.Object:
return ((JObject)source).ToBson();
case JTokenType.Array:
return ((JArray)source).ToBson();
case JTokenType.Integer:
return BsonValue.Create(((JValue)source).Value);
case JTokenType.Float:
return BsonValue.Create(((JValue)source).Value);
case JTokenType.String:
return BsonValue.Create(((JValue)source).Value);
case JTokenType.Boolean:
return BsonValue.Create(((JValue)source).Value);
case JTokenType.Null:
return BsonNull.Value;
case JTokenType.Undefined:
return BsonUndefined.Value;
case JTokenType.Date:
return BsonValue.Create(((JValue)source).Value.ToString());
case JTokenType.Bytes:
return BsonValue.Create(((JValue)source).Value);
case JTokenType.Guid:
return BsonValue.Create(((JValue)source).Value.ToString());
case JTokenType.Uri:
return BsonValue.Create(((JValue)source).Value.ToString());
case JTokenType.TimeSpan:
return BsonValue.Create(((JValue)source).Value.ToString());
}
throw new NotSupportedException($"Cannot convert {source.GetType()} to Bson.");
@ -103,8 +123,12 @@ namespace Squidex.Infrastructure.MongoDb
return new JValue(source.AsInt64);
case BsonType.Decimal128:
return new JValue(source.AsDecimal);
case BsonType.Binary:
return new JValue(source.AsBsonBinaryData.Bytes);
case BsonType.Null:
return JValue.CreateNull();
case BsonType.Undefined:
return JValue.CreateUndefined();
}
throw new NotSupportedException($"Cannot convert {source.GetType()} to Json.");

2
src/Squidex/Controllers/UI/Account/AccountController.cs

@ -112,7 +112,7 @@ namespace Squidex.Controllers.UI.Account
if (string.IsNullOrWhiteSpace(logoutUrl))
{
logoutUrl = urlOptions.Value.BuildUrl("logout.");
logoutUrl = urlOptions.Value.BuildUrl("logout/");
}
return Redirect(logoutUrl);

93
tests/Squidex.Infrastructure.Tests/MongoDb/BsonConverterTests.cs

@ -0,0 +1,93 @@
// ==========================================================================
// BsonConverterTests.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System;
using FluentAssertions;
using Newtonsoft.Json.Linq;
using Xunit;
#pragma warning disable SA1121 // Use built-in type alias
namespace Squidex.Infrastructure.MongoDb
{
public class BsonConverterTests
{
public class TestObject
{
public TimeSpan TimeSpan { get; set; }
public Guid Guid { get; set; }
public DateTimeOffset DateTimeOffset { get; set; }
public DateTime DateTime { get; set; }
public Int64 Int64 { get; set; }
public Int32 Int32 { get; set; }
public Int16 Int16 { get; set; }
public UInt64 UInt64 { get; set; }
public UInt32 UInt32 { get; set; }
public UInt16 UInt16 { get; set; }
public double Float64 { get; set; }
public float Float32 { get; set; }
public bool Bool { get; set; }
public byte Byte { get; set; }
public byte[] Bytes { get; set; }
public string String { get; set; }
public string[] Strings { get; set; }
public Uri Uri { get; set; }
public static TestObject CreateWithValues()
{
return new TestObject
{
Bool = true,
Byte = 0x2,
Bytes = new byte[] { 0x10, 0x12, 0x13 },
DateTimeOffset = DateTime.Today,
DateTime = DateTime.Today,
Float32 = 32.5f,
Float64 = 32.5d,
Guid = Guid.NewGuid(),
Int64 = 64,
Int32 = 32,
Int16 = 16,
String = "squidex",
Strings = new[] { "hello", "squidex " },
TimeSpan = TimeSpan.FromSeconds(123),
UInt64 = 164,
UInt32 = 132,
UInt16 = 116,
Uri = new Uri("http://squidex.io")
};
}
}
[Fact]
public void Should_serialize_and_deserialize_to_bson_with_json()
{
var source = TestObject.CreateWithValues();
var target = JObject.FromObject(source).ToBson().ToJson().ToObject<TestObject>();
target.ShouldBeEquivalentTo(source);
}
}
}

1
tests/Squidex.Infrastructure.Tests/Squidex.Infrastructure.Tests.csproj

@ -7,6 +7,7 @@
<ItemGroup>
<ProjectReference Include="..\..\src\Squidex.Infrastructure.Azure\Squidex.Infrastructure.Azure.csproj" />
<ProjectReference Include="..\..\src\Squidex.Infrastructure.GoogleCloud\Squidex.Infrastructure.GoogleCloud.csproj" />
<ProjectReference Include="..\..\src\Squidex.Infrastructure.MongoDb\Squidex.Infrastructure.MongoDb.csproj" />
<ProjectReference Include="..\..\src\Squidex.Infrastructure\Squidex.Infrastructure.csproj" />
</ItemGroup>
<ItemGroup>

Loading…
Cancel
Save