From 85638218414f3a7067af4cc0a363d2c9064bc837 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 26 Feb 2021 17:36:50 +0100 Subject: [PATCH] Nulling. --- .../Contents/ContentData.cs | 26 ---------- .../Contents/ContentsController.cs | 8 +-- .../Model/Contents/ContentDataTests.cs | 23 -------- .../TestSuite.ApiTests/ContentUpdateTests.cs | 52 +++++++++++++++++++ .../TestSuite.Shared/ClientManagerWrapper.cs | 2 +- 5 files changed, 57 insertions(+), 54 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs b/backend/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs index bfffcc4e1..cc02d6852 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs @@ -9,7 +9,6 @@ using System; using System.Collections.Generic; using System.Linq; using Squidex.Infrastructure; -using Squidex.Infrastructure.Json.Objects; namespace Squidex.Domain.Apps.Core.Contents { @@ -85,31 +84,6 @@ namespace Squidex.Domain.Apps.Core.Contents return Merge(target, this); } - public ContentData ToCleaned() - { - var target = new ContentData(); - - foreach (var (fieldName, fieldValue) in ValidValues) - { - if (fieldValue != null) - { - var resultValue = new ContentFieldData(); - - foreach (var (key, value) in fieldValue.Where(x => x.Value.Type != JsonValueType.Null)) - { - resultValue[key] = value; - } - - if (resultValue.Count > 0) - { - target[fieldName] = resultValue; - } - } - } - - return target; - } - public override bool Equals(object? obj) { return Equals(obj as ContentData); diff --git a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs index 2d16b5794..163a71a1b 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs @@ -361,7 +361,7 @@ namespace Squidex.Areas.Api.Controllers.Contents [ApiCosts(1)] public async Task PostContent(string app, string name, [FromBody] ContentData request, [FromQuery] bool publish = false, [FromQuery] DomainId? id = null) { - var command = new CreateContent { Data = request.ToCleaned(), Publish = publish }; + var command = new CreateContent { Data = request, Publish = publish }; if (id != null && id.Value != default && !string.IsNullOrWhiteSpace(id.Value.ToString())) { @@ -458,7 +458,7 @@ namespace Squidex.Areas.Api.Controllers.Contents [ApiCosts(1)] public async Task PostContent(string app, string name, DomainId id, [FromBody] ContentData request, [FromQuery] bool publish = false) { - var command = new UpsertContent { ContentId = id, Data = request.ToCleaned(), Publish = publish }; + var command = new UpsertContent { ContentId = id, Data = request, Publish = publish }; var response = await InvokeCommandAsync(command); @@ -487,7 +487,7 @@ namespace Squidex.Areas.Api.Controllers.Contents [ApiCosts(1)] public async Task PutContent(string app, string name, DomainId id, [FromBody] ContentData request) { - var command = new UpdateContent { ContentId = id, Data = request.ToCleaned() }; + var command = new UpdateContent { ContentId = id, Data = request }; var response = await InvokeCommandAsync(command); @@ -516,7 +516,7 @@ namespace Squidex.Areas.Api.Controllers.Contents [ApiCosts(1)] public async Task PatchContent(string app, string name, DomainId id, [FromBody] ContentData request) { - var command = new PatchContent { ContentId = id, Data = request.ToCleaned() }; + var command = new PatchContent { ContentId = id, Data = request }; var response = await InvokeCommandAsync(command); diff --git a/backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs b/backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs index 44873b1ce..13f091185 100644 --- a/backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs @@ -6,35 +6,12 @@ // ========================================================================== using Squidex.Domain.Apps.Core.Contents; -using Squidex.Infrastructure.Json.Objects; using Xunit; namespace Squidex.Domain.Apps.Core.Model.Contents { public class ContentDataTests { - [Fact] - public void Should_remove_null_values_from_name_model_when_cleaning() - { - var input = - new ContentData() - .AddField("field1", null) - .AddField("field2", - new ContentFieldData() - .AddLocalized("en", 2) - .AddLocalized("it", JsonValue.Null)); - - var actual = input.ToCleaned(); - - var expected = - new ContentData() - .AddField("field2", - new ContentFieldData() - .AddLocalized("en", 2)); - - Assert.Equal(expected, actual); - } - [Fact] public void Should_return_same_content_if_merging_same_references() { diff --git a/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs b/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs index b7e2b4102..1a5bfc906 100644 --- a/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs +++ b/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs @@ -389,6 +389,32 @@ namespace TestSuite.ApiTests } } + [Fact] + public async Task Should_update_item_to_null() + { + TestEntity content = null; + try + { + // STEP 1: Create a new item. + content = await _.Contents.CreateAsync(new TestEntityData { String = "initial" }, true); + + + // STEP 2: Update the item and ensure that the data has changed. + await _.Contents.UpdateAsync(content.Id, new TestEntityData { String = null }); + + var updated = await _.Contents.GetAsync(content.Id); + + Assert.Null(updated.Data.String); + } + finally + { + if (content != null) + { + await _.Contents.DeleteAsync(content.Id); + } + } + } + [Fact] public async Task Should_patch_item() { @@ -415,6 +441,32 @@ namespace TestSuite.ApiTests } } + [Fact] + public async Task Should_patch_item_to_null() + { + TestEntity content = null; + try + { + // STEP 1: Create a new item. + content = await _.Contents.CreateAsync(new TestEntityData { String = "initial" }, true); + + + // STEP 2: Update the item and ensure that the data has changed. + await _.Contents.PatchAsync(content.Id, new { @string = new { iv = (object)null } }); + + var updated = await _.Contents.GetAsync(content.Id); + + Assert.Null(updated.Data.String); + } + finally + { + if (content != null) + { + await _.Contents.DeleteAsync(content.Id); + } + } + } + [Fact] public async Task Should_create_draft_version() { diff --git a/backend/tools/TestSuite/TestSuite.Shared/ClientManagerWrapper.cs b/backend/tools/TestSuite/TestSuite.Shared/ClientManagerWrapper.cs index 0dd967e1e..4e12c4446 100644 --- a/backend/tools/TestSuite/TestSuite.Shared/ClientManagerWrapper.cs +++ b/backend/tools/TestSuite/TestSuite.Shared/ClientManagerWrapper.cs @@ -54,8 +54,8 @@ namespace TestSuite AppName = appName, ClientId = clientId, ClientSecret = clientSecret, - ReadResponseAsString = true, Configurator = AcceptAllCertificatesConfigurator.Instance, + ReadResponseAsString = true, Url = serviceURl }); }