Browse Source

Tests fixed

pull/152/head
Sebastian Stehle 8 years ago
parent
commit
38586e4b1a
  1. 19
      src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppClientsConverter.cs
  2. 19
      src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppContributorsConverter.cs
  3. 19
      src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs
  4. 5
      src/Squidex.Domain.Apps.Core.Model/Apps/LanguagesConfig.cs
  5. 15
      src/Squidex.Domain.Apps.Core.Model/Schemas/Json/SchemaConverter.cs
  6. 62
      src/Squidex.Infrastructure/Json/ClaimsPrincipalConverter.cs
  7. 46
      src/Squidex.Infrastructure/Json/JsonClassConverter.cs
  8. 19
      src/Squidex.Infrastructure/Json/LanguageConverter.cs
  9. 21
      src/Squidex.Infrastructure/Json/NamedGuidIdConverter.cs
  10. 21
      src/Squidex.Infrastructure/Json/NamedLongIdConverter.cs
  11. 21
      src/Squidex.Infrastructure/Json/NamedStringIdConverter.cs
  12. 51
      src/Squidex.Infrastructure/Json/PropertiesBagConverter.cs
  13. 17
      src/Squidex.Infrastructure/Json/RefTokenConverter.cs
  14. 1
      src/Squidex/Config/Domain/Serializers.cs
  15. 8
      tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigTests.cs
  16. 54
      tests/Squidex.Infrastructure.Tests/Json/ClaimsPrincipalConverterTests.cs
  17. 16
      tests/Squidex.Infrastructure.Tests/Json/InstantConverterTests.cs
  18. 28
      tests/Squidex.Infrastructure.Tests/LanguageTests.cs
  19. 24
      tests/Squidex.Infrastructure.Tests/NamedIdTests.cs
  20. 8
      tests/Squidex.Infrastructure.Tests/RefTokenTests.cs
  21. 9
      tests/Squidex.Infrastructure.Tests/TestHelpers/JsonHelper.cs

19
src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppClientsConverter.cs

@ -6,21 +6,19 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using System;
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
using Squidex.Infrastructure.Json;
namespace Squidex.Domain.Apps.Core.Apps.Json namespace Squidex.Domain.Apps.Core.Apps.Json
{ {
public sealed class AppClientsConverter : JsonConverter public sealed class AppClientsConverter : JsonClassConverter<AppClients>
{ {
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) protected override void WriteValue(JsonWriter writer, AppClients value, JsonSerializer serializer)
{ {
var clients = (AppClients)value; var json = new Dictionary<string, JsonAppClient>(value.Count);
var json = new Dictionary<string, JsonAppClient>(clients.Count); foreach (var client in value)
foreach (var client in clients)
{ {
json.Add(client.Key, new JsonAppClient(client.Value)); json.Add(client.Key, new JsonAppClient(client.Value));
} }
@ -28,7 +26,7 @@ namespace Squidex.Domain.Apps.Core.Apps.Json
serializer.Serialize(writer, json); serializer.Serialize(writer, json);
} }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) protected override AppClients ReadValue(JsonReader reader, JsonSerializer serializer)
{ {
var json = serializer.Deserialize<Dictionary<string, JsonAppClient>>(reader); var json = serializer.Deserialize<Dictionary<string, JsonAppClient>>(reader);
@ -41,10 +39,5 @@ namespace Squidex.Domain.Apps.Core.Apps.Json
return clients; return clients;
} }
public override bool CanConvert(Type objectType)
{
return objectType == typeof(AppClients);
}
} }
} }

19
src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppContributorsConverter.cs

@ -6,21 +6,19 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using System;
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
using Squidex.Infrastructure.Json;
namespace Squidex.Domain.Apps.Core.Apps.Json namespace Squidex.Domain.Apps.Core.Apps.Json
{ {
public sealed class AppContributorsConverter : JsonConverter public sealed class AppContributorsConverter : JsonClassConverter<AppContributors>
{ {
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) protected override void WriteValue(JsonWriter writer, AppContributors value, JsonSerializer serializer)
{ {
var contributors = (AppContributors)value; var json = new Dictionary<string, AppContributorPermission>(value.Count);
var json = new Dictionary<string, AppContributorPermission>(contributors.Count); foreach (var contributor in value)
foreach (var contributor in contributors)
{ {
json.Add(contributor.Key, contributor.Value); json.Add(contributor.Key, contributor.Value);
} }
@ -28,7 +26,7 @@ namespace Squidex.Domain.Apps.Core.Apps.Json
serializer.Serialize(writer, json); serializer.Serialize(writer, json);
} }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) protected override AppContributors ReadValue(JsonReader reader, JsonSerializer serializer)
{ {
var json = serializer.Deserialize<Dictionary<string, AppContributorPermission>>(reader); var json = serializer.Deserialize<Dictionary<string, AppContributorPermission>>(reader);
@ -41,10 +39,5 @@ namespace Squidex.Domain.Apps.Core.Apps.Json
return contributors; return contributors;
} }
public override bool CanConvert(Type objectType)
{
return objectType == typeof(AppContributors);
}
} }
} }

19
src/Squidex.Domain.Apps.Core.Model/Apps/Json/LanguagesConfigConverter.cs

@ -6,21 +6,19 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using System;
using System.Collections.Generic; using System.Collections.Generic;
using Newtonsoft.Json; using Newtonsoft.Json;
using Squidex.Infrastructure.Json;
namespace Squidex.Domain.Apps.Core.Apps.Json namespace Squidex.Domain.Apps.Core.Apps.Json
{ {
public sealed class LanguagesConfigConverter : JsonConverter public sealed class LanguagesConfigConverter : JsonClassConverter<LanguagesConfig>
{ {
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) protected override void WriteValue(JsonWriter writer, LanguagesConfig value, JsonSerializer serializer)
{ {
var languagesConfig = (LanguagesConfig)value; var json = new Dictionary<string, JsonLanguageConfig>(value.Count);
var json = new Dictionary<string, JsonLanguageConfig>(languagesConfig.Count); foreach (LanguageConfig config in value)
foreach (var config in languagesConfig.Configs)
{ {
json.Add(config.Language, new JsonLanguageConfig(config)); json.Add(config.Language, new JsonLanguageConfig(config));
} }
@ -28,7 +26,7 @@ namespace Squidex.Domain.Apps.Core.Apps.Json
serializer.Serialize(writer, json); serializer.Serialize(writer, json);
} }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) protected override LanguagesConfig ReadValue(JsonReader reader, JsonSerializer serializer)
{ {
var json = serializer.Deserialize<Dictionary<string, JsonLanguageConfig>>(reader); var json = serializer.Deserialize<Dictionary<string, JsonLanguageConfig>>(reader);
@ -43,10 +41,5 @@ namespace Squidex.Domain.Apps.Core.Apps.Json
return LanguagesConfig.Build(languagesConfig); return LanguagesConfig.Build(languagesConfig);
} }
public override bool CanConvert(Type objectType)
{
return objectType == typeof(LanguagesConfig);
}
} }
} }

5
src/Squidex.Domain.Apps.Core.Model/Apps/LanguagesConfig.cs

@ -41,11 +41,6 @@ namespace Squidex.Domain.Apps.Core.Apps
return state.Languages.Values.GetEnumerator(); return state.Languages.Values.GetEnumerator();
} }
public IEnumerable<LanguageConfig> Configs
{
get { return state.Languages.Values; }
}
public int Count public int Count
{ {
get { return state.Languages.Count; } get { return state.Languages.Count; }

15
src/Squidex.Domain.Apps.Core.Model/Schemas/Json/SchemaConverter.cs

@ -6,13 +6,13 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using System;
using Newtonsoft.Json; using Newtonsoft.Json;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Json;
namespace Squidex.Domain.Apps.Core.Schemas.Json namespace Squidex.Domain.Apps.Core.Schemas.Json
{ {
public sealed class SchemaConverter : JsonConverter public sealed class SchemaConverter : JsonClassConverter<Schema>
{ {
private readonly FieldRegistry fieldRegistry; private readonly FieldRegistry fieldRegistry;
@ -23,19 +23,14 @@ namespace Squidex.Domain.Apps.Core.Schemas.Json
this.fieldRegistry = fieldRegistry; this.fieldRegistry = fieldRegistry;
} }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) protected override void WriteValue(JsonWriter writer, Schema value, JsonSerializer serializer)
{ {
serializer.Serialize(writer, new JsonSchemaModel((Schema)value)); serializer.Serialize(writer, new JsonSchemaModel(value));
} }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) protected override Schema ReadValue(JsonReader reader, JsonSerializer serializer)
{ {
return serializer.Deserialize<JsonSchemaModel>(reader).ToSchema(fieldRegistry); return serializer.Deserialize<JsonSchemaModel>(reader).ToSchema(fieldRegistry);
} }
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Schema);
}
} }
} }

62
src/Squidex.Infrastructure/Json/ClaimsPrincipalConverter.cs

@ -0,0 +1,62 @@
// ==========================================================================
// ClaimsPrincipalConverter.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System.Linq;
using System.Security.Claims;
using Newtonsoft.Json;
namespace Squidex.Infrastructure.Json
{
public sealed class ClaimsPrincipalConverter : JsonClassConverter<ClaimsPrincipal>
{
private sealed class JsonIdentity
{
[JsonProperty]
public string AuthenticationType { get; set; }
[JsonProperty]
public JsonClaim[] Claims { get; set; }
}
private sealed class JsonClaim
{
[JsonProperty]
public string Type { get; set; }
[JsonProperty]
public string Value { get; set; }
}
protected override void WriteValue(JsonWriter writer, ClaimsPrincipal value, JsonSerializer serializer)
{
var jsonIdentities =
value.Identities.Select(identity =>
new JsonIdentity
{
Claims = identity.Claims.Select(c =>
{
return new JsonClaim { Type = c.Type, Value = c.Value };
}).ToArray(),
AuthenticationType = identity.AuthenticationType
}).ToArray();
serializer.Serialize(writer, jsonIdentities);
}
protected override ClaimsPrincipal ReadValue(JsonReader reader, JsonSerializer serializer)
{
var jsonIdentities = serializer.Deserialize<JsonIdentity[]>(reader);
return new ClaimsPrincipal(
jsonIdentities.Select(identity =>
new ClaimsIdentity(
identity.Claims.Select(c => new Claim(c.Type, c.Value)),
identity.AuthenticationType)));
}
}
}

46
src/Squidex.Infrastructure/Json/JsonClassConverter.cs

@ -0,0 +1,46 @@
// ==========================================================================
// JsonClassConverter.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System;
using Newtonsoft.Json;
namespace Squidex.Infrastructure.Json
{
public abstract class JsonClassConverter<T> : JsonConverter where T : class
{
public sealed override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return null;
}
return ReadValue(reader, serializer);
}
public sealed override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value == null)
{
writer.WriteNull();
return;
}
WriteValue(writer, (T)value, serializer);
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(T);
}
protected abstract void WriteValue(JsonWriter writer, T value, JsonSerializer serializer);
protected abstract T ReadValue(JsonReader reader, JsonSerializer serializer);
}
}

19
src/Squidex.Infrastructure/Json/LanguageConverter.cs

@ -6,26 +6,25 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using System;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace Squidex.Infrastructure.Json namespace Squidex.Infrastructure.Json
{ {
public sealed class LanguageConverter : JsonConverter public sealed class LanguageConverter : JsonClassConverter<Language>
{ {
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) protected override void WriteValue(JsonWriter writer, Language value, JsonSerializer serializer)
{ {
writer.WriteValue(((Language)value).Iso2Code); writer.WriteValue(value.Iso2Code);
} }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) protected override Language ReadValue(JsonReader reader, JsonSerializer serializer)
{ {
return reader.TokenType == JsonToken.Null ? null : Language.GetLanguage((string)reader.Value); if (reader.TokenType != JsonToken.String)
} {
throw new JsonException($"Expected String, but got {reader.TokenType}.");
}
public override bool CanConvert(Type objectType) return Language.GetLanguage(reader.Value.ToString());
{
return objectType == typeof(Language);
} }
} }
} }

21
src/Squidex.Infrastructure/Json/NamedGuidIdConverter.cs

@ -12,23 +12,21 @@ using Newtonsoft.Json;
namespace Squidex.Infrastructure.Json namespace Squidex.Infrastructure.Json
{ {
public sealed class NamedGuidIdConverter : JsonConverter public sealed class NamedGuidIdConverter : JsonClassConverter<NamedId<Guid>>
{ {
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) protected override void WriteValue(JsonWriter writer, NamedId<Guid> value, JsonSerializer serializer)
{ {
var namedId = (NamedId<Guid>)value; writer.WriteValue($"{value.Id},{value.Name}");
writer.WriteValue($"{namedId.Id},{namedId.Name}");
} }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) protected override NamedId<Guid> ReadValue(JsonReader reader, JsonSerializer serializer)
{ {
if (reader.TokenType == JsonToken.Null) if (reader.TokenType != JsonToken.String)
{ {
return null; throw new JsonException($"Expected String, but got {reader.TokenType}.");
} }
var parts = ((string)reader.Value).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var parts = reader.Value.ToString().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length < 2) if (parts.Length < 2)
{ {
@ -42,10 +40,5 @@ namespace Squidex.Infrastructure.Json
return new NamedId<Guid>(id, string.Join(",", parts.Skip(1))); return new NamedId<Guid>(id, string.Join(",", parts.Skip(1)));
} }
public override bool CanConvert(Type objectType)
{
return objectType == typeof(NamedId<Guid>);
}
} }
} }

21
src/Squidex.Infrastructure/Json/NamedLongIdConverter.cs

@ -12,23 +12,21 @@ using Newtonsoft.Json;
namespace Squidex.Infrastructure.Json namespace Squidex.Infrastructure.Json
{ {
public sealed class NamedLongIdConverter : JsonConverter public sealed class NamedLongIdConverter : JsonClassConverter<NamedId<long>>
{ {
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) protected override void WriteValue(JsonWriter writer, NamedId<long> value, JsonSerializer serializer)
{ {
var namedId = (NamedId<long>)value; writer.WriteValue($"{value.Id},{value.Name}");
writer.WriteValue($"{namedId.Id},{namedId.Name}");
} }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) protected override NamedId<long> ReadValue(JsonReader reader, JsonSerializer serializer)
{ {
if (reader.TokenType == JsonToken.Null) if (reader.TokenType != JsonToken.String)
{ {
return null; throw new JsonException($"Expected String, but got {reader.TokenType}.");
} }
var parts = ((string)reader.Value).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var parts = reader.Value.ToString().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length < 2) if (parts.Length < 2)
{ {
@ -42,10 +40,5 @@ namespace Squidex.Infrastructure.Json
return new NamedId<long>(id, string.Join(",", parts.Skip(1))); return new NamedId<long>(id, string.Join(",", parts.Skip(1)));
} }
public override bool CanConvert(Type objectType)
{
return objectType == typeof(NamedId<long>);
}
} }
} }

21
src/Squidex.Infrastructure/Json/NamedStringIdConverter.cs

@ -12,23 +12,21 @@ using Newtonsoft.Json;
namespace Squidex.Infrastructure.Json namespace Squidex.Infrastructure.Json
{ {
public sealed class NamedStringIdConverter : JsonConverter public sealed class NamedStringIdConverter : JsonClassConverter<NamedId<string>>
{ {
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) protected override void WriteValue(JsonWriter writer, NamedId<string> value, JsonSerializer serializer)
{ {
var namedId = (NamedId<string>)value; writer.WriteValue($"{value.Id},{value.Name}");
writer.WriteValue($"{namedId.Id},{namedId.Name}");
} }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) protected override NamedId<string> ReadValue(JsonReader reader, JsonSerializer serializer)
{ {
if (reader.TokenType == JsonToken.Null) if (reader.TokenType != JsonToken.String)
{ {
return null; throw new JsonException($"Expected String, but got {reader.TokenType}.");
} }
var parts = ((string)reader.Value).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var parts = reader.Value.ToString().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length < 2) if (parts.Length < 2)
{ {
@ -37,10 +35,5 @@ namespace Squidex.Infrastructure.Json
return new NamedId<string>(parts[0], string.Join(",", parts.Skip(1))); return new NamedId<string>(parts[0], string.Join(",", parts.Skip(1)));
} }
public override bool CanConvert(Type objectType)
{
return objectType == typeof(NamedId<string>);
}
} }
} }

51
src/Squidex.Infrastructure/Json/PropertiesBagConverter.cs

@ -13,15 +13,36 @@ using NodaTime.Extensions;
namespace Squidex.Infrastructure.Json namespace Squidex.Infrastructure.Json
{ {
public sealed class PropertiesBagConverter : JsonConverter public sealed class PropertiesBagConverter : JsonClassConverter<PropertiesBag>
{ {
public override bool CanConvert(Type objectType) protected override void WriteValue(JsonWriter writer, PropertiesBag value, JsonSerializer serializer)
{ {
return typeof(PropertiesBag).IsAssignableFrom(objectType); writer.WriteStartObject();
foreach (var kvp in value.Properties)
{
writer.WritePropertyName(kvp.Key);
if (kvp.Value.RawValue is Instant)
{
writer.WriteValue(kvp.Value.ToString());
}
else
{
writer.WriteValue(kvp.Value.RawValue);
}
}
writer.WriteEndObject();
} }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) protected override PropertiesBag ReadValue(JsonReader reader, JsonSerializer serializer)
{ {
if (reader.TokenType != JsonToken.StartObject)
{
throw new JsonException($"Expected Object, but got {reader.TokenType}.");
}
var properties = new PropertiesBag(); var properties = new PropertiesBag();
while (reader.Read()) while (reader.Read())
@ -50,27 +71,9 @@ namespace Squidex.Infrastructure.Json
return properties; return properties;
} }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) public override bool CanConvert(Type objectType)
{ {
var properties = (PropertiesBag)value; return typeof(PropertiesBag).IsAssignableFrom(objectType);
writer.WriteStartObject();
foreach (var kvp in properties.Properties)
{
writer.WritePropertyName(kvp.Key);
if (kvp.Value.RawValue is Instant)
{
writer.WriteValue(kvp.Value.ToString());
}
else
{
writer.WriteValue(kvp.Value.RawValue);
}
}
writer.WriteEndObject();
} }
} }
} }

17
src/Squidex.Infrastructure/Json/RefTokenConverter.cs

@ -6,26 +6,25 @@
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using System;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace Squidex.Infrastructure.Json namespace Squidex.Infrastructure.Json
{ {
public sealed class RefTokenConverter : JsonConverter public sealed class RefTokenConverter : JsonClassConverter<RefToken>
{ {
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) protected override void WriteValue(JsonWriter writer, RefToken value, JsonSerializer serializer)
{ {
writer.WriteValue(value.ToString()); writer.WriteValue(value.ToString());
} }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) protected override RefToken ReadValue(JsonReader reader, JsonSerializer serializer)
{ {
return reader.TokenType == JsonToken.Null ? null : RefToken.Parse((string)reader.Value); if (reader.TokenType != JsonToken.String)
} {
throw new JsonException($"Expected String, but got {reader.TokenType}.");
}
public override bool CanConvert(Type objectType) return RefToken.Parse(reader.Value.ToString());
{
return objectType == typeof(RefToken);
} }
} }
} }

1
src/Squidex/Config/Domain/Serializers.cs

@ -36,6 +36,7 @@ namespace Squidex.Config.Domain
settings.ContractResolver = new ConverterContractResolver( settings.ContractResolver = new ConverterContractResolver(
new AppClientsConverter(), new AppClientsConverter(),
new AppContributorsConverter(), new AppContributorsConverter(),
new ClaimsPrincipalConverter(),
new InstantConverter(), new InstantConverter(),
new LanguageConverter(), new LanguageConverter(),
new LanguagesConfigConverter(), new LanguagesConfigConverter(),

8
tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigTests.cs

@ -172,14 +172,6 @@ namespace Squidex.Domain.Apps.Core.Model.Apps
config.Remove(Language.EN); config.Remove(Language.EN);
} }
[Fact]
public void Should_throw_exception_if_language_to_remove_is_master_language()
{
var config = LanguagesConfig.Build(Language.DE);
Assert.Throws<InvalidOperationException>(() => config.Remove(Language.DE));
}
[Fact] [Fact]
public void Should_update_language() public void Should_update_language()
{ {

54
tests/Squidex.Infrastructure.Tests/Json/ClaimsPrincipalConverterTests.cs

@ -0,0 +1,54 @@
// ==========================================================================
// ClaimsPrincipalConverterTests.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System.Linq;
using System.Security.Claims;
using Squidex.Infrastructure.TestHelpers;
using Xunit;
namespace Squidex.Infrastructure.Json
{
public class ClaimsPrincipalConverterTests
{
[Fact]
public void Should_serialize_and_deserialize()
{
var value = new ClaimsPrincipal(
new[]
{
new ClaimsIdentity(
new[]
{
new Claim("email", "me@email.de"),
new Claim("username", "me@email.de"),
},
"Cookie"),
new ClaimsIdentity(
new[]
{
new Claim("user_id", "12345"),
new Claim("login", "me"),
},
"Google")
});
var result = value.SerializeAndDeserializeAndReturn(new ClaimsPrincipalConverter());
Assert.Equal(value.Identities.ElementAt(0).AuthenticationType, result.Identities.ElementAt(0).AuthenticationType);
Assert.Equal(value.Identities.ElementAt(1).AuthenticationType, result.Identities.ElementAt(1).AuthenticationType);
}
[Fact]
public void Should_serialize_and_deserialize_null_principal()
{
ClaimsPrincipal value = null;
value.SerializeAndDeserialize(new ClaimsPrincipalConverter());
}
}
}

16
tests/Squidex.Infrastructure.Tests/Json/InstantConverterTests.cs

@ -22,5 +22,21 @@ namespace Squidex.Infrastructure.Json
value.SerializeAndDeserialize(new InstantConverter()); value.SerializeAndDeserialize(new InstantConverter());
} }
[Fact]
public void Should_serialize_and_deserialize_nullable_with_value()
{
Instant? value = Instant.FromDateTimeUtc(DateTime.UtcNow.Date);
value.SerializeAndDeserialize(new InstantConverter());
}
[Fact]
public void Should_serialize_and_deserialize_nullable_with_null()
{
Instant? value = null;
value.SerializeAndDeserialize(new InstantConverter());
}
} }
} }

28
tests/Squidex.Infrastructure.Tests/LanguageTests.cs

@ -42,18 +42,6 @@ namespace Squidex.Infrastructure
Assert.True(Language.AllLanguages.Count() > 100); Assert.True(Language.AllLanguages.Count() > 100);
} }
[Fact]
public void Should_serialize_and_deserialize_null_language()
{
JsonHelper.SerializeAndDeserialize<Language>(null, new LanguageConverter());
}
[Fact]
public void Should_serialize_and_deserialize_valid_language()
{
Language.DE.SerializeAndDeserialize(new LanguageConverter());
}
[Fact] [Fact]
public void Should_return_true_for_valid_language() public void Should_return_true_for_valid_language()
{ {
@ -120,5 +108,21 @@ namespace Squidex.Infrastructure
Assert.Null(language); Assert.Null(language);
} }
[Fact]
public void Should_serialize_and_deserialize_null_language()
{
Language value = null;
value.SerializeAndDeserialize(new LanguageConverter());
}
[Fact]
public void Should_serialize_and_deserialize_valid_language()
{
var value = Language.DE;
value.SerializeAndDeserialize(new LanguageConverter());
}
} }
} }

24
tests/Squidex.Infrastructure.Tests/NamedIdTests.cs

@ -90,37 +90,49 @@ namespace Squidex.Infrastructure
[Fact] [Fact]
public void Should_serialize_and_deserialize_null_guid_token() public void Should_serialize_and_deserialize_null_guid_token()
{ {
JsonHelper.SerializeAndDeserialize<NamedId<Guid>>(null, new NamedGuidIdConverter()); NamedId<Guid> value = null;
value.SerializeAndDeserialize(new NamedGuidIdConverter());
} }
[Fact] [Fact]
public void Should_serialize_and_deserialize_valid_guid_token() public void Should_serialize_and_deserialize_valid_guid_token()
{ {
new NamedId<Guid>(Guid.NewGuid(), "my-name").SerializeAndDeserialize(new NamedGuidIdConverter()); var value = new NamedId<Guid>(Guid.NewGuid(), "my-name");
value.SerializeAndDeserialize(new NamedGuidIdConverter());
} }
[Fact] [Fact]
public void Should_serialize_and_deserialize_null_long_token() public void Should_serialize_and_deserialize_null_long_token()
{ {
JsonHelper.SerializeAndDeserialize<NamedId<long>>(null, new NamedLongIdConverter()); NamedId<long> value = null;
value.SerializeAndDeserialize(new NamedLongIdConverter());
} }
[Fact] [Fact]
public void Should_serialize_and_deserialize_valid_long_token() public void Should_serialize_and_deserialize_valid_long_token()
{ {
new NamedId<long>(123, "my-name").SerializeAndDeserialize(new NamedLongIdConverter()); var value = new NamedId<long>(123, "my-name");
value.SerializeAndDeserialize(new NamedLongIdConverter());
} }
[Fact] [Fact]
public void Should_serialize_and_deserialize_null_string_token() public void Should_serialize_and_deserialize_null_string_token()
{ {
JsonHelper.SerializeAndDeserialize<NamedId<string>>(null, new NamedStringIdConverter()); NamedId<string> value = null;
value.SerializeAndDeserialize(new NamedStringIdConverter());
} }
[Fact] [Fact]
public void Should_serialize_and_deserialize_valid_string_token() public void Should_serialize_and_deserialize_valid_string_token()
{ {
new NamedId<string>(Guid.NewGuid().ToString(), "my-name").SerializeAndDeserialize(new NamedStringIdConverter()); var value = new NamedId<string>(Guid.NewGuid().ToString(), "my-name");
value.SerializeAndDeserialize(new NamedStringIdConverter());
} }
[Fact] [Fact]

8
tests/Squidex.Infrastructure.Tests/RefTokenTests.cs

@ -108,13 +108,17 @@ namespace Squidex.Infrastructure
[Fact] [Fact]
public void Should_serialize_and_deserialize_null_token() public void Should_serialize_and_deserialize_null_token()
{ {
JsonHelper.SerializeAndDeserialize<RefToken>(null, new RefTokenConverter()); RefToken value = null;
value.SerializeAndDeserialize(new RefTokenConverter());
} }
[Fact] [Fact]
public void Should_serialize_and_deserialize_valid_token() public void Should_serialize_and_deserialize_valid_token()
{ {
RefToken.Parse("client:client1").SerializeAndDeserialize(new RefTokenConverter()); var value = RefToken.Parse("client:client1");
value.SerializeAndDeserialize(new RefTokenConverter());
} }
} }
} }

9
tests/Squidex.Infrastructure.Tests/TestHelpers/JsonHelper.cs

@ -30,6 +30,13 @@ namespace Squidex.Infrastructure.TestHelpers
} }
public static void SerializeAndDeserialize<T>(this T value, JsonConverter converter) public static void SerializeAndDeserialize<T>(this T value, JsonConverter converter)
{
var output = SerializeAndDeserializeAndReturn(value, converter);
Assert.Equal(value, output);
}
public static T SerializeAndDeserializeAndReturn<T>(this T value, JsonConverter converter)
{ {
var serializerSettings = new JsonSerializerSettings(); var serializerSettings = new JsonSerializerSettings();
@ -39,7 +46,7 @@ namespace Squidex.Infrastructure.TestHelpers
var result = JsonConvert.SerializeObject(Tuple.Create(value), serializerSettings); var result = JsonConvert.SerializeObject(Tuple.Create(value), serializerSettings);
var output = JsonConvert.DeserializeObject<Tuple<T>>(result, serializerSettings); var output = JsonConvert.DeserializeObject<Tuple<T>>(result, serializerSettings);
Assert.Equal(value, output.Item1); return output.Item1;
} }
public static void DoesNotDeserialize<T>(string value, JsonConverter converter) public static void DoesNotDeserialize<T>(string value, JsonConverter converter)

Loading…
Cancel
Save