Browse Source

Allow updating data in change scripts.

pull/588/head
Sebastian 5 years ago
parent
commit
9f25000ebe
  1. 15
      backend/src/Squidex.Domain.Apps.Entities/Contents/ContentDomainObject.cs
  2. 40
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs
  3. 2
      frontend/app/features/settings/pages/roles/role.component.html

15
backend/src/Squidex.Domain.Apps.Entities/Contents/ContentDomainObject.cs

@ -88,7 +88,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
if (!c.DoNotScript && c.Publish)
{
await context.ExecuteScriptAsync(s => s.Change,
c.Data = await context.ExecuteScriptAndTransformAsync(s => s.Change,
new ScriptVars
{
Operation = "Published",
@ -164,14 +164,23 @@ namespace Squidex.Domain.Apps.Entities.Contents
if (!c.DoNotScript)
{
await context.ExecuteScriptAsync(s => s.Change,
var data = Snapshot.Data.Clone();
var newData = await context.ExecuteScriptAndTransformAsync(s => s.Change,
new ScriptVars
{
Operation = change.ToString(),
Data = Snapshot.Data,
Data = data,
Status = c.Status,
StatusOld = Snapshot.EditingStatus
});
if (!newData.Equals(Snapshot.Data))
{
var command = SimpleMapper.Map(c, new UpdateContent { Data = newData });
Update(command, newData);
}
}
ChangeStatus(c, change);

40
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs

@ -166,7 +166,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft), "<create-script>", ScriptOptions()))
.MustHaveHappened();
A.CallTo(() => scriptEngine.ExecuteAsync(ScriptContext(data, null, Status.Published), "<change-script>", ScriptOptions()))
A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Published), "<change-script>", ScriptOptions()))
.MustHaveHappened();
}
@ -332,7 +332,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
CreateContentEvent(new ContentStatusChanged { Status = Status.Published, Change = StatusChange.Published })
);
A.CallTo(() => scriptEngine.ExecuteAsync(ScriptContext(data, null, Status.Published, Status.Draft), "<change-script>", ScriptOptions()))
A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Published, Status.Draft), "<change-script>", ScriptOptions()))
.MustHaveHappened();
}
@ -354,7 +354,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
CreateContentEvent(new ContentStatusChanged { Status = Status.Archived })
);
A.CallTo(() => scriptEngine.ExecuteAsync(ScriptContext(data, null, Status.Archived, Status.Draft), "<change-script>", ScriptOptions()))
A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Archived, Status.Draft), "<change-script>", ScriptOptions()))
.MustHaveHappened();
}
@ -377,7 +377,35 @@ namespace Squidex.Domain.Apps.Entities.Contents
CreateContentEvent(new ContentStatusChanged { Status = Status.Draft, Change = StatusChange.Unpublished })
);
A.CallTo(() => scriptEngine.ExecuteAsync(ScriptContext(data, null, Status.Draft, Status.Published), "<change-script>", ScriptOptions()))
A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft, Status.Published), "<change-script>", ScriptOptions()))
.MustHaveHappened();
}
[Fact]
public async Task ChangeStatus_should_also_update_when_script_changes_data()
{
var command = new ChangeContentStatus { Status = Status.Draft };
A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft, Status.Published), "<change-script>", ScriptOptions()))
.Returns(otherData);
await ExecuteCreateAsync();
await ExecutePublishAsync();
var result = await PublishAsync(command);
result.ShouldBeEquivalent(sut.Snapshot);
Assert.Equal(Status.Draft, sut.Snapshot.CurrentVersion.Status);
Assert.Equal(otherData, sut.Snapshot.CurrentVersion.Data);
LastEvents
.ShouldHaveSameEvents(
CreateContentEvent(new ContentUpdated { Data = otherData }),
CreateContentEvent(new ContentStatusChanged { Status = Status.Draft, Change = StatusChange.Unpublished })
);
A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft, Status.Published), "<change-script>", ScriptOptions()))
.MustHaveHappened();
}
@ -401,7 +429,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
CreateContentEvent(new ContentStatusChanged { Change = StatusChange.Change, Status = Status.Archived })
);
A.CallTo(() => scriptEngine.ExecuteAsync(ScriptContext(data, null, Status.Archived, Status.Draft), "<change-script>", ScriptOptions()))
A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Archived, Status.Draft), "<change-script>", ScriptOptions()))
.MustHaveHappened();
}
@ -456,7 +484,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
CreateContentEvent(new ContentStatusChanged { Status = Status.Archived })
);
A.CallTo(() => scriptEngine.ExecuteAsync(A<ScriptVars>._, "<change-script>", ScriptOptions()))
A.CallTo(() => scriptEngine.TransformAsync(A<ScriptVars>._, "<change-script>", ScriptOptions()))
.MustHaveHappened();
}

2
frontend/app/features/settings/pages/roles/role.component.html

@ -69,7 +69,7 @@
{{descriptions[role.name] | sqxTranslate}}
</sqx-form-alert>
<table class="table table-bordered table-fixed table-sm">
<table class="table table-bordered table-fixed">
<tr *ngFor="let control of editForm.controls; let i = index">
<td>
{{control.value}}

Loading…
Cancel
Save