Browse Source

Fixes in schema and cleanup handling

pull/1/head
Sebastian 9 years ago
parent
commit
cacef7a217
  1. 12
      src/Squidex.Core/Contents/ContentData.cs
  2. 12
      src/Squidex.Core/Schemas/DateTimeField.cs
  3. 7
      src/Squidex.Core/Schemas/Field.cs
  4. 33
      src/Squidex.Infrastructure/Json/JsonExtension.cs
  5. 5
      tests/Squidex.Core.Tests/Contents/ContentDataTests.cs

12
src/Squidex.Core/Contents/ContentData.cs

@ -68,7 +68,17 @@ namespace Squidex.Core.Contents
foreach (var fieldValue in this.Where(x => x.Value != null))
{
result[fieldValue.Key] = fieldValue.Value;
var resultValue = new ContentFieldData();
foreach (var languageValue in fieldValue.Value.Where(x => x.Value != null && x.Value.Type != JTokenType.Null))
{
resultValue[languageValue.Key] = languageValue.Value;
}
if (resultValue.Count > 0)
{
result[fieldValue.Key] = resultValue;
}
}
return result;

12
src/Squidex.Core/Schemas/DateTimeField.cs

@ -16,7 +16,9 @@ using NodaTime;
using NodaTime.Text;
using Squidex.Core.Schemas.Validators;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Json;
// ReSharper disable InvertIf
// ReSharper disable ConvertIfStatementToConditionalTernaryExpression
// ReSharper disable ConvertIfStatementToSwitchStatement
@ -45,6 +47,11 @@ namespace Squidex.Core.Schemas
protected override object ConvertValue(JToken value)
{
if (value.IsNull())
{
return null;
}
if (value.Type == JTokenType.String)
{
var parseResult = InstantPattern.General.Parse(value.ToString());
@ -57,11 +64,6 @@ namespace Squidex.Core.Schemas
return parseResult.Value;
}
if (value.Type == JTokenType.Null)
{
return null;
}
throw new InvalidCastException("Invalid json type, expected string.");
}

7
src/Squidex.Core/Schemas/Field.cs

@ -16,6 +16,7 @@ using NJsonSchema;
using Squidex.Core.Contents;
using Squidex.Core.Schemas.Validators;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Json;
// ReSharper disable InvertIf
// ReSharper disable ConvertIfStatementToReturnStatement
@ -74,7 +75,7 @@ namespace Squidex.Core.Schemas
var defaultValue = RawProperties.GetDefaultValue();
if (!RawProperties.IsRequired && defaultValue != null)
if (!RawProperties.IsRequired && !defaultValue.IsNull())
{
if (!fieldData.TryGetValue(language.Iso2Code, out JToken value) || value == null || value.Type == JTokenType.Null)
{
@ -90,7 +91,7 @@ namespace Squidex.Core.Schemas
var rawErrors = new List<string>();
try
{
var typedValue = value.Type == JTokenType.Null ? null : ConvertValue(value);
var typedValue = value.IsNull() ? null : ConvertValue(value);
foreach (var validator in validators.Value)
{
@ -194,7 +195,7 @@ namespace Squidex.Core.Schemas
foreach (var language in languages)
{
var languageProperty = new JsonProperty { Description = language.EnglishName };
var languageProperty = new JsonProperty { Description = language.EnglishName, IsRequired = RawProperties.IsRequired };
PrepareJsonSchema(languageProperty, schemaResolver);

33
src/Squidex.Infrastructure/Json/JsonExtension.cs

@ -0,0 +1,33 @@
// ==========================================================================
// JsonExtension.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using Newtonsoft.Json.Linq;
namespace Squidex.Infrastructure.Json
{
public static class JsonExtension
{
public static bool IsNull(this JToken token)
{
if (token == null)
{
return true;
}
if (token.Type == JTokenType.Null)
{
return true;
}
if (token is JValue value)
{
return value.Value == null;
}
return false;
}
}
}

5
tests/Squidex.Core.Tests/Contents/ContentDataTests.cs

@ -164,14 +164,15 @@ namespace Squidex.Core.Contents
new ContentData()
.AddField("field2",
new ContentFieldData()
.AddValue("iv", 2));
.AddValue("en", 2));
var input =
new ContentData()
.AddField("field1", null)
.AddField("field2",
new ContentFieldData()
.AddValue("iv", 2));
.AddValue("en", 2)
.AddValue("it", null));
var actual = input.ToCleaned();

Loading…
Cancel
Save