Browse Source

Bugfix: Data must be cleaned when it comes from api.

pull/1/head
Sebastian 9 years ago
parent
commit
096f4c80e2
  1. 12
      src/Squidex.Core/Contents/ContentData.cs
  2. 6
      src/Squidex/Controllers/ContentApi/ContentsController.cs
  3. 1
      src/Squidex/Pipeline/CommandHandlers/EnrichWithExpectedVersionHandler.cs
  4. 21
      tests/Squidex.Core.Tests/Contents/ContentDataTests.cs

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

@ -62,6 +62,18 @@ namespace Squidex.Core.Contents
return result;
}
public ContentData ToCleaned()
{
var result = new ContentData();
foreach (var fieldValue in this.Where(x => x.Value != null))
{
result[fieldValue.Key] = fieldValue.Value;
}
return result;
}
public ContentData ToIdModel(Schema schema)
{
Guard.NotNull(schema, nameof(schema));

6
src/Squidex/Controllers/ContentApi/ContentsController.cs

@ -118,7 +118,7 @@ namespace Squidex.Controllers.ContentApi
[Route("content/{app}/{name}/")]
public async Task<IActionResult> PostContent([FromBody] ContentData request)
{
var command = new CreateContent { Data = request, ContentId = Guid.NewGuid() };
var command = new CreateContent { ContentId = Guid.NewGuid(), Data = request.ToCleaned() };
var context = await CommandBus.PublishAsync(command);
@ -132,7 +132,7 @@ namespace Squidex.Controllers.ContentApi
[Route("content/{app}/{name}/{id}")]
public async Task<IActionResult> PutContent(Guid id, [FromBody] ContentData request)
{
var command = new UpdateContent { ContentId = id, Data = request };
var command = new UpdateContent { ContentId = id, Data = request.ToCleaned() };
await CommandBus.PublishAsync(command);
@ -143,7 +143,7 @@ namespace Squidex.Controllers.ContentApi
[Route("content/{app}/{name}/{id}")]
public async Task<IActionResult> PatchContent(Guid id, [FromBody] ContentData request)
{
var command = new PatchContent { ContentId = id, Data = request };
var command = new PatchContent { ContentId = id, Data = request.ToCleaned() };
await CommandBus.PublishAsync(command);

1
src/Squidex/Pipeline/CommandHandlers/EnrichWithExpectedVersionHandler.cs

@ -7,7 +7,6 @@
// ==========================================================================
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Squidex.Infrastructure.CQRS.Commands;

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

@ -157,6 +157,27 @@ namespace Squidex.Core.Contents
Assert.Equal(expected, actual);
}
[Fact]
public void Should_remove_null_values_when_cleaning()
{
var expected =
new ContentData()
.AddField("field2",
new ContentFieldData()
.AddValue("iv", 2));
var input =
new ContentData()
.AddField("field1", null)
.AddField("field2",
new ContentFieldData()
.AddValue("iv", 2));
var actual = input.ToCleaned();
Assert.Equal(expected, actual);
}
[Fact]
public void Should_provide_invariant_from_first_language()
{

Loading…
Cancel
Save