Browse Source

Nulling.

pull/662/head
Sebastian 5 years ago
parent
commit
8563821841
  1. 26
      backend/src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs
  2. 8
      backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs
  3. 23
      backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs
  4. 52
      backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs
  5. 2
      backend/tools/TestSuite/TestSuite.Shared/ClientManagerWrapper.cs

26
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);

8
backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs

@ -361,7 +361,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
[ApiCosts(1)]
public async Task<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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);

23
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()
{

52
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()
{

2
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
});
}

Loading…
Cancel
Save