diff --git a/Squidex.sln.DotSettings b/Squidex.sln.DotSettings
index 0e0d4202d..93827d8dd 100644
--- a/Squidex.sln.DotSettings
+++ b/Squidex.sln.DotSettings
@@ -3,15 +3,18 @@
True
False
True
- False
- True
- False
- True
- False
- True
- False
- True
- True
+ True
+
+ True
+ True
+
+ True
+ True
+
+ True
+
+ False
+ True
diff --git a/src/Squidex.Domain.Apps.Core.Model/Apps/AppClient.cs b/src/Squidex.Domain.Apps.Core.Model/Apps/AppClient.cs
index 28e17d013..2c9967d09 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Apps/AppClient.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Apps/AppClient.cs
@@ -42,18 +42,18 @@ namespace Squidex.Domain.Apps.Core.Apps
this.permission = permission;
}
- public void Update(AppClientPermission newPermission)
+ public AppClient Update(AppClientPermission newPermission)
{
Guard.Enum(newPermission, nameof(newPermission));
- permission = newPermission;
+ return new AppClient(name, secret, newPermission);
}
- public void Rename(string newName)
+ public AppClient Rename(string newName)
{
Guard.NotNullOrEmpty(newName, nameof(newName));
- name = newName;
+ return new AppClient(newName, secret, permission);
}
}
}
diff --git a/src/Squidex.Domain.Apps.Core.Model/Apps/AppClients.cs b/src/Squidex.Domain.Apps.Core.Model/Apps/AppClients.cs
index a92de925b..e1ee6f933 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Apps/AppClients.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Apps/AppClients.cs
@@ -6,32 +6,69 @@
// All rights reserved.
// ==========================================================================
+using System.Collections.Immutable;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Apps
{
- public sealed class AppClients : DictionaryBase
+ public sealed class AppClients : DictionaryWrapper
{
- public void Add(string id, AppClient client)
+ public static readonly AppClients Empty = new AppClients();
+
+ private AppClients()
+ : base(ImmutableDictionary.Empty)
+ {
+ }
+
+ public AppClients(ImmutableDictionary inner)
+ : base(inner)
+ {
+ }
+
+ public AppClients Add(string id, AppClient client)
{
Guard.NotNullOrEmpty(id, nameof(id));
Guard.NotNull(client, nameof(client));
- Inner.Add(id, client);
+ return new AppClients(Inner.Add(id, client));
}
- public void Add(string id, string secret)
+ public AppClients Add(string id, string secret)
{
Guard.NotNullOrEmpty(id, nameof(id));
- Inner.Add(id, new AppClient(id, secret, AppClientPermission.Editor));
+ return new AppClients(Inner.Add(id, new AppClient(id, secret, AppClientPermission.Editor)));
}
- public void Revoke(string id)
+ public AppClients Revoke(string id)
{
Guard.NotNullOrEmpty(id, nameof(id));
- Inner.Remove(id);
+ return new AppClients(Inner.Remove(id));
+ }
+
+ public AppClients Rename(string id, string newName)
+ {
+ Guard.NotNullOrEmpty(id, nameof(id));
+
+ if (!TryGetValue(id, out var client))
+ {
+ return this;
+ }
+
+ return new AppClients(Inner.SetItem(id, client.Rename(newName)));
+ }
+
+ public AppClients Update(string id, AppClientPermission permission)
+ {
+ Guard.NotNullOrEmpty(id, nameof(id));
+
+ if (!TryGetValue(id, out var client))
+ {
+ return this;
+ }
+
+ return new AppClients(Inner.SetItem(id, client.Update(permission)));
}
}
}
diff --git a/src/Squidex.Domain.Apps.Core.Model/Apps/AppContributors.cs b/src/Squidex.Domain.Apps.Core.Model/Apps/AppContributors.cs
index 9c4ce924d..b9639881b 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Apps/AppContributors.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Apps/AppContributors.cs
@@ -6,25 +6,38 @@
// All rights reserved.
// ==========================================================================
+using System.Collections.Immutable;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Apps
{
- public sealed class AppContributors : DictionaryBase
+ public sealed class AppContributors : DictionaryWrapper
{
- public void Assign(string contributorId, AppContributorPermission permission)
+ public static readonly AppContributors Empty = new AppContributors();
+
+ private AppContributors()
+ : base(ImmutableDictionary.Empty)
+ {
+ }
+
+ public AppContributors(ImmutableDictionary inner)
+ : base(inner)
+ {
+ }
+
+ public AppContributors Assign(string contributorId, AppContributorPermission permission)
{
Guard.NotNullOrEmpty(contributorId, nameof(contributorId));
Guard.Enum(permission, nameof(permission));
- Inner[contributorId] = permission;
+ return new AppContributors(Inner.SetItem(contributorId, permission));
}
- public void Remove(string contributorId)
+ public AppContributors Remove(string contributorId)
{
Guard.NotNullOrEmpty(contributorId, nameof(contributorId));
- Inner.Remove(contributorId);
+ return new AppContributors(Inner.Remove(contributorId));
}
}
}
diff --git a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppClientsConverter.cs b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppClientsConverter.cs
index 11eb45b48..1aa4d4eca 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppClientsConverter.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppClientsConverter.cs
@@ -8,6 +8,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using Newtonsoft.Json;
using Squidex.Infrastructure.Json;
@@ -31,14 +32,7 @@ namespace Squidex.Domain.Apps.Core.Apps.Json
{
var json = serializer.Deserialize>(reader);
- var clients = new AppClients();
-
- foreach (var client in json)
- {
- clients.Add(client.Key, client.Value.ToClient());
- }
-
- return clients;
+ return new AppClients(json.ToImmutableDictionary(x => x.Key, x => x.Value.ToClient()));
}
}
}
diff --git a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppContributorsConverter.cs b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppContributorsConverter.cs
index 5c4921d08..76baa1710 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppContributorsConverter.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Apps/Json/AppContributorsConverter.cs
@@ -8,6 +8,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using Newtonsoft.Json;
using Squidex.Infrastructure.Json;
@@ -31,14 +32,7 @@ namespace Squidex.Domain.Apps.Core.Apps.Json
{
var json = serializer.Deserialize>(reader);
- var contributors = new AppContributors();
-
- foreach (var contributor in json)
- {
- contributors.Assign(contributor.Key, contributor.Value);
- }
-
- return contributors;
+ return new AppContributors(json.ToImmutableDictionary());
}
}
}
diff --git a/src/Squidex.Domain.Apps.Core.Model/Apps/LanguagesConfig.cs b/src/Squidex.Domain.Apps.Core.Model/Apps/LanguagesConfig.cs
index d9c2c24e9..fd7e0dc09 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Apps/LanguagesConfig.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Apps/LanguagesConfig.cs
@@ -13,80 +13,101 @@ using System.Collections.Immutable;
using System.Linq;
using Squidex.Infrastructure;
-#pragma warning disable IDE0016 // Use 'throw' expression
-
namespace Squidex.Domain.Apps.Core.Apps
{
public sealed class LanguagesConfig : IFieldPartitioning
{
- private State state;
+ public static readonly LanguagesConfig Empty = new LanguagesConfig(ImmutableDictionary.Empty, null, false);
+ public static readonly LanguagesConfig English = LanguagesConfig.Build(Language.EN);
+
+ private readonly ImmutableDictionary languages;
+ private readonly LanguageConfig master;
public LanguageConfig Master
{
- get { return state.Master; }
+ get { return master; }
}
IFieldPartitionItem IFieldPartitioning.Master
{
- get { return state.Master; }
+ get { return master; }
}
IEnumerator IEnumerable.GetEnumerator()
{
- return state.Languages.Values.GetEnumerator();
+ return languages.Values.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
- return state.Languages.Values.GetEnumerator();
+ return languages.Values.GetEnumerator();
}
public int Count
{
- get { return state.Languages.Count; }
+ get { return languages.Count; }
}
- private LanguagesConfig(ICollection configs)
+ private LanguagesConfig(ImmutableDictionary languages, LanguageConfig master, bool checkMaster = true)
{
- Guard.NotNull(configs, nameof(configs));
+ if (checkMaster)
+ {
+ this.master = master ?? throw new InvalidOperationException("Config has no master language.");
+ }
+
+ foreach (var languageConfig in languages.Values)
+ {
+ foreach (var fallback in languageConfig.LanguageFallbacks)
+ {
+ if (!languages.ContainsKey(fallback))
+ {
+ var message = $"Config for language '{languageConfig.Language.Iso2Code}' contains unsupported fallback language '{fallback.Iso2Code}'";
- state = new State(configs.ToImmutableDictionary(x => x.Language), configs.FirstOrDefault());
+ throw new InvalidOperationException(message);
+ }
+ }
+ }
+
+ this.languages = languages;
}
- public static LanguagesConfig Build(params LanguageConfig[] configs)
+ public static LanguagesConfig Build(ICollection configs)
{
Guard.NotNull(configs, nameof(configs));
- return new LanguagesConfig(configs);
+ return new LanguagesConfig(configs.ToImmutableDictionary(x => x.Language), configs.FirstOrDefault());
}
- public static LanguagesConfig Build(params Language[] languages)
+ public static LanguagesConfig Build(params LanguageConfig[] configs)
{
- Guard.NotNull(languages, nameof(languages));
+ return Build(configs?.ToList());
+ }
- return new LanguagesConfig(languages.Select(x => new LanguageConfig(x, false)).ToList());
+ public static LanguagesConfig Build(params Language[] languages)
+ {
+ return Build(languages?.Select(x => new LanguageConfig(x, false))?.ToList());
}
- public void MakeMaster(Language language)
+ public LanguagesConfig MakeMaster(Language language)
{
Guard.NotNull(language, nameof(language));
- state = new State(state.Languages, state.Languages[language]);
+ return new LanguagesConfig(languages, languages[language]);
}
- public void Set(LanguageConfig config)
+ public LanguagesConfig Set(LanguageConfig config)
{
Guard.NotNull(config, nameof(config));
- state = new State(state.Languages.SetItem(config.Language, config), state.Master?.Language == config.Language ? config : state.Master);
+ return new LanguagesConfig(languages.SetItem(config.Language, config), Master?.Language == config.Language ? config : Master);
}
- public void Remove(Language language)
+ public LanguagesConfig Remove(Language language)
{
Guard.NotNull(language, nameof(language));
var newLanguages =
- state.Languages.Values.Where(x => x.Language != language)
+ languages.Values.Where(x => x.Language != language)
.Select(config =>
{
return new LanguageConfig(
@@ -97,26 +118,26 @@ namespace Squidex.Domain.Apps.Core.Apps
.ToImmutableDictionary(x => x.Language);
var newMaster =
- state.Master.Language != language ?
- state.Master :
+ Master.Language != language ?
+ Master :
newLanguages.Values.FirstOrDefault();
- state = new State(newLanguages, newMaster);
+ return new LanguagesConfig(newLanguages, newMaster);
}
public bool Contains(Language language)
{
- return language != null && state.Languages.ContainsKey(language);
+ return language != null && languages.ContainsKey(language);
}
public bool TryGetConfig(Language language, out LanguageConfig config)
{
- return state.Languages.TryGetValue(language, out config);
+ return languages.TryGetValue(language, out config);
}
public bool TryGetItem(string key, out IFieldPartitionItem item)
{
- if (Language.IsValidLanguage(key) && state.Languages.TryGetValue(key, out var value))
+ if (Language.IsValidLanguage(key) && languages.TryGetValue(key, out var value))
{
item = value;
@@ -130,38 +151,6 @@ namespace Squidex.Domain.Apps.Core.Apps
}
}
- private sealed class State
- {
- public ImmutableDictionary Languages { get; }
-
- public LanguageConfig Master { get; }
-
- public State(ImmutableDictionary languages, LanguageConfig master)
- {
- foreach (var languageConfig in languages.Values)
- {
- foreach (var fallback in languageConfig.LanguageFallbacks)
- {
- if (!languages.ContainsKey(fallback))
- {
- var message = $"Config for language '{languageConfig.Language.Iso2Code}' contains unsupported fallback language '{fallback.Iso2Code}'";
-
- throw new InvalidOperationException(message);
- }
- }
- }
-
- Languages = languages;
-
- if (master == null)
- {
- throw new InvalidOperationException("Config has no master language.");
- }
-
- this.Master = master;
- }
- }
-
public PartitionResolver ToResolver()
{
return partitioning =>
diff --git a/src/Squidex.Domain.Apps.Core.Model/DictionaryBase.cs b/src/Squidex.Domain.Apps.Core.Model/DictionaryWrapper{TKey,TValue}.cs
similarity index 78%
rename from src/Squidex.Domain.Apps.Core.Model/DictionaryBase.cs
rename to src/Squidex.Domain.Apps.Core.Model/DictionaryWrapper{TKey,TValue}.cs
index 6b3734c6a..8922cfa48 100644
--- a/src/Squidex.Domain.Apps.Core.Model/DictionaryBase.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/DictionaryWrapper{TKey,TValue}.cs
@@ -8,12 +8,13 @@
using System.Collections;
using System.Collections.Generic;
+using System.Collections.Immutable;
namespace Squidex.Domain.Apps.Core
{
- public abstract class DictionaryBase : IReadOnlyDictionary
+ public abstract class DictionaryWrapper : IReadOnlyDictionary
{
- private readonly Dictionary inner = new Dictionary();
+ private readonly ImmutableDictionary inner;
public TValue this[TKey key]
{
@@ -35,11 +36,16 @@ namespace Squidex.Domain.Apps.Core
get { return inner.Count; }
}
- protected Dictionary Inner
+ protected ImmutableDictionary Inner
{
get { return inner; }
}
+ protected DictionaryWrapper(ImmutableDictionary inner)
+ {
+ this.inner = inner;
+ }
+
public bool ContainsKey(TKey key)
{
return inner.ContainsKey(key);
diff --git a/src/Squidex.Domain.Apps.Core.Model/Schemas/AssetsFieldProperties.cs b/src/Squidex.Domain.Apps.Core.Model/Schemas/AssetsFieldProperties.cs
index ffd1eb029..f969b6603 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Schemas/AssetsFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Schemas/AssetsFieldProperties.cs
@@ -6,8 +6,6 @@
// All rights reserved.
// ==========================================================================
-using System.Collections.Generic;
-using Newtonsoft.Json.Linq;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
diff --git a/src/Squidex.Domain.Apps.Core.Model/Schemas/BooleanFieldProperties.cs b/src/Squidex.Domain.Apps.Core.Model/Schemas/BooleanFieldProperties.cs
index 3f3e56ab9..cbd54521b 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Schemas/BooleanFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Schemas/BooleanFieldProperties.cs
@@ -6,8 +6,6 @@
// All rights reserved.
// ==========================================================================
-using System.Collections.Generic;
-using Newtonsoft.Json.Linq;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
diff --git a/src/Squidex.Domain.Apps.Core.Model/Schemas/DateTimeFieldProperties.cs b/src/Squidex.Domain.Apps.Core.Model/Schemas/DateTimeFieldProperties.cs
index 6adcae338..982de7e40 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Schemas/DateTimeFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Schemas/DateTimeFieldProperties.cs
@@ -6,9 +6,6 @@
// All rights reserved.
// ==========================================================================
-using System;
-using System.Collections.Generic;
-using Newtonsoft.Json.Linq;
using NodaTime;
using Squidex.Infrastructure;
diff --git a/src/Squidex.Domain.Apps.Core.Model/Schemas/GeolocationFieldProperties.cs b/src/Squidex.Domain.Apps.Core.Model/Schemas/GeolocationFieldProperties.cs
index ef94fd8d4..e82e6ab89 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Schemas/GeolocationFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Schemas/GeolocationFieldProperties.cs
@@ -6,8 +6,6 @@
// All rights reserved.
// ==========================================================================
-using System.Collections.Generic;
-using Newtonsoft.Json.Linq;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
diff --git a/src/Squidex.Domain.Apps.Core.Model/Schemas/JsonFieldProperties.cs b/src/Squidex.Domain.Apps.Core.Model/Schemas/JsonFieldProperties.cs
index 981da30a1..c432be09a 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Schemas/JsonFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Schemas/JsonFieldProperties.cs
@@ -6,8 +6,6 @@
// All rights reserved.
// ==========================================================================
-using System.Collections.Generic;
-using Newtonsoft.Json.Linq;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
diff --git a/src/Squidex.Domain.Apps.Core.Model/Schemas/NumberFieldProperties.cs b/src/Squidex.Domain.Apps.Core.Model/Schemas/NumberFieldProperties.cs
index 884b145bd..2fe90fd73 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Schemas/NumberFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Schemas/NumberFieldProperties.cs
@@ -6,9 +6,7 @@
// All rights reserved.
// ==========================================================================
-using System.Collections.Generic;
using System.Collections.Immutable;
-using Newtonsoft.Json.Linq;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
diff --git a/src/Squidex.Domain.Apps.Core.Model/Schemas/ReferencesFieldProperties.cs b/src/Squidex.Domain.Apps.Core.Model/Schemas/ReferencesFieldProperties.cs
index 6562ca86d..bfc5119a0 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Schemas/ReferencesFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Schemas/ReferencesFieldProperties.cs
@@ -7,8 +7,6 @@
// ==========================================================================
using System;
-using System.Collections.Generic;
-using Newtonsoft.Json.Linq;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas
diff --git a/src/Squidex.Domain.Apps.Core.Model/Schemas/StringFieldProperties.cs b/src/Squidex.Domain.Apps.Core.Model/Schemas/StringFieldProperties.cs
index e48a4fefc..849ac97a8 100644
--- a/src/Squidex.Domain.Apps.Core.Model/Schemas/StringFieldProperties.cs
+++ b/src/Squidex.Domain.Apps.Core.Model/Schemas/StringFieldProperties.cs
@@ -6,11 +6,8 @@
// All rights reserved.
// ==========================================================================
-using System.Collections.Generic;
using System.Collections.Immutable;
-using Newtonsoft.Json.Linq;
using Squidex.Infrastructure;
-using Squidex.Infrastructure.Json;
namespace Squidex.Domain.Apps.Core.Schemas
{
diff --git a/src/Squidex.Domain.Apps.Events/Apps/Utils/AppEventDispatcher.cs b/src/Squidex.Domain.Apps.Events/Apps/Utils/AppEventDispatcher.cs
index e6b4a9998..5da60f86e 100644
--- a/src/Squidex.Domain.Apps.Events/Apps/Utils/AppEventDispatcher.cs
+++ b/src/Squidex.Domain.Apps.Events/Apps/Utils/AppEventDispatcher.cs
@@ -13,53 +13,47 @@ namespace Squidex.Domain.Apps.Events.Apps.Utils
{
public static class AppEventDispatcher
{
- public static void Apply(this AppContributors contributors, AppContributorRemoved @event)
+ public static AppContributors Apply(this AppContributors contributors, AppContributorRemoved @event)
{
- contributors.Remove(@event.ContributorId);
+ return contributors.Remove(@event.ContributorId);
}
- public static void Apply(this AppContributors contributors, AppContributorAssigned @event)
+ public static AppContributors Apply(this AppContributors contributors, AppContributorAssigned @event)
{
- contributors.Assign(@event.ContributorId, @event.Permission);
+ return contributors.Assign(@event.ContributorId, @event.Permission);
}
- public static void Apply(this LanguagesConfig languagesConfig, AppLanguageAdded @event)
+ public static LanguagesConfig Apply(this LanguagesConfig languagesConfig, AppLanguageAdded @event)
{
- languagesConfig.Set(new LanguageConfig(@event.Language));
+ return languagesConfig.Set(new LanguageConfig(@event.Language));
}
- public static void Apply(this LanguagesConfig languagesConfig, AppLanguageRemoved @event)
+ public static LanguagesConfig Apply(this LanguagesConfig languagesConfig, AppLanguageRemoved @event)
{
- languagesConfig.Remove(@event.Language);
+ return languagesConfig.Remove(@event.Language);
}
- public static void Apply(this AppClients clients, AppClientAttached @event)
+ public static AppClients Apply(this AppClients clients, AppClientAttached @event)
{
- clients.Add(@event.Id, @event.Secret);
+ return clients.Add(@event.Id, @event.Secret);
}
- public static void Apply(this AppClients clients, AppClientRevoked @event)
+ public static AppClients Apply(this AppClients clients, AppClientRevoked @event)
{
- clients.Revoke(@event.Id);
+ return clients.Revoke(@event.Id);
}
- public static void Apply(this AppClients clients, AppClientRenamed @event)
+ public static AppClients Apply(this AppClients clients, AppClientRenamed @event)
{
- if (clients.TryGetValue(@event.Id, out var client))
- {
- client.Rename(@event.Name);
- }
+ return clients.Rename(@event.Id, @event.Name);
}
- public static void Apply(this AppClients clients, AppClientUpdated @event)
+ public static AppClients Apply(this AppClients clients, AppClientUpdated @event)
{
- if (clients.TryGetValue(@event.Id, out var client))
- {
- client.Update(@event.Permission);
- }
+ return clients.Update(@event.Id, @event.Permission);
}
- public static void Apply(this LanguagesConfig languagesConfig, AppLanguageUpdated @event)
+ public static LanguagesConfig Apply(this LanguagesConfig languagesConfig, AppLanguageUpdated @event)
{
var fallback = @event.Fallback;
@@ -70,12 +64,14 @@ namespace Squidex.Domain.Apps.Events.Apps.Utils
fallback = fallback.Intersect(existingLangauges).ToList();
}
- languagesConfig.Set(new LanguageConfig(@event.Language, @event.IsOptional, fallback));
+ languagesConfig = languagesConfig.Set(new LanguageConfig(@event.Language, @event.IsOptional, fallback));
if (@event.IsMaster)
{
- languagesConfig.MakeMaster(@event.Language);
+ languagesConfig = languagesConfig.MakeMaster(@event.Language);
}
+
+ return languagesConfig;
}
}
}
diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/Assets/MongoAssetEntity.cs b/src/Squidex.Domain.Apps.Read.MongoDb/Assets/MongoAssetEntity.cs
index 11c54cc36..10d6f31ff 100644
--- a/src/Squidex.Domain.Apps.Read.MongoDb/Assets/MongoAssetEntity.cs
+++ b/src/Squidex.Domain.Apps.Read.MongoDb/Assets/MongoAssetEntity.cs
@@ -14,7 +14,12 @@ using Squidex.Infrastructure.MongoDb;
namespace Squidex.Domain.Apps.Read.MongoDb.Assets
{
- public sealed class MongoAssetEntity : MongoEntity, IAssetEntity
+ public sealed class MongoAssetEntity :
+ MongoEntity,
+ IAssetEntity,
+ IUpdateableEntityWithVersion,
+ IUpdateableEntityWithCreatedBy,
+ IUpdateableEntityWithLastModifiedBy
{
[BsonRequired]
[BsonElement]
diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/Contents/MongoContentEntity.cs b/src/Squidex.Domain.Apps.Read.MongoDb/Contents/MongoContentEntity.cs
index acc3b793f..070c535ec 100644
--- a/src/Squidex.Domain.Apps.Read.MongoDb/Contents/MongoContentEntity.cs
+++ b/src/Squidex.Domain.Apps.Read.MongoDb/Contents/MongoContentEntity.cs
@@ -19,7 +19,11 @@ using Squidex.Infrastructure.MongoDb;
namespace Squidex.Domain.Apps.Read.MongoDb.Contents
{
- public sealed class MongoContentEntity : IContentEntity
+ public sealed class MongoContentEntity :
+ IContentEntity,
+ IUpdateableEntityWithVersion,
+ IUpdateableEntityWithCreatedBy,
+ IUpdateableEntityWithLastModifiedBy
{
private NamedContentData data;
diff --git a/src/Squidex.Domain.Apps.Read.MongoDb/History/MongoHistoryEventEntity.cs b/src/Squidex.Domain.Apps.Read.MongoDb/History/MongoHistoryEventEntity.cs
index b0563ae70..e09f4206e 100644
--- a/src/Squidex.Domain.Apps.Read.MongoDb/History/MongoHistoryEventEntity.cs
+++ b/src/Squidex.Domain.Apps.Read.MongoDb/History/MongoHistoryEventEntity.cs
@@ -14,7 +14,10 @@ using Squidex.Infrastructure.MongoDb;
namespace Squidex.Domain.Apps.Read.MongoDb.History
{
- public sealed class MongoHistoryEventEntity : MongoEntity, IAppRefEntity, IEntityWithCreatedBy
+ public sealed class MongoHistoryEventEntity : MongoEntity,
+ IEntityWithAppRef,
+ IUpdateableEntityWithVersion,
+ IUpdateableEntityWithCreatedBy
{
[BsonRequired]
[BsonElement]
@@ -40,7 +43,7 @@ namespace Squidex.Domain.Apps.Read.MongoDb.History
[BsonElement]
public Dictionary Parameters { get; set; }
- RefToken IEntityWithCreatedBy.CreatedBy
+ RefToken IUpdateableEntityWithCreatedBy.CreatedBy
{
get
{
diff --git a/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrain.cs b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrain.cs
index 3310a0b0c..f0ead23f0 100644
--- a/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrain.cs
+++ b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrain.cs
@@ -31,6 +31,13 @@ namespace Squidex.Domain.Apps.Read.State.Orleans.Grains.Implementations
this.fieldRegistry = fieldRegistry;
}
+ public override Task OnActivateAsync()
+ {
+ State.SetRegistry(fieldRegistry);
+
+ return base.OnActivateAsync();
+ }
+
public Task> GetAppWithSchemaAsync(Guid id)
{
var schema = State.FindSchema(x => x.Id == id && !x.IsDeleted);
@@ -75,7 +82,7 @@ namespace Squidex.Domain.Apps.Read.State.Orleans.Grains.Implementations
public Task HandleAsync(Immutable> message)
{
- State.Apply(message.Value, fieldRegistry);
+ State.Apply(message.Value);
return WriteStateAsync();
}
diff --git a/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState.cs b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState.cs
index d8beec0a2..ec67a8913 100644
--- a/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState.cs
+++ b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState.cs
@@ -10,29 +10,19 @@ using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
-using Squidex.Domain.Apps.Core.Apps;
using Squidex.Domain.Apps.Core.Schemas;
-using Squidex.Domain.Apps.Events;
-using Squidex.Domain.Apps.Events.Apps;
-using Squidex.Domain.Apps.Events.Apps.Utils;
-using Squidex.Domain.Apps.Events.Rules;
-using Squidex.Domain.Apps.Events.Rules.Utils;
-using Squidex.Domain.Apps.Events.Schemas;
-using Squidex.Domain.Apps.Events.Schemas.Old;
-using Squidex.Domain.Apps.Events.Schemas.Utils;
using Squidex.Domain.Apps.Read.Apps;
using Squidex.Domain.Apps.Read.Rules;
using Squidex.Domain.Apps.Read.Schemas;
-using Squidex.Infrastructure;
using Squidex.Infrastructure.CQRS.Events;
-using Squidex.Infrastructure.Reflection;
-
-#pragma warning disable CS0612 // Type or member is obsolete
+using Squidex.Infrastructure.Dispatching;
namespace Squidex.Domain.Apps.Read.State.Orleans.Grains.Implementations
{
- public sealed class AppStateGrainState
+ public sealed partial class AppStateGrainState
{
+ private FieldRegistry registry;
+
[JsonProperty]
public JsonAppEntity App { get; set; }
@@ -42,6 +32,11 @@ namespace Squidex.Domain.Apps.Read.State.Orleans.Grains.Implementations
[JsonProperty]
public Dictionary Schemas { get; set; }
+ public void SetRegistry(FieldRegistry registry)
+ {
+ this.registry = registry;
+ }
+
public IAppEntity GetApp()
{
return App;
@@ -69,253 +64,14 @@ namespace Squidex.Domain.Apps.Read.State.Orleans.Grains.Implementations
Schemas = new Dictionary();
}
- public void Apply(Envelope envelope, FieldRegistry registry)
+ public void Apply(Envelope envelope)
{
- switch (envelope.Payload)
- {
- case AppCreated @event:
- {
- Reset();
-
- App = EntityMapper.Create(@event, envelope.Headers, a =>
- {
- SimpleMapper.Map(@event, a);
-
- a.Clients = new AppClients();
- a.Contributors = new AppContributors();
-
- a.LanguagesConfig = LanguagesConfig.Build(Language.EN);
- });
-
- break;
- }
-
- case AppPlanChanged @event:
- UpdateApp(envelope, a =>
- {
- SimpleMapper.Map(@event, a);
- });
- break;
-
- case AppClientAttached @event:
- UpdateApp(envelope, a =>
- {
- a.Clients.Apply(@event);
- });
- break;
-
- case AppClientRevoked @event:
- UpdateApp(envelope, a =>
- {
- a.Clients.Apply(@event);
- });
- break;
-
- case AppClientRenamed @event:
- UpdateApp(envelope, a =>
- {
- a.Clients.Apply(@event);
- });
- break;
-
- case AppClientUpdated @event:
- UpdateApp(envelope, a =>
- {
- a.Clients.Apply(@event);
- });
- break;
-
- case AppContributorRemoved @event:
- UpdateApp(envelope, a =>
- {
- a.Contributors.Apply(@event);
- });
- break;
-
- case AppContributorAssigned @event:
- UpdateApp(envelope, a =>
- {
- a.Contributors.Apply(@event);
- });
- break;
-
- case AppLanguageAdded @event:
- UpdateApp(envelope, a =>
- {
- a.LanguagesConfig.Apply(@event);
- });
- break;
-
- case AppLanguageRemoved @event:
- UpdateApp(envelope, a =>
- {
- a.LanguagesConfig.Apply(@event);
- });
- break;
-
- case AppLanguageUpdated @event:
- UpdateApp(envelope, a =>
- {
- a.LanguagesConfig.Apply(@event);
- });
- break;
-
- case RuleCreated @event:
- Rules[@event.RuleId] = EntityMapper.Create(@event, envelope.Headers, r =>
- {
- r.RuleDef = RuleEventDispatcher.Create(@event);
- });
- break;
-
- case RuleUpdated @event:
- UpdateRule(envelope, r =>
- {
- r.RuleDef = r.RuleDef.Apply(@event);
- });
- break;
-
- case RuleEnabled @event:
- UpdateRule(envelope, r =>
- {
- r.RuleDef = r.RuleDef.Apply(@event);
- });
- break;
-
- case RuleDisabled @event:
- Rules.Remove(@event.RuleId);
- break;
-
- case SchemaCreated @event:
- Schemas[@event.SchemaId.Id] = EntityMapper.Create(@event, envelope.Headers, s =>
- {
- s.SchemaDef = SchemaEventDispatcher.Create(@event, registry);
-
- SimpleMapper.Map(@event, s);
- });
- break;
-
- case FieldAdded @event:
- UpdateSchema(envelope, s =>
- {
- s.SchemaDef = s.SchemaDef.Apply(@event, registry);
- });
- break;
-
- case FieldDeleted @event:
- UpdateSchema(envelope, s =>
- {
- s.SchemaDef = s.SchemaDef.Apply(@event);
- });
- break;
-
- case FieldLocked @event:
- UpdateSchema(envelope, s =>
- {
- s.SchemaDef = s.SchemaDef.Apply(@event);
- });
- break;
-
- case FieldHidden @event:
- UpdateSchema(envelope, s =>
- {
- s.SchemaDef = s.SchemaDef.Apply(@event);
- });
- break;
-
- case FieldShown @event:
- UpdateSchema(envelope, s =>
- {
- s.SchemaDef = s.SchemaDef.Apply(@event);
- });
- break;
-
- case FieldDisabled @event:
- UpdateSchema(envelope, s =>
- {
- s.SchemaDef = s.SchemaDef.Apply(@event);
- });
- break;
-
- case FieldEnabled @event:
- UpdateSchema(envelope, s =>
- {
- s.SchemaDef = s.SchemaDef.Apply(@event);
- });
- break;
-
- case FieldUpdated @event:
- UpdateSchema(envelope, s =>
- {
- s.SchemaDef = s.SchemaDef.Apply(@event);
- });
- break;
-
- case SchemaFieldsReordered @event:
- UpdateSchema(envelope, s =>
- {
- s.SchemaDef = s.SchemaDef.Apply(@event);
- });
- break;
-
- case SchemaUpdated @event:
- UpdateSchema(envelope, s =>
- {
- s.SchemaDef = s.SchemaDef.Apply(@event);
- });
- break;
-
- case SchemaPublished @event:
- UpdateSchema(envelope, s =>
- {
- s.SchemaDef = s.SchemaDef.Apply(@event);
- });
- break;
-
- case ScriptsConfigured @event:
- UpdateSchema(envelope, s =>
- {
- SimpleMapper.Map(s, @event);
- });
- break;
-
- case SchemaDeleted @event:
- Schemas.Remove(@event.SchemaId.Id);
- break;
-
- case WebhookAdded @event:
- UpdateSchema(envelope);
- break;
-
- case WebhookDeleted @event:
- UpdateSchema(envelope);
- break;
- }
+ this.DispatchAction(envelope.Payload, envelope.Headers);
if (App != null)
{
App.Etag = Guid.NewGuid().ToString();
}
}
-
- private void UpdateApp(Envelope envelope, Action updater = null)
- {
- var e = envelope.To();
-
- App.Update(e.Payload, e.Headers, updater);
- }
-
- private void UpdateRule(Envelope envelope, Action updater = null)
- {
- var e = envelope.To();
-
- Rules[e.Payload.RuleId].Clone().Update(e.Payload, e.Headers, updater);
- }
-
- private void UpdateSchema(Envelope envelope, Action updater = null)
- {
- var e = envelope.To();
-
- Schemas[e.Payload.SchemaId.Id].Clone().Update(e.Payload, e.Headers, updater);
- }
}
}
\ No newline at end of file
diff --git a/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState_Apps.cs b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState_Apps.cs
new file mode 100644
index 000000000..7576c904d
--- /dev/null
+++ b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState_Apps.cs
@@ -0,0 +1,119 @@
+// ==========================================================================
+// AppStateGrainState_Apps.cs
+// Squidex Headless CMS
+// ==========================================================================
+// Copyright (c) Squidex Group
+// All rights reserved.
+// ==========================================================================
+
+using System;
+using Squidex.Domain.Apps.Core.Apps;
+using Squidex.Domain.Apps.Events;
+using Squidex.Domain.Apps.Events.Apps;
+using Squidex.Domain.Apps.Events.Apps.Utils;
+using Squidex.Infrastructure;
+using Squidex.Infrastructure.CQRS.Events;
+using Squidex.Infrastructure.Reflection;
+
+namespace Squidex.Domain.Apps.Read.State.Orleans.Grains.Implementations
+{
+ public sealed partial class AppStateGrainState
+ {
+ public void On(AppCreated @event, EnvelopeHeaders headers)
+ {
+ Reset();
+
+ App = EntityMapper.Create(@event, headers, a =>
+ {
+ SimpleMapper.Map(@event, a);
+
+ a.LanguagesConfig = LanguagesConfig.Build(Language.EN);
+ });
+ }
+
+ public void On(AppLanguageAdded @event, EnvelopeHeaders headers)
+ {
+ UpdateApp(@event, headers, a =>
+ {
+ a.LanguagesConfig = a.LanguagesConfig.Apply(@event);
+ });
+ }
+
+ public void On(AppLanguageRemoved @event, EnvelopeHeaders headers)
+ {
+ UpdateApp(@event, headers, a =>
+ {
+ a.LanguagesConfig = a.LanguagesConfig.Apply(@event);
+ });
+ }
+
+ public void On(AppLanguageUpdated @event, EnvelopeHeaders headers)
+ {
+ UpdateApp(@event, headers, a =>
+ {
+ a.LanguagesConfig = a.LanguagesConfig.Apply(@event);
+ });
+ }
+
+ public void On(AppContributorAssigned @event, EnvelopeHeaders headers)
+ {
+ UpdateApp(@event, headers, a =>
+ {
+ a.Contributors = a.Contributors.Apply(@event);
+ });
+ }
+
+ public void On(AppContributorRemoved @event, EnvelopeHeaders headers)
+ {
+ UpdateApp(@event, headers, a =>
+ {
+ a.Contributors = a.Contributors.Apply(@event);
+ });
+ }
+
+ public void On(AppClientAttached @event, EnvelopeHeaders headers)
+ {
+ UpdateApp(@event, headers, a =>
+ {
+ a.Clients = a.Clients.Apply(@event);
+ });
+ }
+
+ public void On(AppClientUpdated @event, EnvelopeHeaders headers)
+ {
+ UpdateApp(@event, headers, a =>
+ {
+ a.Clients = a.Clients.Apply(@event);
+ });
+ }
+
+ public void On(AppClientRenamed @event, EnvelopeHeaders headers)
+ {
+ UpdateApp(@event, headers, a =>
+ {
+ a.Clients = a.Clients.Apply(@event);
+ });
+ }
+
+ public void On(AppClientRevoked @event, EnvelopeHeaders headers)
+ {
+ UpdateApp(@event, headers, a =>
+ {
+ a.Clients = a.Clients.Apply(@event);
+ });
+ }
+
+ public void On(AppPlanChanged @event, EnvelopeHeaders headers)
+ {
+ UpdateApp(@event, headers, a =>
+ {
+ SimpleMapper.Map(@event, a);
+ });
+ }
+
+ private void UpdateApp(AppEvent @event, EnvelopeHeaders headers, Action updater = null)
+ {
+ App = App.Clone().Update(@event, headers, updater);
+ }
+ }
+}
diff --git a/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState_Rules.cs b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState_Rules.cs
new file mode 100644
index 000000000..b96fa76cd
--- /dev/null
+++ b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState_Rules.cs
@@ -0,0 +1,60 @@
+// ==========================================================================
+// AppStateGrainState_Rules.cs
+// Squidex Headless CMS
+// ==========================================================================
+// Copyright (c) Squidex Group
+// All rights reserved.
+// ==========================================================================
+
+using System;
+using Squidex.Domain.Apps.Events.Rules;
+using Squidex.Domain.Apps.Events.Rules.Utils;
+using Squidex.Infrastructure.CQRS.Events;
+
+namespace Squidex.Domain.Apps.Read.State.Orleans.Grains.Implementations
+{
+ public sealed partial class AppStateGrainState
+ {
+ public void On(RuleCreated @event, EnvelopeHeaders headers)
+ {
+ Rules[@event.RuleId] = EntityMapper.Create(@event, headers, r =>
+ {
+ r.RuleDef = RuleEventDispatcher.Create(@event);
+ });
+ }
+
+ public void On(RuleUpdated @event, EnvelopeHeaders headers)
+ {
+ UpdateRule(@event, headers, r =>
+ {
+ r.RuleDef = r.RuleDef.Apply(@event);
+ });
+ }
+
+ public void On(RuleEnabled @event, EnvelopeHeaders headers)
+ {
+ UpdateRule(@event, headers, r =>
+ {
+ r.RuleDef = r.RuleDef.Apply(@event);
+ });
+ }
+
+ public void On(RuleDisabled @event, EnvelopeHeaders headers)
+ {
+ UpdateRule(@event, headers, r =>
+ {
+ r.RuleDef = r.RuleDef.Apply(@event);
+ });
+ }
+
+ public void On(RuleDeleted @event, EnvelopeHeaders headers)
+ {
+ Rules.Remove(@event.RuleId);
+ }
+
+ private void UpdateRule(RuleEvent @event, EnvelopeHeaders headers, Action updater = null)
+ {
+ Rules[@event.RuleId].Clone().Update(@event, headers, updater);
+ }
+ }
+}
diff --git a/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState_Schemas.cs b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState_Schemas.cs
new file mode 100644
index 000000000..0b3ad8d5d
--- /dev/null
+++ b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/AppStateGrainState_Schemas.cs
@@ -0,0 +1,157 @@
+// ==========================================================================
+// AppStateGrainState_Schemas.cs
+// Squidex Headless CMS
+// ==========================================================================
+// Copyright (c) Squidex Group
+// All rights reserved.
+// ==========================================================================
+
+using System;
+using Squidex.Domain.Apps.Events;
+using Squidex.Domain.Apps.Events.Schemas;
+using Squidex.Domain.Apps.Events.Schemas.Old;
+using Squidex.Domain.Apps.Events.Schemas.Utils;
+using Squidex.Infrastructure.CQRS.Events;
+using Squidex.Infrastructure.Reflection;
+
+#pragma warning disable CS0612 // Type or member is obsolete
+
+namespace Squidex.Domain.Apps.Read.State.Orleans.Grains.Implementations
+{
+ public sealed partial class AppStateGrainState
+ {
+ public void On(SchemaCreated @event, EnvelopeHeaders headers)
+ {
+ Schemas[@event.SchemaId.Id] = EntityMapper.Create(@event, headers, s =>
+ {
+ s.SchemaDef = SchemaEventDispatcher.Create(@event, registry);
+
+ SimpleMapper.Map(@event, s);
+ });
+ }
+
+ public void On(SchemaPublished @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event);
+ });
+ }
+
+ public void On(SchemaUnpublished @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event);
+ });
+ }
+
+ public void On(ScriptsConfigured @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ SimpleMapper.Map(s, @event);
+ });
+ }
+
+ public void On(SchemaUpdated @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event);
+ });
+ }
+
+ public void On(SchemaFieldsReordered @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event);
+ });
+ }
+
+ public void On(SchemaDeleted @event)
+ {
+ Schemas.Remove(@event.SchemaId.Id);
+ }
+
+ public void On(FieldAdded @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event, registry);
+ });
+ }
+
+ public void On(FieldUpdated @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event);
+ });
+ }
+
+ public void On(FieldLocked @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event);
+ });
+ }
+
+ public void On(FieldDisabled @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event);
+ });
+ }
+
+ public void On(FieldEnabled @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event);
+ });
+ }
+
+ public void On(FieldHidden @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event);
+ });
+ }
+
+ public void On(FieldShown @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event);
+ });
+ }
+
+ public void On(FieldDeleted @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers, s =>
+ {
+ s.SchemaDef = s.SchemaDef.Apply(@event);
+ });
+ }
+
+ public void On(WebhookAdded @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers);
+ }
+
+ public void On(WebhookDeleted @event, EnvelopeHeaders headers)
+ {
+ UpdateSchema(@event, headers);
+ }
+
+ private void UpdateSchema(SchemaEvent @event, EnvelopeHeaders headers, Action updater = null)
+ {
+ Schemas[@event.SchemaId.Id].Clone().Update(@event, headers, updater);
+ }
+ }
+}
diff --git a/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/JsonAppEntity.cs b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/JsonAppEntity.cs
index 2d2ce4ec6..b8c3bf33e 100644
--- a/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/JsonAppEntity.cs
+++ b/src/Squidex.Domain.Apps.Read/State/Orleans/Grains/Implementations/JsonAppEntity.cs
@@ -29,10 +29,10 @@ namespace Squidex.Domain.Apps.Read.State.Orleans.Grains.Implementations
public string PlanOwner { get; set; }
[JsonProperty]
- public AppClients Clients { get; set; }
+ public AppClients Clients { get; set; } = AppClients.Empty;
[JsonProperty]
- public AppContributors Contributors { get; set; }
+ public AppContributors Contributors { get; set; } = AppContributors.Empty;
[JsonProperty]
public LanguagesConfig LanguagesConfig { get; set; }
diff --git a/src/Squidex.Domain.Apps.Write/Apps/AppDomainObject.cs b/src/Squidex.Domain.Apps.Write/Apps/AppDomainObject.cs
index d891c619a..ce675b1e6 100644
--- a/src/Squidex.Domain.Apps.Write/Apps/AppDomainObject.cs
+++ b/src/Squidex.Domain.Apps.Write/Apps/AppDomainObject.cs
@@ -22,10 +22,9 @@ namespace Squidex.Domain.Apps.Write.Apps
{
public class AppDomainObject : DomainObjectBase
{
- private static readonly Language DefaultLanguage = Language.EN;
- private readonly AppContributors contributors = new AppContributors();
- private readonly AppClients clients = new AppClients();
- private readonly LanguagesConfig languagesConfig = LanguagesConfig.Build(DefaultLanguage);
+ private AppContributors contributors = AppContributors.Empty;
+ private AppClients clients = AppClients.Empty;
+ private LanguagesConfig languagesConfig = LanguagesConfig.English;
private AppPlan plan;
private string name;
@@ -66,47 +65,47 @@ namespace Squidex.Domain.Apps.Write.Apps
protected void On(AppContributorAssigned @event)
{
- contributors.Apply(@event);
+ contributors = contributors.Apply(@event);
}
protected void On(AppContributorRemoved @event)
{
- contributors.Apply(@event);
+ contributors = contributors.Apply(@event);
}
protected void On(AppClientAttached @event)
{
- clients.Apply(@event);
+ clients = clients.Apply(@event);
}
protected void On(AppClientUpdated @event)
{
- clients.Apply(@event);
+ clients = clients.Apply(@event);
}
protected void On(AppClientRenamed @event)
{
- clients.Apply(@event);
+ clients = clients.Apply(@event);
}
protected void On(AppClientRevoked @event)
{
- clients.Apply(@event);
+ clients = clients.Apply(@event);
}
protected void On(AppLanguageAdded @event)
{
- languagesConfig.Apply(@event);
+ languagesConfig = languagesConfig.Apply(@event);
}
protected void On(AppLanguageRemoved @event)
{
- languagesConfig.Apply(@event);
+ languagesConfig = languagesConfig.Apply(@event);
}
protected void On(AppLanguageUpdated @event)
{
- languagesConfig.Apply(@event);
+ languagesConfig = languagesConfig.Apply(@event);
}
protected void On(AppPlanChanged @event)
@@ -234,7 +233,7 @@ namespace Squidex.Domain.Apps.Write.Apps
private static AppLanguageAdded CreateInitialLanguage(NamedId id)
{
- return new AppLanguageAdded { AppId = id, Language = DefaultLanguage };
+ return new AppLanguageAdded { AppId = id, Language = Language.EN };
}
private static AppContributorAssigned CreateInitialOwner(NamedId id, SquidexCommand command)
diff --git a/src/Squidex.Domain.Apps.Write/Rules/RuleDomainObject.cs b/src/Squidex.Domain.Apps.Write/Rules/RuleDomainObject.cs
index ccf2e4a57..edf8c63d2 100644
--- a/src/Squidex.Domain.Apps.Write/Rules/RuleDomainObject.cs
+++ b/src/Squidex.Domain.Apps.Write/Rules/RuleDomainObject.cs
@@ -41,17 +41,17 @@ namespace Squidex.Domain.Apps.Write.Rules
protected void On(RuleUpdated @event)
{
- rule.Apply(@event);
+ rule = rule.Apply(@event);
}
protected void On(RuleEnabled @event)
{
- rule.Apply(@event);
+ rule = rule.Apply(@event);
}
protected void On(RuleDisabled @event)
{
- rule.Apply(@event);
+ rule = rule.Apply(@event);
}
protected void On(RuleDeleted @event)
diff --git a/src/Squidex.Domain.Apps.Write/Schemas/Guards/FieldPropertiesValidator.cs b/src/Squidex.Domain.Apps.Write/Schemas/Guards/FieldPropertiesValidator.cs
index 04b10fe84..a52793ab7 100644
--- a/src/Squidex.Domain.Apps.Write/Schemas/Guards/FieldPropertiesValidator.cs
+++ b/src/Squidex.Domain.Apps.Write/Schemas/Guards/FieldPropertiesValidator.cs
@@ -111,7 +111,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
nameof(properties.Editor));
}
- if ((properties.Editor == NumberFieldEditor.Radio || properties.Editor == NumberFieldEditor.Dropdown) && (properties.AllowedValues == null || properties.AllowedValues.Length == 0))
+ if ((properties.Editor == NumberFieldEditor.Radio || properties.Editor == NumberFieldEditor.Dropdown) && (properties.AllowedValues == null || properties.AllowedValues.Count == 0))
{
yield return new ValidationError("Radio buttons or dropdown list need allowed values.",
nameof(properties.AllowedValues));
@@ -136,7 +136,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
nameof(properties.MaxValue));
}
- if (properties.AllowedValues != null && properties.AllowedValues.Length > 0 && (properties.MinValue.HasValue || properties.MaxValue.HasValue))
+ if (properties.AllowedValues != null && properties.AllowedValues.Count > 0 && (properties.MinValue.HasValue || properties.MaxValue.HasValue))
{
yield return new ValidationError("Either allowed values or min and max value can be defined.",
nameof(properties.AllowedValues),
@@ -163,7 +163,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
nameof(properties.Editor));
}
- if ((properties.Editor == StringFieldEditor.Radio || properties.Editor == StringFieldEditor.Dropdown) && (properties.AllowedValues == null || properties.AllowedValues.Length == 0))
+ if ((properties.Editor == StringFieldEditor.Radio || properties.Editor == StringFieldEditor.Dropdown) && (properties.AllowedValues == null || properties.AllowedValues.Count == 0))
{
yield return new ValidationError("Radio buttons or dropdown list need allowed values.",
nameof(properties.AllowedValues));
@@ -182,7 +182,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
nameof(properties.MaxLength));
}
- if (properties.AllowedValues != null && properties.AllowedValues.Length > 0 && (properties.MinLength.HasValue || properties.MaxLength.HasValue))
+ if (properties.AllowedValues != null && properties.AllowedValues.Count > 0 && (properties.MinLength.HasValue || properties.MaxLength.HasValue))
{
yield return new ValidationError("Either allowed values or min and max length can be defined.",
nameof(properties.AllowedValues),
diff --git a/src/Squidex.Domain.Apps.Write/Schemas/SchemaDomainObject.cs b/src/Squidex.Domain.Apps.Write/Schemas/SchemaDomainObject.cs
index 877261b8a..bd7840709 100644
--- a/src/Squidex.Domain.Apps.Write/Schemas/SchemaDomainObject.cs
+++ b/src/Squidex.Domain.Apps.Write/Schemas/SchemaDomainObject.cs
@@ -56,62 +56,62 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
totalFields++;
- schema.Apply(@event, registry);
+ schema = schema.Apply(@event, registry);
}
protected void On(FieldUpdated @event)
{
- schema.Apply(@event);
+ schema = schema.Apply(@event);
}
protected void On(FieldLocked @event)
{
- schema.Apply(@event);
+ schema = schema.Apply(@event);
}
protected void On(FieldHidden @event)
{
- schema.Apply(@event);
+ schema = schema.Apply(@event);
}
protected void On(FieldShown @event)
{
- schema.Apply(@event);
+ schema = schema.Apply(@event);
}
protected void On(FieldDisabled @event)
{
- schema.Apply(@event);
+ schema = schema.Apply(@event);
}
protected void On(FieldEnabled @event)
{
- schema.Apply(@event);
+ schema = schema.Apply(@event);
}
protected void On(SchemaUpdated @event)
{
- schema.Apply(@event);
+ schema = schema.Apply(@event);
}
protected void On(FieldDeleted @event)
{
- schema.Apply(@event);
+ schema = schema.Apply(@event);
}
protected void On(SchemaFieldsReordered @event)
{
- schema.Apply(@event);
+ schema = schema.Apply(@event);
}
protected void On(SchemaPublished @event)
{
- schema.Apply(@event);
+ schema = schema.Apply(@event);
}
protected void On(SchemaUnpublished @event)
{
- schema.Apply(@event);
+ schema = schema.Apply(@event);
}
protected void On(SchemaDeleted @event)
diff --git a/src/Squidex/Controllers/Api/Rules/Models/Converters/RuleConverter.cs b/src/Squidex/Controllers/Api/Rules/Models/Converters/RuleConverter.cs
index 339fabf2c..0bac173f5 100644
--- a/src/Squidex/Controllers/Api/Rules/Models/Converters/RuleConverter.cs
+++ b/src/Squidex/Controllers/Api/Rules/Models/Converters/RuleConverter.cs
@@ -20,16 +20,16 @@ namespace Squidex.Controllers.Api.Rules.Models.Converters
var dto = new RuleDto();
SimpleMapper.Map(entity, dto);
- SimpleMapper.Map(entity.Rule, dto);
+ SimpleMapper.Map(entity.RuleDef, dto);
- if (entity.Rule.Trigger != null)
+ if (entity.RuleDef.Trigger != null)
{
- dto.Trigger = RuleTriggerDtoFactory.Create(entity.Rule.Trigger);
+ dto.Trigger = RuleTriggerDtoFactory.Create(entity.RuleDef.Trigger);
}
- if (entity.Rule.Action != null)
+ if (entity.RuleDef.Action != null)
{
- dto.Action = RuleActionDtoFactory.Create(entity.Rule.Action);
+ dto.Action = RuleActionDtoFactory.Create(entity.RuleDef.Action);
}
return dto;
diff --git a/src/Squidex/Controllers/Api/Rules/Models/Triggers/ContentChangedTriggerDto.cs b/src/Squidex/Controllers/Api/Rules/Models/Triggers/ContentChangedTriggerDto.cs
index 05af3cf26..76c203f06 100644
--- a/src/Squidex/Controllers/Api/Rules/Models/Triggers/ContentChangedTriggerDto.cs
+++ b/src/Squidex/Controllers/Api/Rules/Models/Triggers/ContentChangedTriggerDto.cs
@@ -7,6 +7,7 @@
// ==========================================================================
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using NJsonSchema.Annotations;
@@ -29,7 +30,7 @@ namespace Squidex.Controllers.Api.Rules.Models.Triggers
{
return new ContentChangedTrigger
{
- Schemas = Schemas.Select(x => SimpleMapper.Map(x, new ContentChangedTriggerSchema())).ToList()
+ Schemas = Schemas.Select(x => SimpleMapper.Map(x, new ContentChangedTriggerSchema())).ToImmutableList()
};
}
}
diff --git a/src/Squidex/Controllers/Api/Schemas/Models/Fields/NumberFieldPropertiesDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/Fields/NumberFieldPropertiesDto.cs
index ff5b8fc14..fbc3d072a 100644
--- a/src/Squidex/Controllers/Api/Schemas/Models/Fields/NumberFieldPropertiesDto.cs
+++ b/src/Squidex/Controllers/Api/Schemas/Models/Fields/NumberFieldPropertiesDto.cs
@@ -6,6 +6,7 @@
// All rights reserved.
// ==========================================================================
+using System.Collections.Immutable;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using NJsonSchema.Annotations;
@@ -47,6 +48,11 @@ namespace Squidex.Controllers.Api.Schemas.Models.Fields
{
var result = SimpleMapper.Map(this, new NumberFieldProperties());
+ if (AllowedValues != null)
+ {
+ result.AllowedValues = ImmutableList.Create(AllowedValues);
+ }
+
return result;
}
}
diff --git a/src/Squidex/Controllers/Api/Schemas/Models/Fields/StringFieldPropertiesDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/Fields/StringFieldPropertiesDto.cs
index ebf41e4e7..07015881d 100644
--- a/src/Squidex/Controllers/Api/Schemas/Models/Fields/StringFieldPropertiesDto.cs
+++ b/src/Squidex/Controllers/Api/Schemas/Models/Fields/StringFieldPropertiesDto.cs
@@ -6,6 +6,7 @@
// All rights reserved.
// ==========================================================================
+using System.Collections.Immutable;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using NJsonSchema.Annotations;
@@ -57,6 +58,11 @@ namespace Squidex.Controllers.Api.Schemas.Models.Fields
{
var result = SimpleMapper.Map(this, new StringFieldProperties());
+ if (AllowedValues != null)
+ {
+ result.AllowedValues = ImmutableList.Create(AllowedValues);
+ }
+
return result;
}
}
diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppClientJsonTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppClientJsonTests.cs
new file mode 100644
index 000000000..a45cf3bd8
--- /dev/null
+++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppClientJsonTests.cs
@@ -0,0 +1,43 @@
+// ==========================================================================
+// AppClientJsonTests.cs
+// Squidex Headless CMS
+// ==========================================================================
+// Copyright (c) Squidex Group
+// All rights reserved.
+// ==========================================================================
+
+using FluentAssertions;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Squidex.Domain.Apps.Core.Apps;
+using Xunit;
+
+namespace Squidex.Domain.Apps.Core.Model.Apps
+{
+ public class AppClientJsonTests
+ {
+ private readonly JsonSerializer serializer = TestData.DefaultSerializer();
+
+ [Fact]
+ public void Should_serialize_and_deserialize()
+ {
+ var clients = AppClients.Empty;
+
+ clients = clients.Add("1", "my-secret");
+ clients = clients.Add("2", "my-secret");
+ clients = clients.Add("3", "my-secret");
+ clients = clients.Add("4", "my-secret");
+
+ clients = clients.Update("3", AppClientPermission.Editor);
+
+ clients = clients.Rename("3", "My Client 3");
+ clients = clients.Rename("2", "My Client 2");
+
+ clients = clients.Revoke("4");
+
+ var appClients = JToken.FromObject(clients, serializer).ToObject(serializer);
+
+ appClients.ShouldBeEquivalentTo(clients);
+ }
+ }
+}
diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppClientsTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppClientsTests.cs
index 99a38afec..b6bf3d679 100644
--- a/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppClientsTests.cs
+++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppClientsTests.cs
@@ -8,96 +8,87 @@
using System;
using FluentAssertions;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
using Squidex.Domain.Apps.Core.Apps;
using Xunit;
+#pragma warning disable SA1310 // Field names must not contain underscore
+
namespace Squidex.Domain.Apps.Core.Model.Apps
{
public class AppClientsTests
{
- private readonly JsonSerializer serializer = TestData.DefaultSerializer();
- private readonly AppClients sut = new AppClients();
-
- public AppClientsTests()
- {
- sut.Add("1", "my-secret");
- }
+ private readonly AppClients clients_0 = AppClients.Empty.Add("1", "my-secret");
[Fact]
public void Should_assign_client()
{
- sut.Add("2", "my-secret");
+ var clients_1 = clients_0.Add("2", "my-secret");
- sut["2"].ShouldBeEquivalentTo(new AppClient("2", "my-secret", AppClientPermission.Editor));
+ clients_1["2"].ShouldBeEquivalentTo(new AppClient("2", "my-secret", AppClientPermission.Editor));
}
[Fact]
- public void Should_assign_client_with_permission()
+ public void Should_assign_clients_with_permission()
{
- sut.Add("2", new AppClient("my-name", "my-secret", AppClientPermission.Reader));
+ var clients_1 = clients_0.Add("2", new AppClient("my-name", "my-secret", AppClientPermission.Reader));
- sut["2"].ShouldBeEquivalentTo(new AppClient("my-name", "my-secret", AppClientPermission.Reader));
+ clients_1["2"].ShouldBeEquivalentTo(new AppClient("my-name", "my-secret", AppClientPermission.Reader));
}
[Fact]
- public void Should_throw_exception_if_assigning_client_with_same_id()
+ public void Should_throw_exception_if_assigning_clients_with_same_id()
{
- sut.Add("2", "my-secret");
+ var clients_1 = clients_0.Add("2", "my-secret");
- Assert.Throws(() => sut.Add("2", "my-secret"));
+ Assert.Throws(() => clients_1.Add("2", "my-secret"));
}
[Fact]
public void Should_rename_client()
{
- sut["1"].Rename("my-name");
+ var clients_1 = clients_0.Rename("1", "new-name");
- sut["1"].ShouldBeEquivalentTo(new AppClient("my-name", "my-secret", AppClientPermission.Editor));
+ clients_1["1"].ShouldBeEquivalentTo(new AppClient("new-name", "my-secret", AppClientPermission.Editor));
}
[Fact]
- public void Should_update_client()
+ public void Should_return_same_clients_if_client_to_rename_not_found()
{
- sut["1"].Update(AppClientPermission.Reader);
+ var clients_1 = clients_0.Rename("2", "new-name");
- sut["1"].ShouldBeEquivalentTo(new AppClient("1", "my-secret", AppClientPermission.Reader));
+ Assert.Same(clients_0, clients_1);
}
[Fact]
- public void Should_revoke_client()
+ public void Should_update_client()
{
- sut.Revoke("1");
+ var client_1 = clients_0.Update("1", AppClientPermission.Reader);
- Assert.Empty(sut);
+ client_1["1"].ShouldBeEquivalentTo(new AppClient("1", "my-secret", AppClientPermission.Reader));
}
[Fact]
- public void Should_do_nothing_if_client_to_revoke_not_found()
+ public void Should_return_same_clients_if_client_to_update_not_found()
{
- sut.Revoke("2");
+ var clients_1 = clients_0.Update("2", AppClientPermission.Reader);
- Assert.Single(sut);
+ Assert.Same(clients_0, clients_1);
}
[Fact]
- public void Should_serialize_and_deserialize()
+ public void Should_revoke_client()
{
- sut.Add("2", "my-secret");
- sut.Add("3", "my-secret");
- sut.Add("4", "my-secret");
-
- sut["3"].Update(AppClientPermission.Editor);
+ var clients_1 = clients_0.Revoke("1");
- sut["3"].Rename("My Client 3");
- sut["2"].Rename("My Client 2");
-
- sut.Revoke("4");
+ Assert.Empty(clients_1);
+ }
- var appClients = JToken.FromObject(sut, serializer).ToObject(serializer);
+ [Fact]
+ public void Should_do_nothing_if_client_to_revoke_not_found()
+ {
+ var clients_1 = clients_0.Revoke("2");
- appClients.ShouldBeEquivalentTo(sut);
+ Assert.NotSame(clients_0, clients_1);
}
}
}
diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppContributorsJsonTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppContributorsJsonTests.cs
new file mode 100644
index 000000000..e3c541de2
--- /dev/null
+++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppContributorsJsonTests.cs
@@ -0,0 +1,35 @@
+// ==========================================================================
+// AppContributorsJsonTests.cs
+// Squidex Headless CMS
+// ==========================================================================
+// Copyright (c) Squidex Group
+// All rights reserved.
+// ==========================================================================
+
+using FluentAssertions;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Squidex.Domain.Apps.Core.Apps;
+using Xunit;
+
+namespace Squidex.Domain.Apps.Core.Model.Apps
+{
+ public class AppContributorsJsonTests
+ {
+ private readonly JsonSerializer serializer = TestData.DefaultSerializer();
+
+ [Fact]
+ public void Should_serialize_and_deserialize()
+ {
+ var contributors = AppContributors.Empty;
+
+ contributors = contributors.Assign("1", AppContributorPermission.Developer);
+ contributors = contributors.Assign("2", AppContributorPermission.Editor);
+ contributors = contributors.Assign("3", AppContributorPermission.Owner);
+
+ var serialized = JToken.FromObject(contributors, serializer).ToObject(serializer);
+
+ serialized.ShouldBeEquivalentTo(contributors);
+ }
+ }
+}
diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppContributorsTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppContributorsTests.cs
index e56b792a9..636bde45f 100644
--- a/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppContributorsTests.cs
+++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppContributorsTests.cs
@@ -6,65 +6,51 @@
// All rights reserved.
// ==========================================================================
-using FluentAssertions;
-using Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
using Squidex.Domain.Apps.Core.Apps;
using Xunit;
+#pragma warning disable SA1310 // Field names must not contain underscore
+
namespace Squidex.Domain.Apps.Core.Model.Apps
{
public class AppContributorsTests
{
- private readonly JsonSerializer serializer = TestData.DefaultSerializer();
- private readonly AppContributors sut = new AppContributors();
+ private readonly AppContributors contributors_0 = AppContributors.Empty;
[Fact]
public void Should_assign_new_contributor()
{
- sut.Assign("1", AppContributorPermission.Developer);
- sut.Assign("2", AppContributorPermission.Editor);
+ var contributors_1 = contributors_0.Assign("1", AppContributorPermission.Developer);
+ var contributors_2 = contributors_1.Assign("2", AppContributorPermission.Editor);
- Assert.Equal(AppContributorPermission.Developer, sut["1"]);
- Assert.Equal(AppContributorPermission.Editor, sut["2"]);
+ Assert.Equal(AppContributorPermission.Developer, contributors_2["1"]);
+ Assert.Equal(AppContributorPermission.Editor, contributors_2["2"]);
}
[Fact]
public void Should_replace_contributor_if_already_exists()
{
- sut.Assign("1", AppContributorPermission.Developer);
- sut.Assign("1", AppContributorPermission.Owner);
+ var contributors_1 = contributors_0.Assign("1", AppContributorPermission.Developer);
+ var contributors_2 = contributors_1.Assign("1", AppContributorPermission.Owner);
- Assert.Equal(AppContributorPermission.Owner, sut["1"]);
+ Assert.Equal(AppContributorPermission.Owner, contributors_2["1"]);
}
[Fact]
public void Should_remove_contributor()
{
- sut.Assign("1", AppContributorPermission.Developer);
- sut.Remove("1");
+ var contributors_1 = contributors_0.Assign("1", AppContributorPermission.Developer);
+ var contributors_2 = contributors_1.Remove("1");
- Assert.Empty(sut);
+ Assert.Empty(contributors_2);
}
[Fact]
public void Should_do_nothing_if_contributor_to_remove_not_found()
{
- sut.Remove("2");
-
- Assert.Empty(sut);
- }
-
- [Fact]
- public void Should_serialize_and_deserialize()
- {
- sut.Assign("1", AppContributorPermission.Developer);
- sut.Assign("2", AppContributorPermission.Editor);
- sut.Assign("3", AppContributorPermission.Owner);
-
- var serialized = JToken.FromObject(sut, serializer).ToObject(serializer);
+ var contributors_1 = contributors_0.Remove("2");
- serialized.ShouldBeEquivalentTo(sut);
+ Assert.Empty(contributors_1);
}
}
}
diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigTests.cs
index cfb46ba91..c02c8abbf 100644
--- a/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigTests.cs
+++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/LanguagesConfigTests.cs
@@ -20,27 +20,27 @@ namespace Squidex.Domain.Apps.Core.Model.Apps
public class LanguagesConfigTests
{
[Fact]
- public void Should_create_initial_config()
+ public void Should_create_initial_config_0()
{
- var config = LanguagesConfig.Build(Language.DE);
+ var config_0 = LanguagesConfig.Build(Language.DE);
- config.OfType().ToList().ShouldBeEquivalentTo(
+ config_0.OfType().ToList().ShouldBeEquivalentTo(
new List
{
new LanguageConfig(Language.DE)
});
- Assert.Equal(Language.DE, config.Master.Language);
+ Assert.Equal(Language.DE, config_0.Master.Language);
- Assert.Equal("de", ((IFieldPartitioning)config).Master.Key);
+ Assert.Equal("de", ((IFieldPartitioning)config_0).Master.Key);
}
[Fact]
- public void Should_create_initial_config_with_multiple_languages()
+ public void Should_create_initial_config_0_with_multiple_languages()
{
- var config = LanguagesConfig.Build(Language.DE, Language.EN, Language.IT);
+ var config_0 = LanguagesConfig.Build(Language.DE, Language.EN, Language.IT);
- config.OfType().ToList().ShouldBeEquivalentTo(
+ config_0.OfType().ToList().ShouldBeEquivalentTo(
new List
{
new LanguageConfig(Language.DE),
@@ -48,12 +48,16 @@ namespace Squidex.Domain.Apps.Core.Model.Apps
new LanguageConfig(Language.IT)
});
- Assert.Equal(Language.DE, config.Master.Language);
- Assert.Equal(3, config.Count);
+ config_0.TryGetConfig(Language.DE, out var master);
+
+ Assert.Equal(Language.DE, config_0.Master.Language);
+ Assert.Equal(3, config_0.Count);
+
+ Assert.Same(master, config_0.Master);
}
[Fact]
- public void Should_create_initial_config_with_configs()
+ public void Should_create_initial_config_0_with_config_0s()
{
var configs = new[]
{
@@ -61,83 +65,82 @@ namespace Squidex.Domain.Apps.Core.Model.Apps
new LanguageConfig(Language.EN),
new LanguageConfig(Language.IT)
};
- var config = LanguagesConfig.Build(configs);
+ var config_0 = LanguagesConfig.Build(configs);
- config.OfType().ToList().ShouldBeEquivalentTo(configs);
+ config_0.OfType().ToList().ShouldBeEquivalentTo(configs);
- Assert.Equal(configs[0], config.Master);
+ Assert.Equal(configs[0], config_0.Master);
+ Assert.Same(configs[0], config_0.Master);
}
[Fact]
public void Should_add_language()
{
- var config = LanguagesConfig.Build(Language.DE);
-
- config.Set(new LanguageConfig(Language.IT));
+ var config_0 = LanguagesConfig.Build(Language.DE);
+ var config_1 = config_0.Set(new LanguageConfig(Language.IT));
- config.OfType().ToList().ShouldBeEquivalentTo(
+ config_1.OfType().ToList().ShouldBeEquivalentTo(
new List
{
new LanguageConfig(Language.DE),
new LanguageConfig(Language.IT)
});
- Assert.True(config.TryGetConfig(Language.IT, out var _));
- Assert.True(config.Contains(Language.IT));
+ Assert.True(config_1.TryGetConfig(Language.IT, out var _));
+ Assert.True(config_1.Contains(Language.IT));
}
[Fact]
public void Should_make_first_language_to_master()
{
- var config = LanguagesConfig.Build(Language.IT);
+ var config_0 = LanguagesConfig.Build(Language.IT);
- Assert.Equal(Language.IT, config.Master.Language);
+ Assert.Equal(Language.IT, config_0.Master.Language);
}
[Fact]
public void Should_not_throw_exception_if_language_to_add_already_exists()
{
- var config = LanguagesConfig.Build(Language.DE);
+ var config_0 = LanguagesConfig.Build(Language.DE);
- config.Set(new LanguageConfig(Language.DE));
+ config_0.Set(new LanguageConfig(Language.DE));
}
[Fact]
public void Should_make_master_language()
{
- var config = LanguagesConfig.Build(Language.DE);
+ var config_0 = LanguagesConfig.Build(Language.DE);
- config.Set(new LanguageConfig(Language.UK));
- config.Set(new LanguageConfig(Language.IT));
- config.MakeMaster(Language.IT);
+ var config_1 = config_0.Set(new LanguageConfig(Language.UK));
+ var config_2 = config_1.Set(new LanguageConfig(Language.IT));
+ var config_3 = config_2.MakeMaster(Language.IT);
- Assert.Equal(Language.IT, config.Master.Language);
+ Assert.Equal(Language.IT, config_3.Master.Language);
}
[Fact]
public void Should_throw_exception_if_language_to_make_master_is_not_found()
{
- var config = LanguagesConfig.Build(Language.DE);
+ var config_0 = LanguagesConfig.Build(Language.DE);
- Assert.Throws(() => config.MakeMaster(Language.EN));
+ Assert.Throws(() => config_0.MakeMaster(Language.EN));
}
[Fact]
public void Should_not_throw_exception_if_language_is_already_master_language()
{
- var config = LanguagesConfig.Build(Language.DE);
+ var config_0 = LanguagesConfig.Build(Language.DE);
- config.MakeMaster(Language.DE);
+ config_0.MakeMaster(Language.DE);
}
[Fact]
public void Should_remove_language()
{
- var config = LanguagesConfig.Build(Language.DE, Language.IT, Language.RU);
+ var config_0 = LanguagesConfig.Build(Language.DE, Language.IT, Language.RU);
+ var config_1 = config_0.Remove(Language.IT);
- config.Remove(Language.IT);
-
- config.ToList().ShouldBeEquivalentTo(
+ config_1.ToList().ShouldBeEquivalentTo(
new List
{
new LanguageConfig(Language.DE),
@@ -148,15 +151,14 @@ namespace Squidex.Domain.Apps.Core.Model.Apps
[Fact]
public void Should_remove_fallbacks_when_removing_language()
{
- var config =
+ var config_0 =
LanguagesConfig.Build(
new LanguageConfig(Language.DE),
new LanguageConfig(Language.IT, false, Language.RU, Language.IT),
new LanguageConfig(Language.RU, false, Language.DE, Language.IT));
+ var config_1 = config_0.Remove(Language.IT);
- config.Remove(Language.IT);
-
- config.OfType().ToList().ShouldBeEquivalentTo(
+ config_1.OfType().ToList().ShouldBeEquivalentTo(
new List
{
new LanguageConfig(Language.DE),
@@ -167,28 +169,27 @@ namespace Squidex.Domain.Apps.Core.Model.Apps
[Fact]
public void Should_not_throw_exception_if_language_to_remove_is_not_found()
{
- var config = LanguagesConfig.Build(Language.DE);
+ var config_0 = LanguagesConfig.Build(Language.DE);
- config.Remove(Language.EN);
+ config_0.Remove(Language.EN);
}
[Fact]
- public void Should_hrow_exception_if_language_to_remove_is_master()
+ public void Should_throw_exception_if_language_to_remove_is_master()
{
- var config = LanguagesConfig.Build(Language.DE);
+ var config_0 = LanguagesConfig.Build(Language.DE);
- Assert.Throws(() => config.Remove(Language.DE));
+ Assert.Throws(() => config_0.Remove(Language.DE));
}
[Fact]
public void Should_update_language()
{
- var config = LanguagesConfig.Build(Language.DE);
-
- config.Set(new LanguageConfig(Language.IT));
- config.Set(new LanguageConfig(Language.IT, true, Language.DE));
+ var config_0 = LanguagesConfig.Build(Language.DE);
+ var config_1 = config_0.Set(new LanguageConfig(Language.IT));
+ var config_2 = config_1.Set(new LanguageConfig(Language.IT, true, Language.DE));
- config.OfType().ToList().ShouldBeEquivalentTo(
+ config_2.OfType().ToList().ShouldBeEquivalentTo(
new List
{
new LanguageConfig(Language.DE),
@@ -199,20 +200,20 @@ namespace Squidex.Domain.Apps.Core.Model.Apps
[Fact]
public void Should_throw_exception_if_fallback_language_is_invalid()
{
- var config = LanguagesConfig.Build(Language.DE);
+ var config_0 = LanguagesConfig.Build(Language.DE);
- Assert.Throws(() => config.Set(new LanguageConfig(Language.DE, false, Language.EN)));
+ Assert.Throws(() => config_0.Set(new LanguageConfig(Language.DE, false, Language.EN)));
}
[Fact]
public void Should_provide_enumerators()
{
- var config = LanguagesConfig.Build(Language.DE);
+ var config_0 = LanguagesConfig.Build(Language.DE);
- Assert.NotEmpty(config);
+ Assert.NotEmpty(config_0);
- Assert.NotNull(((IEnumerable)config).GetEnumerator());
- Assert.NotNull(((IEnumerable)config).GetEnumerator());
+ Assert.NotNull(((IEnumerable)config_0).GetEnumerator());
+ Assert.NotNull(((IEnumerable)config_0).GetEnumerator());
}
}
}
diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Model/Rules/RuleTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Model/Rules/RuleTests.cs
index 1d83454fc..06622a63a 100644
--- a/tests/Squidex.Domain.Apps.Core.Tests/Model/Rules/RuleTests.cs
+++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Rules/RuleTests.cs
@@ -15,12 +15,14 @@ using Squidex.Domain.Apps.Core.Rules.Actions;
using Squidex.Domain.Apps.Core.Rules.Triggers;
using Xunit;
+#pragma warning disable SA1310 // Field names must not contain underscore
+
namespace Squidex.Domain.Apps.Core.Model.Rules
{
public class RuleTests
{
private readonly JsonSerializer serializer = TestData.DefaultSerializer();
- private readonly Rule sut = new Rule(new ContentChangedTrigger(), new WebhookAction());
+ private readonly Rule rule_0 = new Rule(new ContentChangedTrigger(), new WebhookAction());
public sealed class OtherTrigger : RuleTrigger
{
@@ -54,18 +56,22 @@ namespace Squidex.Domain.Apps.Core.Model.Rules
[Fact]
public void Should_set_enabled_to_true_when_enabling()
{
- sut.Enable();
+ var rule_1 = rule_0.Disable();
+ var rule_2 = rule_1.Enable();
+ var rule_3 = rule_2.Enable();
- Assert.True(sut.IsEnabled);
+ Assert.False(rule_1.IsEnabled);
+ Assert.True(rule_3.IsEnabled);
}
[Fact]
public void Should_set_enabled_to_false_when_disabling()
{
- sut.Enable();
- sut.Disable();
+ var rule_1 = rule_0.Disable();
+ var rule_2 = rule_1.Disable();
- Assert.False(sut.IsEnabled);
+ Assert.True(rule_0.IsEnabled);
+ Assert.False(rule_2.IsEnabled);
}
[Fact]
@@ -73,15 +79,16 @@ namespace Squidex.Domain.Apps.Core.Model.Rules
{
var newTrigger = new ContentChangedTrigger();
- sut.Update(newTrigger);
+ var rule_1 = rule_0.Update(newTrigger);
- Assert.Same(newTrigger, sut.Trigger);
+ Assert.NotSame(newTrigger, rule_0.Trigger);
+ Assert.Same(newTrigger, rule_1.Trigger);
}
[Fact]
public void Should_throw_exception_when_new_trigger_has_other_type()
{
- Assert.Throws(() => sut.Update(new OtherTrigger()));
+ Assert.Throws(() => rule_0.Update(new OtherTrigger()));
}
[Fact]
@@ -89,25 +96,38 @@ namespace Squidex.Domain.Apps.Core.Model.Rules
{
var newAction = new WebhookAction();
- sut.Update(newAction);
+ var rule_1 = rule_0.Update(newAction);
- Assert.Same(newAction, sut.Action);
+ Assert.NotSame(newAction, rule_0.Action);
+ Assert.Same(newAction, rule_1.Action);
}
[Fact]
public void Should_throw_exception_when_new_action_has_other_type()
{
- Assert.Throws(() => sut.Update(new OtherAction()));
+ Assert.Throws(() => rule_0.Update(new OtherAction()));
}
[Fact]
public void Should_serialize_and_deserialize()
{
- sut.Disable();
+ var rule_1 = rule_0.Disable();
+
+ var appClients = JToken.FromObject(rule_1, serializer).ToObject(serializer);
- var appClients = JToken.FromObject(sut, serializer).ToObject(serializer);
+ appClients.ShouldBeEquivalentTo(rule_0);
+ }
- appClients.ShouldBeEquivalentTo(sut);
+ [Fact]
+ public void Should_freeze_webhook_action()
+ {
+ TestData.TestFreeze(new WebhookAction());
+ }
+
+ [Fact]
+ public void Should_freeze_contentchanged_trigger()
+ {
+ TestData.TestFreeze(new ContentChangedTrigger());
}
}
}
diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/Triggers/ContentChangedTriggerTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/Triggers/ContentChangedTriggerTests.cs
index db51764cb..b4c329856 100644
--- a/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/Triggers/ContentChangedTriggerTests.cs
+++ b/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/Triggers/ContentChangedTriggerTests.cs
@@ -8,6 +8,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Core.HandleRules;
using Squidex.Domain.Apps.Core.HandleRules.Triggers;
@@ -67,8 +68,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules.Triggers
{
var trigger = new ContentChangedTrigger
{
- Schemas = new List
- {
+ Schemas = ImmutableList.Create(
new ContentChangedTriggerSchema
{
SendCreate = sendCreate == 1,
@@ -76,8 +76,7 @@ namespace Squidex.Domain.Apps.Core.Operations.HandleRules.Triggers
SendDelete = sendDelete == 1,
SendPublish = sendPublish == 1,
SchemaId = SchemaMatch.Id
- }
- }
+ })
};
var result = sut.Triggers(new Envelope(@event), trigger);
diff --git a/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs b/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs
index 8ad5cba79..f0fba1b7d 100644
--- a/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs
+++ b/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs
@@ -38,7 +38,7 @@ namespace Squidex.Domain.Apps.Read.Contents
private static readonly Guid schemaId = Guid.NewGuid();
private static readonly Guid appId = Guid.NewGuid();
private static readonly string appName = "my-app";
- private readonly Schema schemaDef = new Schema("my-schema");
+ private readonly Schema schemaDef;
private readonly IContentQueryService contentQuery = A.Fake();
private readonly IAssetRepository assetRepository = A.Fake();
private readonly ISchemaEntity schema = A.Fake();
@@ -50,32 +50,26 @@ namespace Squidex.Domain.Apps.Read.Contents
public GraphQLTests()
{
- schemaDef.AddField(new JsonField(1, "my-json", Partitioning.Invariant,
- new JsonFieldProperties()));
-
- schemaDef.AddField(new StringField(2, "my-string", Partitioning.Language,
- new StringFieldProperties()));
-
- schemaDef.AddField(new NumberField(3, "my-number", Partitioning.Invariant,
- new NumberFieldProperties()));
-
- schemaDef.AddField(new AssetsField(4, "my-assets", Partitioning.Invariant,
- new AssetsFieldProperties()));
-
- schemaDef.AddField(new BooleanField(5, "my-boolean", Partitioning.Invariant,
- new BooleanFieldProperties()));
-
- schemaDef.AddField(new DateTimeField(6, "my-datetime", Partitioning.Invariant,
- new DateTimeFieldProperties()));
-
- schemaDef.AddField(new ReferencesField(7, "my-references", Partitioning.Invariant,
- new ReferencesFieldProperties { SchemaId = schemaId }));
-
- schemaDef.AddField(new ReferencesField(9, "my-invalid", Partitioning.Invariant,
- new ReferencesFieldProperties { SchemaId = Guid.NewGuid() }));
-
- schemaDef.AddField(new GeolocationField(10, "my-geolocation", Partitioning.Invariant,
- new GeolocationFieldProperties()));
+ schemaDef =
+ new Schema("my-schema")
+ .AddField(new JsonField(1, "my-json", Partitioning.Invariant,
+ new JsonFieldProperties()))
+ .AddField(new StringField(2, "my-string", Partitioning.Language,
+ new StringFieldProperties()))
+ .AddField(new NumberField(3, "my-number", Partitioning.Invariant,
+ new NumberFieldProperties()))
+ .AddField(new AssetsField(4, "my-assets", Partitioning.Invariant,
+ new AssetsFieldProperties()))
+ .AddField(new BooleanField(5, "my-boolean", Partitioning.Invariant,
+ new BooleanFieldProperties()))
+ .AddField(new DateTimeField(6, "my-datetime", Partitioning.Invariant,
+ new DateTimeFieldProperties()))
+ .AddField(new ReferencesField(7, "my-references", Partitioning.Invariant,
+ new ReferencesFieldProperties { SchemaId = schemaId }))
+ .AddField(new ReferencesField(9, "my-invalid", Partitioning.Invariant,
+ new ReferencesFieldProperties { SchemaId = Guid.NewGuid() }))
+ .AddField(new GeolocationField(10, "my-geolocation", Partitioning.Invariant,
+ new GeolocationFieldProperties()));
A.CallTo(() => app.Id).Returns(appId);
A.CallTo(() => app.Name).Returns(appName);
diff --git a/tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs b/tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs
index f7ffe79eb..099b61d0f 100644
--- a/tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs
+++ b/tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs
@@ -7,6 +7,7 @@
// ==========================================================================
using System;
+using System.Collections.Immutable;
using FakeItEasy;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Options;
@@ -29,7 +30,7 @@ namespace Squidex.Domain.Apps.Read.Contents
{
public class ODataQueryTests
{
- private readonly Schema schemaDef = new Schema("user");
+ private readonly Schema schemaDef;
private readonly IBsonSerializerRegistry registry = BsonSerializer.SerializerRegistry;
private readonly IBsonSerializer serializer = BsonSerializer.SerializerRegistry.GetSerializer();
private readonly IEdmModel edmModel;
@@ -42,30 +43,25 @@ namespace Squidex.Domain.Apps.Read.Contents
public ODataQueryTests()
{
- schemaDef.Update(new SchemaProperties { Hints = "The User" });
-
- schemaDef.AddField(new StringField(1, "firstName", Partitioning.Language,
- new StringFieldProperties { Label = "FirstName", IsRequired = true, AllowedValues = new[] { "1", "2" } }));
- schemaDef.AddField(new StringField(2, "lastName", Partitioning.Language,
- new StringFieldProperties { Hints = "Last Name", Editor = StringFieldEditor.Input }));
-
- schemaDef.AddField(new BooleanField(3, "isAdmin", Partitioning.Invariant,
- new BooleanFieldProperties()));
-
- schemaDef.AddField(new NumberField(4, "age", Partitioning.Invariant,
- new NumberFieldProperties { MinValue = 1, MaxValue = 10 }));
-
- schemaDef.AddField(new DateTimeField(5, "birthday", Partitioning.Invariant,
- new DateTimeFieldProperties()));
-
- schemaDef.AddField(new AssetsField(6, "pictures", Partitioning.Invariant,
- new AssetsFieldProperties()));
-
- schemaDef.AddField(new ReferencesField(7, "friends", Partitioning.Invariant,
- new ReferencesFieldProperties()));
-
- schemaDef.AddField(new StringField(8, "dashed-field", Partitioning.Invariant,
- new StringFieldProperties()));
+ schemaDef =
+ new Schema("user")
+ .AddField(new StringField(1, "firstName", Partitioning.Language,
+ new StringFieldProperties { Label = "FirstName", IsRequired = true, AllowedValues = ImmutableList.Create("1", "2") }))
+ .AddField(new StringField(2, "lastName", Partitioning.Language,
+ new StringFieldProperties { Hints = "Last Name", Editor = StringFieldEditor.Input }))
+ .AddField(new BooleanField(3, "isAdmin", Partitioning.Invariant,
+ new BooleanFieldProperties()))
+ .AddField(new NumberField(4, "age", Partitioning.Invariant,
+ new NumberFieldProperties { MinValue = 1, MaxValue = 10 }))
+ .AddField(new DateTimeField(5, "birthday", Partitioning.Invariant,
+ new DateTimeFieldProperties()))
+ .AddField(new AssetsField(6, "pictures", Partitioning.Invariant,
+ new AssetsFieldProperties()))
+ .AddField(new ReferencesField(7, "friends", Partitioning.Invariant,
+ new ReferencesFieldProperties()))
+ .AddField(new StringField(8, "dashed-field", Partitioning.Invariant,
+ new StringFieldProperties()))
+ .Update(new SchemaProperties { Hints = "The User" });
var builder = new EdmModelBuilder(new MemoryCache(Options.Create(new MemoryCacheOptions())));
diff --git a/tests/Squidex.Domain.Apps.Read.Tests/Rules/RuleEnqueuerTests.cs b/tests/Squidex.Domain.Apps.Read.Tests/Rules/RuleEnqueuerTests.cs
index 6ad39dc41..0265529e2 100644
--- a/tests/Squidex.Domain.Apps.Read.Tests/Rules/RuleEnqueuerTests.cs
+++ b/tests/Squidex.Domain.Apps.Read.Tests/Rules/RuleEnqueuerTests.cs
@@ -74,9 +74,9 @@ namespace Squidex.Domain.Apps.Read.Rules
var ruleEntity2 = A.Fake();
var ruleEntity3 = A.Fake();
- A.CallTo(() => ruleEntity1.Rule).Returns(rule1);
- A.CallTo(() => ruleEntity2.Rule).Returns(rule2);
- A.CallTo(() => ruleEntity3.Rule).Returns(rule3);
+ A.CallTo(() => ruleEntity1.RuleDef).Returns(rule1);
+ A.CallTo(() => ruleEntity2.RuleDef).Returns(rule2);
+ A.CallTo(() => ruleEntity3.RuleDef).Returns(rule3);
A.CallTo(() => appProvider.GetRulesAsync(appId.Name))
.Returns(new List { ruleEntity1, ruleEntity2, ruleEntity3 });
diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppClientsTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppClientsTests.cs
index c10fc34d7..bae80d9dc 100644
--- a/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppClientsTests.cs
+++ b/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppClientsTests.cs
@@ -11,18 +11,20 @@ using Squidex.Domain.Apps.Write.Apps.Commands;
using Squidex.Infrastructure;
using Xunit;
+#pragma warning disable SA1310 // Field names must not contain underscore
+
namespace Squidex.Domain.Apps.Write.Apps.Guards
{
public class GuardAppClientsTests
{
- private readonly AppClients clients = new AppClients();
+ private readonly AppClients clients_0 = AppClients.Empty;
[Fact]
public void CanAttach_should_throw_execption_if_client_id_is_null()
{
var command = new AttachClient();
- Assert.Throws(() => GuardAppClients.CanAttach(clients, command));
+ Assert.Throws(() => GuardAppClients.CanAttach(clients_0, command));
}
[Fact]
@@ -30,9 +32,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new AttachClient { Id = "android" };
- clients.Add("android", "secret");
+ var clients_1 = clients_0.Add("android", "secret");
- Assert.Throws(() => GuardAppClients.CanAttach(clients, command));
+ Assert.Throws(() => GuardAppClients.CanAttach(clients_1, command));
}
[Fact]
@@ -40,9 +42,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new AttachClient { Id = "ios" };
- clients.Add("android", "secret");
+ var clients_1 = clients_0.Add("android", "secret");
- GuardAppClients.CanAttach(clients, command);
+ GuardAppClients.CanAttach(clients_1, command);
}
[Fact]
@@ -50,7 +52,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new RevokeClient();
- Assert.Throws(() => GuardAppClients.CanRevoke(clients, command));
+ Assert.Throws(() => GuardAppClients.CanRevoke(clients_0, command));
}
[Fact]
@@ -58,7 +60,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new RevokeClient { Id = "ios" };
- Assert.Throws(() => GuardAppClients.CanRevoke(clients, command));
+ Assert.Throws(() => GuardAppClients.CanRevoke(clients_0, command));
}
[Fact]
@@ -66,9 +68,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new RevokeClient { Id = "ios" };
- clients.Add("ios", "secret");
+ var clients_1 = clients_0.Add("ios", "secret");
- GuardAppClients.CanRevoke(clients, command);
+ GuardAppClients.CanRevoke(clients_1, command);
}
[Fact]
@@ -76,7 +78,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateClient();
- Assert.Throws(() => GuardAppClients.CanUpdate(clients, command));
+ Assert.Throws(() => GuardAppClients.CanUpdate(clients_0, command));
}
[Fact]
@@ -84,7 +86,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateClient { Id = "ios", Name = "iOS" };
- Assert.Throws(() => GuardAppClients.CanUpdate(clients, command));
+ Assert.Throws(() => GuardAppClients.CanUpdate(clients_0, command));
}
[Fact]
@@ -92,9 +94,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateClient { Id = "ios" };
- clients.Add("ios", "secret");
+ var clients_1 = clients_0.Add("ios", "secret");
- Assert.Throws(() => GuardAppClients.CanUpdate(clients, command));
+ Assert.Throws(() => GuardAppClients.CanUpdate(clients_1, command));
}
[Fact]
@@ -102,9 +104,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateClient { Id = "ios", Permission = (AppClientPermission)10 };
- clients.Add("ios", "secret");
+ var clients_1 = clients_0.Add("ios", "secret");
- Assert.Throws(() => GuardAppClients.CanUpdate(clients, command));
+ Assert.Throws(() => GuardAppClients.CanUpdate(clients_1, command));
}
[Fact]
@@ -112,9 +114,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateClient { Id = "ios", Name = "ios" };
- clients.Add("ios", "secret");
+ var clients_1 = clients_0.Add("ios", "secret");
- Assert.Throws(() => GuardAppClients.CanUpdate(clients, command));
+ Assert.Throws(() => GuardAppClients.CanUpdate(clients_1, command));
}
[Fact]
@@ -122,9 +124,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateClient { Id = "ios", Permission = AppClientPermission.Editor };
- clients.Add("ios", "secret");
+ var clients_1 = clients_0.Add("ios", "secret");
- Assert.Throws(() => GuardAppClients.CanUpdate(clients, command));
+ Assert.Throws(() => GuardAppClients.CanUpdate(clients_1, command));
}
[Fact]
@@ -132,9 +134,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateClient { Id = "ios", Name = "iOS", Permission = AppClientPermission.Reader };
- clients.Add("ios", "secret");
+ var clients_1 = clients_0.Add("ios", "secret");
- GuardAppClients.CanUpdate(clients, command);
+ GuardAppClients.CanUpdate(clients_1, command);
}
}
}
diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppContributorsTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppContributorsTests.cs
index fc59e17a5..7942dcd96 100644
--- a/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppContributorsTests.cs
+++ b/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppContributorsTests.cs
@@ -15,13 +15,15 @@ using Squidex.Infrastructure;
using Squidex.Shared.Users;
using Xunit;
+#pragma warning disable SA1310 // Field names must not contain underscore
+
namespace Squidex.Domain.Apps.Write.Apps.Guards
{
public class GuardAppContributorsTests
{
private readonly IUserResolver users = A.Fake();
private readonly IAppLimitsPlan appPlan = A.Fake();
- private readonly AppContributors contributors = new AppContributors();
+ private readonly AppContributors contributors_0 = AppContributors.Empty;
public GuardAppContributorsTests()
{
@@ -37,7 +39,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new AssignContributor();
- return Assert.ThrowsAsync(() => GuardAppContributors.CanAssign(contributors, command, users, appPlan));
+ return Assert.ThrowsAsync(() => GuardAppContributors.CanAssign(contributors_0, command, users, appPlan));
}
[Fact]
@@ -45,7 +47,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new AssignContributor { ContributorId = "1", Permission = (AppContributorPermission)10 };
- return Assert.ThrowsAsync(() => GuardAppContributors.CanAssign(contributors, command, users, appPlan));
+ return Assert.ThrowsAsync(() => GuardAppContributors.CanAssign(contributors_0, command, users, appPlan));
}
[Fact]
@@ -53,9 +55,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new AssignContributor { ContributorId = "1" };
- contributors.Assign("1", AppContributorPermission.Owner);
+ var contributors_1 = contributors_0.Assign("1", AppContributorPermission.Owner);
- return Assert.ThrowsAsync(() => GuardAppContributors.CanAssign(contributors, command, users, appPlan));
+ return Assert.ThrowsAsync(() => GuardAppContributors.CanAssign(contributors_1, command, users, appPlan));
}
[Fact]
@@ -66,7 +68,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
var command = new AssignContributor { ContributorId = "1", Permission = (AppContributorPermission)10 };
- return Assert.ThrowsAsync(() => GuardAppContributors.CanAssign(contributors, command, users, appPlan));
+ return Assert.ThrowsAsync(() => GuardAppContributors.CanAssign(contributors_0, command, users, appPlan));
}
[Fact]
@@ -77,10 +79,10 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
var command = new AssignContributor { ContributorId = "3" };
- contributors.Assign("1", AppContributorPermission.Owner);
- contributors.Assign("2", AppContributorPermission.Editor);
+ var contributors_1 = contributors_0.Assign("1", AppContributorPermission.Owner);
+ var contributors_2 = contributors_1.Assign("2", AppContributorPermission.Editor);
- return Assert.ThrowsAsync(() => GuardAppContributors.CanAssign(contributors, command, users, appPlan));
+ return Assert.ThrowsAsync(() => GuardAppContributors.CanAssign(contributors_2, command, users, appPlan));
}
[Fact]
@@ -88,7 +90,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new AssignContributor { ContributorId = "1" };
- return GuardAppContributors.CanAssign(contributors, command, users, appPlan);
+ return GuardAppContributors.CanAssign(contributors_0, command, users, appPlan);
}
[Fact]
@@ -96,9 +98,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new AssignContributor { ContributorId = "1" };
- contributors.Assign("1", AppContributorPermission.Editor);
+ var contributors_1 = contributors_0.Assign("1", AppContributorPermission.Editor);
- return GuardAppContributors.CanAssign(contributors, command, users, appPlan);
+ return GuardAppContributors.CanAssign(contributors_1, command, users, appPlan);
}
[Fact]
@@ -109,10 +111,10 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
var command = new AssignContributor { ContributorId = "1" };
- contributors.Assign("1", AppContributorPermission.Editor);
- contributors.Assign("2", AppContributorPermission.Editor);
+ var contributors_1 = contributors_0.Assign("1", AppContributorPermission.Editor);
+ var contributors_2 = contributors_1.Assign("2", AppContributorPermission.Editor);
- return GuardAppContributors.CanAssign(contributors, command, users, appPlan);
+ return GuardAppContributors.CanAssign(contributors_2, command, users, appPlan);
}
[Fact]
@@ -120,7 +122,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new RemoveContributor();
- Assert.Throws(() => GuardAppContributors.CanRemove(contributors, command));
+ Assert.Throws(() => GuardAppContributors.CanRemove(contributors_0, command));
}
[Fact]
@@ -128,7 +130,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new RemoveContributor { ContributorId = "1" };
- Assert.Throws(() => GuardAppContributors.CanRemove(contributors, command));
+ Assert.Throws(() => GuardAppContributors.CanRemove(contributors_0, command));
}
[Fact]
@@ -136,10 +138,10 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new RemoveContributor { ContributorId = "1" };
- contributors.Assign("1", AppContributorPermission.Owner);
- contributors.Assign("2", AppContributorPermission.Editor);
+ var contributors_1 = contributors_0.Assign("1", AppContributorPermission.Owner);
+ var contributors_2 = contributors_1.Assign("2", AppContributorPermission.Editor);
- Assert.Throws(() => GuardAppContributors.CanRemove(contributors, command));
+ Assert.Throws(() => GuardAppContributors.CanRemove(contributors_2, command));
}
[Fact]
@@ -147,10 +149,10 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new RemoveContributor { ContributorId = "1" };
- contributors.Assign("1", AppContributorPermission.Owner);
- contributors.Assign("2", AppContributorPermission.Owner);
+ var contributors_1 = contributors_0.Assign("1", AppContributorPermission.Owner);
+ var contributors_2 = contributors_1.Assign("2", AppContributorPermission.Owner);
- GuardAppContributors.CanRemove(contributors, command);
+ GuardAppContributors.CanRemove(contributors_2, command);
}
}
}
diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppLanguagesTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppLanguagesTests.cs
index 02e3ce614..ad4afb684 100644
--- a/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppLanguagesTests.cs
+++ b/tests/Squidex.Domain.Apps.Write.Tests/Apps/Guards/GuardAppLanguagesTests.cs
@@ -12,18 +12,20 @@ using Squidex.Domain.Apps.Write.Apps.Commands;
using Squidex.Infrastructure;
using Xunit;
+#pragma warning disable SA1310 // Field names must not contain underscore
+
namespace Squidex.Domain.Apps.Write.Apps.Guards
{
public class GuardAppLanguagesTests
{
- private readonly LanguagesConfig languages = LanguagesConfig.Build(Language.DE);
+ private readonly LanguagesConfig languages_0 = LanguagesConfig.Build(Language.DE);
[Fact]
public void CanAddLanguage_should_throw_exception_if_language_is_null()
{
var command = new AddLanguage();
- Assert.Throws(() => GuardAppLanguages.CanAdd(languages, command));
+ Assert.Throws(() => GuardAppLanguages.CanAdd(languages_0, command));
}
[Fact]
@@ -31,7 +33,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new AddLanguage { Language = Language.DE };
- Assert.Throws(() => GuardAppLanguages.CanAdd(languages, command));
+ Assert.Throws(() => GuardAppLanguages.CanAdd(languages_0, command));
}
[Fact]
@@ -39,7 +41,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new AddLanguage { Language = Language.EN };
- GuardAppLanguages.CanAdd(languages, command);
+ GuardAppLanguages.CanAdd(languages_0, command);
}
[Fact]
@@ -47,7 +49,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new RemoveLanguage();
- Assert.Throws(() => GuardAppLanguages.CanRemove(languages, command));
+ Assert.Throws(() => GuardAppLanguages.CanRemove(languages_0, command));
}
[Fact]
@@ -55,7 +57,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new RemoveLanguage { Language = Language.EN };
- Assert.Throws(() => GuardAppLanguages.CanRemove(languages, command));
+ Assert.Throws(() => GuardAppLanguages.CanRemove(languages_0, command));
}
[Fact]
@@ -63,7 +65,7 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new RemoveLanguage { Language = Language.DE };
- Assert.Throws(() => GuardAppLanguages.CanRemove(languages, command));
+ Assert.Throws(() => GuardAppLanguages.CanRemove(languages_0, command));
}
[Fact]
@@ -71,9 +73,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new RemoveLanguage { Language = Language.EN };
- languages.Set(new LanguageConfig(Language.EN));
+ var languages_1 = languages_0.Set(new LanguageConfig(Language.EN));
- GuardAppLanguages.CanRemove(languages, command);
+ GuardAppLanguages.CanRemove(languages_1, command);
}
[Fact]
@@ -81,9 +83,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateLanguage();
- languages.Set(new LanguageConfig(Language.EN));
+ var languages_1 = languages_0.Set(new LanguageConfig(Language.EN));
- Assert.Throws(() => GuardAppLanguages.CanUpdate(languages, command));
+ Assert.Throws(() => GuardAppLanguages.CanUpdate(languages_1, command));
}
[Fact]
@@ -91,9 +93,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateLanguage { Language = Language.DE, IsOptional = true };
- languages.Set(new LanguageConfig(Language.EN));
+ var languages_1 = languages_0.Set(new LanguageConfig(Language.EN));
- Assert.Throws(() => GuardAppLanguages.CanUpdate(languages, command));
+ Assert.Throws(() => GuardAppLanguages.CanUpdate(languages_1, command));
}
[Fact]
@@ -101,9 +103,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateLanguage { Language = Language.DE, Fallback = new List { Language.IT } };
- languages.Set(new LanguageConfig(Language.EN));
+ var languages_1 = languages_0.Set(new LanguageConfig(Language.EN));
- Assert.Throws(() => GuardAppLanguages.CanUpdate(languages, command));
+ Assert.Throws(() => GuardAppLanguages.CanUpdate(languages_1, command));
}
[Fact]
@@ -111,9 +113,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateLanguage { Language = Language.IT };
- languages.Set(new LanguageConfig(Language.EN));
+ var languages_1 = languages_0.Set(new LanguageConfig(Language.EN));
- Assert.Throws(() => GuardAppLanguages.CanUpdate(languages, command));
+ Assert.Throws(() => GuardAppLanguages.CanUpdate(languages_1, command));
}
[Fact]
@@ -121,9 +123,9 @@ namespace Squidex.Domain.Apps.Write.Apps.Guards
{
var command = new UpdateLanguage { Language = Language.DE, Fallback = new List { Language.EN } };
- languages.Set(new LanguageConfig(Language.EN));
+ var languages_1 = languages_0.Set(new LanguageConfig(Language.EN));
- GuardAppLanguages.CanUpdate(languages, command);
+ GuardAppLanguages.CanUpdate(languages_1, command);
}
}
}
diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentCommandMiddlewareTests.cs
index e43453fa1..dc6bd24ea 100644
--- a/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentCommandMiddlewareTests.cs
+++ b/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentCommandMiddlewareTests.cs
@@ -59,12 +59,12 @@ namespace Squidex.Domain.Apps.Write.Contents
public ContentCommandMiddlewareTests()
{
- var schemaDef = new Schema("my-schema");
-
- schemaDef.AddField(new NumberField(1, "my-field1", Partitioning.Invariant,
- new NumberFieldProperties { IsRequired = true }));
- schemaDef.AddField(new NumberField(2, "my-field2", Partitioning.Invariant,
- new NumberFieldProperties { IsRequired = false }));
+ var schemaDef =
+ new Schema("my-schema")
+ .AddField(new NumberField(1, "my-field1", Partitioning.Invariant,
+ new NumberFieldProperties { IsRequired = true }))
+ .AddField(new NumberField(2, "my-field2", Partitioning.Invariant,
+ new NumberFieldProperties { IsRequired = false }));
content = new ContentDomainObject(contentId, -1);
diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Rules/Guards/GuardRuleTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Rules/Guards/GuardRuleTests.cs
index b0bba9897..76975b496 100644
--- a/tests/Squidex.Domain.Apps.Write.Tests/Rules/Guards/GuardRuleTests.cs
+++ b/tests/Squidex.Domain.Apps.Write.Tests/Rules/Guards/GuardRuleTests.cs
@@ -7,7 +7,7 @@
// ==========================================================================
using System;
-using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Threading.Tasks;
using FakeItEasy;
using Squidex.Domain.Apps.Core.Rules;
@@ -19,12 +19,14 @@ using Squidex.Domain.Apps.Write.Rules.Commands;
using Squidex.Infrastructure;
using Xunit;
+#pragma warning disable SA1310 // Field names must not contain underscore
+
namespace Squidex.Domain.Apps.Write.Rules.Guards
{
public class GuardRuleTests
{
private readonly Uri validUrl = new Uri("https://squidex.io");
- private readonly Rule rule = new Rule(new ContentChangedTrigger(), new WebhookAction());
+ private readonly Rule rule_0 = new Rule(new ContentChangedTrigger(), new WebhookAction());
private readonly NamedId appId = new NamedId(Guid.NewGuid(), "my-app");
private readonly IAppProvider appProvider = A.Fake();
@@ -37,15 +39,14 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards
[Fact]
public async Task CanCreate_should_throw_exception_if_trigger_null()
{
- var command = new CreateRule
+ var command = CreateCommand(new CreateRule
{
Trigger = null,
Action = new WebhookAction
{
Url = validUrl
- },
- AppId = appId
- };
+ }
+ });
await Assert.ThrowsAsync(() => GuardRule.CanCreate(command, appProvider));
}
@@ -53,15 +54,14 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards
[Fact]
public async Task CanCreate_should_throw_exception_if_action_null()
{
- var command = new CreateRule
+ var command = CreateCommand(new CreateRule
{
Trigger = new ContentChangedTrigger
{
- Schemas = new List()
+ Schemas = ImmutableList.Empty
},
- Action = null,
- AppId = appId
- };
+ Action = null
+ });
await Assert.ThrowsAsync(() => GuardRule.CanCreate(command, appProvider));
}
@@ -69,18 +69,17 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards
[Fact]
public async Task CanCreate_should_not_throw_exception_if_trigger_and_action_valid()
{
- var command = new CreateRule
+ var command = CreateCommand(new CreateRule
{
Trigger = new ContentChangedTrigger
{
- Schemas = new List()
+ Schemas = ImmutableList.Empty
},
Action = new WebhookAction
{
Url = validUrl
- },
- AppId = appId
- };
+ }
+ });
await GuardRule.CanCreate(command, appProvider);
}
@@ -96,18 +95,17 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards
[Fact]
public async Task CanUpdate_should_not_throw_exception_if_trigger_and_action_valid()
{
- var command = new UpdateRule
+ var command = CreateCommand(new UpdateRule
{
Trigger = new ContentChangedTrigger
{
- Schemas = new List()
+ Schemas = ImmutableList.Empty
},
Action = new WebhookAction
{
Url = validUrl
- },
- AppId = appId
- };
+ }
+ });
await GuardRule.CanUpdate(command, appProvider);
}
@@ -117,9 +115,9 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards
{
var command = new EnableRule();
- rule.Enable();
+ var rule_1 = rule_0.Enable();
- Assert.Throws(() => GuardRule.CanEnable(command, rule));
+ Assert.Throws(() => GuardRule.CanEnable(command, rule_1));
}
[Fact]
@@ -127,9 +125,9 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards
{
var command = new EnableRule();
- rule.Disable();
+ var rule_1 = rule_0.Disable();
- GuardRule.CanEnable(command, rule);
+ GuardRule.CanEnable(command, rule_1);
}
[Fact]
@@ -137,9 +135,9 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards
{
var command = new DisableRule();
- rule.Disable();
+ var rule_1 = rule_0.Disable();
- Assert.Throws(() => GuardRule.CanDisable(command, rule));
+ Assert.Throws(() => GuardRule.CanDisable(command, rule_1));
}
[Fact]
@@ -147,9 +145,9 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards
{
var command = new DisableRule();
- rule.Enable();
+ var rule_1 = rule_0.Enable();
- GuardRule.CanDisable(command, rule);
+ GuardRule.CanDisable(command, rule_1);
}
[Fact]
@@ -159,5 +157,12 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards
GuardRule.CanDelete(command);
}
+
+ private T CreateCommand(T command) where T : AppCommand
+ {
+ command.AppId = appId;
+
+ return command;
+ }
}
}
diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Rules/Guards/Triggers/ContentChangedTriggerTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Rules/Guards/Triggers/ContentChangedTriggerTests.cs
index 73f9ab377..7e5546070 100644
--- a/tests/Squidex.Domain.Apps.Write.Tests/Rules/Guards/Triggers/ContentChangedTriggerTests.cs
+++ b/tests/Squidex.Domain.Apps.Write.Tests/Rules/Guards/Triggers/ContentChangedTriggerTests.cs
@@ -7,7 +7,7 @@
// ==========================================================================
using System;
-using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Threading.Tasks;
using FakeItEasy;
using Squidex.Domain.Apps.Core.Rules.Triggers;
@@ -30,10 +30,9 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards.Triggers
var trigger = new ContentChangedTrigger
{
- Schemas = new List
- {
+ Schemas = ImmutableList.Create(
new ContentChangedTriggerSchema()
- }
+ )
};
var errors = await RuleTriggerValidator.ValidateAsync(appName, trigger, appProvider);
@@ -56,7 +55,7 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards.Triggers
{
var trigger = new ContentChangedTrigger
{
- Schemas = new List()
+ Schemas = ImmutableList.Empty
};
var errors = await RuleTriggerValidator.ValidateAsync(appName, trigger, appProvider);
@@ -72,10 +71,9 @@ namespace Squidex.Domain.Apps.Write.Rules.Guards.Triggers
var trigger = new ContentChangedTrigger
{
- Schemas = new List
- {
+ Schemas = ImmutableList.Create(
new ContentChangedTriggerSchema()
- }
+ )
};
var errors = await RuleTriggerValidator.ValidateAsync(appName, trigger, appProvider);
diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Rules/RuleDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Rules/RuleDomainObjectTests.cs
index 2bc45e1b3..dc2cce7f5 100644
--- a/tests/Squidex.Domain.Apps.Write.Tests/Rules/RuleDomainObjectTests.cs
+++ b/tests/Squidex.Domain.Apps.Write.Tests/Rules/RuleDomainObjectTests.cs
@@ -8,6 +8,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using Squidex.Domain.Apps.Core.Rules;
using Squidex.Domain.Apps.Core.Rules.Actions;
using Squidex.Domain.Apps.Core.Rules.Triggers;
@@ -83,7 +84,7 @@ namespace Squidex.Domain.Apps.Write.Rules
{
var newTrigger = new ContentChangedTrigger
{
- Schemas = new List()
+ Schemas = ImmutableList.Empty
};
var newAction = new WebhookAction
diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/FieldProperties/NumberFieldPropertiesTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/FieldProperties/NumberFieldPropertiesTests.cs
index 9c5fa36ad..199261ba4 100644
--- a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/FieldProperties/NumberFieldPropertiesTests.cs
+++ b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/FieldProperties/NumberFieldPropertiesTests.cs
@@ -7,6 +7,7 @@
// ==========================================================================
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Linq;
using FluentAssertions;
using Squidex.Domain.Apps.Core.Schemas;
@@ -77,7 +78,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards.FieldProperties
[Fact]
public void Should_add_error_if_allowed_values_and_max_value_is_specified()
{
- var sut = new NumberFieldProperties { MaxValue = 10, AllowedValues = new[] { 4d } };
+ var sut = new NumberFieldProperties { MaxValue = 10, AllowedValues = ImmutableList.Create(4d) };
var errors = FieldPropertiesValidator.Validate(sut).ToList();
@@ -91,7 +92,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards.FieldProperties
[Fact]
public void Should_add_error_if_allowed_values_and_min_value_is_specified()
{
- var sut = new NumberFieldProperties { MinValue = 10, AllowedValues = new[] { 4d } };
+ var sut = new NumberFieldProperties { MinValue = 10, AllowedValues = ImmutableList.Create(4d) };
var errors = FieldPropertiesValidator.Validate(sut).ToList();
diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/FieldProperties/StringFieldPropertiesTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/FieldProperties/StringFieldPropertiesTests.cs
index 2b6ca22be..19c306680 100644
--- a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/FieldProperties/StringFieldPropertiesTests.cs
+++ b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/FieldProperties/StringFieldPropertiesTests.cs
@@ -7,6 +7,7 @@
// ==========================================================================
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Linq;
using FluentAssertions;
using Squidex.Domain.Apps.Core.Schemas;
@@ -34,7 +35,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards.FieldProperties
[Fact]
public void Should_add_error_if_allowed_values_and_max_value_is_specified()
{
- var sut = new StringFieldProperties { MinLength = 10, AllowedValues = new[] { "4" } };
+ var sut = new StringFieldProperties { MinLength = 10, AllowedValues = ImmutableList.Create("4") };
var errors = FieldPropertiesValidator.Validate(sut).ToList();
@@ -48,7 +49,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards.FieldProperties
[Fact]
public void Should_add_error_if_allowed_values_and_min_value_is_specified()
{
- var sut = new StringFieldProperties { MaxLength = 10, AllowedValues = new string[] { "4" } };
+ var sut = new StringFieldProperties { MaxLength = 10, AllowedValues = ImmutableList.Create("4") };
var errors = FieldPropertiesValidator.Validate(sut).ToList();
diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/GuardSchemaFieldTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/GuardSchemaFieldTests.cs
index 63bb7bdda..d144ffff9 100644
--- a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/GuardSchemaFieldTests.cs
+++ b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/GuardSchemaFieldTests.cs
@@ -13,18 +13,22 @@ using Squidex.Domain.Apps.Write.Schemas.Guards;
using Squidex.Infrastructure;
using Xunit;
+#pragma warning disable SA1310 // Field names must not contain underscore
+
namespace Squidex.Domain.Apps.Write.Schemas
{
public class GuardSchemaFieldTests
{
- private readonly Schema schema = new Schema("my-schema");
+ private readonly Schema schema_0;
private readonly StringFieldProperties validProperties = new StringFieldProperties();
private readonly StringFieldProperties invalidProperties = new StringFieldProperties { MinLength = 10, MaxLength = 5 };
public GuardSchemaFieldTests()
{
- schema.AddField(new StringField(1, "field1", Partitioning.Invariant));
- schema.AddField(new StringField(2, "field2", Partitioning.Invariant));
+ schema_0 =
+ new Schema("my-schema")
+ .AddField(new StringField(1, "field1", Partitioning.Invariant))
+ .AddField(new StringField(2, "field2", Partitioning.Invariant));
}
[Fact]
@@ -32,9 +36,9 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new HideField { FieldId = 1 };
- schema.FieldsById[1].Hide();
+ var schema_1 = schema_0.HideField(1);
- Assert.Throws(() => GuardSchemaField.CanHide(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanHide(schema_1, command));
}
[Fact]
@@ -42,7 +46,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new HideField { FieldId = 3 };
- Assert.Throws(() => GuardSchemaField.CanHide(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanHide(schema_0, command));
}
[Fact]
@@ -50,7 +54,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new HideField { FieldId = 1 };
- GuardSchemaField.CanHide(schema, command);
+ GuardSchemaField.CanHide(schema_0, command);
}
[Fact]
@@ -58,9 +62,9 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new DisableField { FieldId = 1 };
- schema.FieldsById[1].Disable();
+ var schema_1 = schema_0.DisableField(1);
- Assert.Throws(() => GuardSchemaField.CanDisable(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanDisable(schema_1, command));
}
[Fact]
@@ -68,7 +72,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new DisableField { FieldId = 3 };
- Assert.Throws(() => GuardSchemaField.CanDisable(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanDisable(schema_0, command));
}
[Fact]
@@ -76,7 +80,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new DisableField { FieldId = 1 };
- GuardSchemaField.CanDisable(schema, command);
+ GuardSchemaField.CanDisable(schema_0, command);
}
[Fact]
@@ -84,7 +88,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new ShowField { FieldId = 1 };
- Assert.Throws(() => GuardSchemaField.CanShow(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanShow(schema_0, command));
}
[Fact]
@@ -92,7 +96,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new ShowField { FieldId = 3 };
- Assert.Throws(() => GuardSchemaField.CanShow(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanShow(schema_0, command));
}
[Fact]
@@ -100,9 +104,9 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new ShowField { FieldId = 1 };
- schema.FieldsById[1].Hide();
+ var schema_1 = schema_0.HideField(1);
- GuardSchemaField.CanShow(schema, command);
+ GuardSchemaField.CanShow(schema_1, command);
}
[Fact]
@@ -110,7 +114,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new EnableField { FieldId = 1 };
- Assert.Throws(() => GuardSchemaField.CanEnable(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanEnable(schema_0, command));
}
[Fact]
@@ -118,7 +122,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new EnableField { FieldId = 3 };
- Assert.Throws(() => GuardSchemaField.CanEnable(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanEnable(schema_0, command));
}
[Fact]
@@ -126,9 +130,9 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new EnableField { FieldId = 1 };
- schema.FieldsById[1].Disable();
+ var schema_1 = schema_0.DisableField(1);
- GuardSchemaField.CanEnable(schema, command);
+ GuardSchemaField.CanEnable(schema_1, command);
}
[Fact]
@@ -136,9 +140,9 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new LockField { FieldId = 1 };
- schema.FieldsById[1].Lock();
+ var schema_1 = schema_0.LockField(1);
- Assert.Throws(() => GuardSchemaField.CanLock(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanLock(schema_1, command));
}
[Fact]
@@ -146,7 +150,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new LockField { FieldId = 3 };
- Assert.Throws(() => GuardSchemaField.CanLock(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanLock(schema_0, command));
}
[Fact]
@@ -154,7 +158,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new LockField { FieldId = 1 };
- GuardSchemaField.CanLock(schema, command);
+ GuardSchemaField.CanLock(schema_0, command);
}
[Fact]
@@ -162,7 +166,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new DeleteField { FieldId = 3 };
- Assert.Throws(() => GuardSchemaField.CanDelete(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanDelete(schema_0, command));
}
[Fact]
@@ -170,9 +174,9 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new DeleteField { FieldId = 1 };
- schema.FieldsById[1].Lock();
+ var schema_1 = schema_0.LockField(1);
- Assert.Throws(() => GuardSchemaField.CanDelete(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanDelete(schema_1, command));
}
[Fact]
@@ -180,7 +184,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new DeleteField { FieldId = 1 };
- GuardSchemaField.CanDelete(schema, command);
+ GuardSchemaField.CanDelete(schema_0, command);
}
[Fact]
@@ -188,9 +192,9 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new UpdateField { FieldId = 1, Properties = new StringFieldProperties() };
- schema.FieldsById[1].Lock();
+ var schema_1 = schema_0.LockField(1);
- Assert.Throws(() => GuardSchemaField.CanUpdate(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanUpdate(schema_1, command));
}
[Fact]
@@ -198,7 +202,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new UpdateField { FieldId = 1, Properties = new StringFieldProperties() };
- GuardSchemaField.CanUpdate(schema, command);
+ GuardSchemaField.CanUpdate(schema_0, command);
}
[Fact]
@@ -206,7 +210,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new AddField { Name = "field1", Properties = new StringFieldProperties() };
- Assert.Throws(() => GuardSchemaField.CanAdd(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanAdd(schema_0, command));
}
[Fact]
@@ -214,7 +218,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new AddField { Name = "INVALID_NAME", Properties = validProperties };
- Assert.Throws(() => GuardSchemaField.CanAdd(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanAdd(schema_0, command));
}
[Fact]
@@ -222,7 +226,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new AddField { Name = "field3", Properties = invalidProperties };
- Assert.Throws(() => GuardSchemaField.CanAdd(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanAdd(schema_0, command));
}
[Fact]
@@ -230,7 +234,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new AddField { Name = "field3", Partitioning = "INVALID_PARTITIONING", Properties = validProperties };
- Assert.Throws(() => GuardSchemaField.CanAdd(schema, command));
+ Assert.Throws(() => GuardSchemaField.CanAdd(schema_0, command));
}
[Fact]
@@ -238,7 +242,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
{
var command = new AddField { Name = "field3", Properties = new StringFieldProperties() };
- GuardSchemaField.CanAdd(schema, command);
+ GuardSchemaField.CanAdd(schema_0, command);
}
}
}
\ No newline at end of file
diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/GuardSchemaTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/GuardSchemaTests.cs
index c88a0cdca..d02f7efeb 100644
--- a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/GuardSchemaTests.cs
+++ b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/Guards/GuardSchemaTests.cs
@@ -18,18 +18,22 @@ using Squidex.Domain.Apps.Write.Schemas.Commands;
using Squidex.Infrastructure;
using Xunit;
+#pragma warning disable SA1310 // Field names must not contain underscore
+
namespace Squidex.Domain.Apps.Write.Schemas.Guards
{
public class GuardSchemaTests
{
private readonly IAppProvider appProvider = A.Fake();
- private readonly Schema schema = new Schema("my-schema");
+ private readonly Schema schema_0;
private readonly NamedId appId = new NamedId(Guid.NewGuid(), "my-app");
public GuardSchemaTests()
{
- schema.AddField(new StringField(1, "field1", Partitioning.Invariant));
- schema.AddField(new StringField(2, "field2", Partitioning.Invariant));
+ schema_0 =
+ new Schema("my-schema")
+ .AddField(new StringField(1, "field1", Partitioning.Invariant))
+ .AddField(new StringField(2, "field2", Partitioning.Invariant));
A.CallTo(() => appProvider.GetSchemaAsync(A.Ignored, "new-schema", false))
.Returns(Task.FromResult(null));
@@ -121,9 +125,9 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
{
var command = new PublishSchema();
- schema.Publish();
+ var schema_1 = schema_0.Publish();
- Assert.Throws(() => GuardSchema.CanPublish(schema, command));
+ Assert.Throws(() => GuardSchema.CanPublish(schema_1, command));
}
[Fact]
@@ -131,7 +135,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
{
var command = new PublishSchema();
- GuardSchema.CanPublish(schema, command);
+ GuardSchema.CanPublish(schema_0, command);
}
[Fact]
@@ -139,7 +143,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
{
var command = new UnpublishSchema();
- Assert.Throws(() => GuardSchema.CanUnpublish(schema, command));
+ Assert.Throws(() => GuardSchema.CanUnpublish(schema_0, command));
}
[Fact]
@@ -147,9 +151,9 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
{
var command = new UnpublishSchema();
- schema.Publish();
+ var schema_1 = schema_0.Publish();
- GuardSchema.CanUnpublish(schema, command);
+ GuardSchema.CanUnpublish(schema_1, command);
}
[Fact]
@@ -157,7 +161,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
{
var command = new ReorderFields { FieldIds = new List { 1, 3 } };
- Assert.Throws(() => GuardSchema.CanReorder(schema, command));
+ Assert.Throws(() => GuardSchema.CanReorder(schema_0, command));
}
[Fact]
@@ -165,7 +169,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
{
var command = new ReorderFields { FieldIds = new List { 1 } };
- Assert.Throws(() => GuardSchema.CanReorder(schema, command));
+ Assert.Throws(() => GuardSchema.CanReorder(schema_0, command));
}
[Fact]
@@ -173,7 +177,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
{
var command = new ReorderFields { FieldIds = new List { 1, 2 } };
- GuardSchema.CanReorder(schema, command);
+ GuardSchema.CanReorder(schema_0, command);
}
[Fact]
@@ -181,7 +185,7 @@ namespace Squidex.Domain.Apps.Write.Schemas.Guards
{
var command = new DeleteSchema();
- GuardSchema.CanDelete(schema, command);
+ GuardSchema.CanDelete(schema_0, command);
}
private static StringFieldProperties ValidProperties()
diff --git a/tests/Squidex.Infrastructure.Tests/Json/Orleans/JsonExternalSerializerTests.cs b/tests/Squidex.Infrastructure.Tests/Json/Orleans/JsonExternalSerializerTests.cs
index 40ece3532..1949209a6 100644
--- a/tests/Squidex.Infrastructure.Tests/Json/Orleans/JsonExternalSerializerTests.cs
+++ b/tests/Squidex.Infrastructure.Tests/Json/Orleans/JsonExternalSerializerTests.cs
@@ -17,45 +17,18 @@ namespace Squidex.Infrastructure.Json.Orleans
{
public class JsonExternalSerializerTests
{
- /*
- class Context : ISerializationContext
- {
- public IBinaryTokenStreamWriter StreamWriter => throw new NotImplementedException();
-
- public int CurrentOffset => throw new NotImplementedException();
-
- public IServiceProvider ServiceProvider => throw new NotImplementedException();
-
- public object AdditionalContext => throw new NotImplementedException();
-
- public int CheckObjectWhileSerializing(object raw)
- {
- return 0;
- }
-
- public void RecordObject(object original, int offset)
- {
- }
-
- public void SerializeInner(object obj, Type expected)
- {
- }
- }*/
-
private readonly JsonExternalSerializer sut = new JsonExternalSerializer(JsonSerializer.CreateDefault());
- public JsonExternalSerializerTests()
- {
- }
-
[Fact]
public void Should_serialize_js_only()
{
- Assert.True(sut.IsSupportedType(typeof(J)));
- Assert.True(sut.IsSupportedType(typeof(J>)));
+ var serializer = new JsonExternalSerializer(JsonSerializer.CreateDefault(), typeof(int), typeof(bool));
- Assert.False(sut.IsSupportedType(typeof(int)));
- Assert.False(sut.IsSupportedType(typeof(List)));
+ Assert.True(sut.IsSupportedType(typeof(int)));
+ Assert.True(sut.IsSupportedType(typeof(bool)));
+
+ Assert.False(sut.IsSupportedType(typeof(float)));
+ Assert.False(sut.IsSupportedType(typeof(double)));
}
[Fact]
@@ -67,38 +40,20 @@ namespace Squidex.Infrastructure.Json.Orleans
Assert.Null(copy);
}
- [Fact]
- public void Should_copy_null_json()
- {
- var value = new J>(null);
- var copy = (J>)sut.DeepCopy(value, null);
-
- Assert.Null(copy.Value);
- }
-
- [Fact]
- public void Should_not_copy_immutable_values()
- {
- var value = new J>(new List { 1, 2, 3 }, true);
- var copy = (J>)sut.DeepCopy(value, null);
-
- Assert.Same(value.Value, copy.Value);
- }
-
[Fact]
public void Should_copy_non_immutable_values()
{
- var value = new J>(new List { 1, 2, 3 });
- var copy = (J>)sut.DeepCopy(value, null);
+ var value = new List { 1, 2, 3 };
+ var copy = (List)sut.DeepCopy(value, null);
- Assert.Equal(value.Value, copy.Value);
- Assert.NotSame(value.Value, copy.Value);
+ Assert.Equal(value, copy);
+ Assert.NotSame(value, copy);
}
[Fact]
public void Should_serialize_and_deserialize_value()
{
- var value = new J>(new List { 1, 2, 3 });
+ var value = new List(new List { 1, 2, 3 });
var writtenLength = 0;
var writtenBuffer = (byte[])null;
@@ -123,10 +78,10 @@ namespace Squidex.Infrastructure.Json.Orleans
A.CallTo(() => reader.ReadBytes(writtenLength))
.Returns(writtenBuffer);
- var copy = (J>)sut.Deserialize(value.GetType(), readerContext);
+ var copy = (List)sut.Deserialize(value.GetType(), readerContext);
- Assert.Equal(value.Value, copy.Value);
- Assert.NotSame(value.Value, copy.Value);
+ Assert.Equal(value, copy);
+ Assert.NotSame(value, copy);
}
}
}