diff --git a/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardApp.cs b/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardApp.cs index c2e8aba93..b6fa6e6cb 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardApp.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardApp.cs @@ -56,8 +56,6 @@ namespace Squidex.Domain.Apps.Entities.Apps.DomainObject.Guards { Guard.NotNull(command, nameof(command)); - var plan = app.Plan; - Validate.It(e => { if (string.IsNullOrWhiteSpace(command.PlanId)) @@ -71,6 +69,8 @@ namespace Squidex.Domain.Apps.Entities.Apps.DomainObject.Guards e(T.Get("apps.plans.notFound"), nameof(command.PlanId)); } + var plan = app.Plan; + if (!string.IsNullOrWhiteSpace(command.PlanId) && plan != null && !plan.Owner.Equals(command.Actor)) { e(T.Get("apps.plans.notPlanOwner")); diff --git a/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardAppClients.cs b/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardAppClients.cs index 11b307505..ad8fdb613 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardAppClients.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardAppClients.cs @@ -19,10 +19,10 @@ namespace Squidex.Domain.Apps.Entities.Apps.DomainObject.Guards { Guard.NotNull(command, nameof(command)); - var clients = app.Clients; - Validate.It(e => { + var clients = app.Clients; + if (string.IsNullOrWhiteSpace(command.Id)) { e(Not.Defined("ClientId"), nameof(command.Id)); @@ -38,9 +38,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.DomainObject.Guards { Guard.NotNull(command, nameof(command)); - var clients = app.Clients; - - GetClientOrThrow(clients, command.Id); + GetClientOrThrow(app.Clients, command.Id); Validate.It(e => { @@ -55,9 +53,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.DomainObject.Guards { Guard.NotNull(command, nameof(command)); - var clients = app.Clients; - - GetClientOrThrow(clients, command.Id); + GetClientOrThrow(app.Clients, command.Id); Validate.It(e => { diff --git a/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardAppLanguages.cs b/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardAppLanguages.cs index 6a50f3d7f..705e80590 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardAppLanguages.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Apps/DomainObject/Guards/GuardAppLanguages.cs @@ -19,17 +19,16 @@ namespace Squidex.Domain.Apps.Entities.Apps.DomainObject.Guards { Guard.NotNull(command, nameof(command)); - var languages = app.Languages; - Validate.It(e => { + var languages = app.Languages; var language = command.Language; if (language == null) { e(Not.Defined(nameof(command.Language)), nameof(command.Language)); } - else if (languages.Contains(language)) + else if (app.Languages.Contains(command.Language)) { e(T.Get("apps.languages.languageAlreadyAdded")); } @@ -40,10 +39,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.DomainObject.Guards { Guard.NotNull(command, nameof(command)); - var languages = app.Languages; - Validate.It(e => { + var languages = app.Languages; var language = command.Language; if (language == null) @@ -66,10 +64,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.DomainObject.Guards { Guard.NotNull(command, nameof(command)); - var languages = app.Languages; - Validate.It(e => { + var languages = app.Languages; var language = command.Language; if (language == null) diff --git a/backend/src/Squidex.Domain.Apps.Entities/Comments/DomainObject/Guards/GuardComments.cs b/backend/src/Squidex.Domain.Apps.Entities/Comments/DomainObject/Guards/GuardComments.cs index e6e865a62..5a7afcb38 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Comments/DomainObject/Guards/GuardComments.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Comments/DomainObject/Guards/GuardComments.cs @@ -25,7 +25,7 @@ namespace Squidex.Domain.Apps.Entities.Comments.DomainObject.Guards { if (string.IsNullOrWhiteSpace(command.Text)) { - e(Not.Defined("Text"), nameof(command.Text)); + e(Not.Defined(nameof(command.Text)), nameof(command.Text)); } }); } @@ -45,7 +45,7 @@ namespace Squidex.Domain.Apps.Entities.Comments.DomainObject.Guards { if (string.IsNullOrWhiteSpace(command.Text)) { - e(Not.Defined("Text"), nameof(command.Text)); + e(Not.Defined(nameof(command.Text)), nameof(command.Text)); } }); } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.State.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.State.cs index 2523718c9..cf58727c8 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.State.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.State.cs @@ -47,15 +47,15 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject } [IgnoreDataMember] - public Status Status + public Status? NewStatus { - get => CurrentVersion.Status; + get => NewVersion?.Status; } [IgnoreDataMember] - public Status? NewStatus + public Status Status { - get => NewVersion?.Status; + get => CurrentVersion.Status; } public override bool ApplyEvent(IEvent @event, EnvelopeHeaders headers) diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.cs index bd39483ae..5e2b72555 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.cs @@ -258,7 +258,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject { await GuardContent.CanChangeStatus(c, Snapshot, context.Workflow, context.Repository, context.Schema); - if (c.Status == Snapshot.Status) + if (c.Status == Snapshot.EditingStatus) { return; } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/Guards/GuardContent.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/Guards/GuardContent.cs index c963a1119..a2e22ddee 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/Guards/GuardContent.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/Guards/GuardContent.cs @@ -48,6 +48,14 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject.Guards CheckPermission(content, command, Permissions.AppContentsUpdate, Permissions.AppContentsUpsert); + Validate.It(e => + { + if (command.Data == null) + { + e(Not.Defined(nameof(command.Data)), nameof(command.Data)); + } + }); + if (!command.DoNotValidateWorkflow) { var status = content.NewStatus ?? content.Status; @@ -57,14 +65,6 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject.Guards throw new DomainException(T.Get("contents.workflowErrorUpdate", new { status })); } } - - Validate.It(e => - { - if (command.Data == null) - { - e(Not.Defined(nameof(command.Data)), nameof(command.Data)); - } - }); } public static void CanDeleteDraft(DeleteContentDraft command, IContentEntity content) @@ -115,6 +115,11 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject.Guards var oldStatus = content.NewStatus ?? content.Status; + if (command.Status == oldStatus) + { + return; + } + if (oldStatus == Status.Published && command.CheckReferrers) { var hasReferrer = await contentRepository.HasReferrersAsync(content.AppId.Id, command.ContentId, SearchScope.Published); diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/DomainObject/ContentDomainObjectTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/DomainObject/ContentDomainObjectTests.cs index bdc4b8682..82b07c249 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/DomainObject/ContentDomainObjectTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/DomainObject/ContentDomainObjectTests.cs @@ -145,7 +145,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentCreated { Data = data, Status = Status.Draft }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); A.CallTo(() => scriptEngine.ExecuteAsync(A._, "", ScriptOptions())) .MustNotHaveHappened(); @@ -168,7 +168,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentCreated { Data = data, Status = Status.Draft }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); A.CallTo(() => scriptEngine.ExecuteAsync(A._, "", ScriptOptions())) .MustNotHaveHappened(); @@ -192,9 +192,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentStatusChanged { Status = Status.Archived }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Archived, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Archived, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -245,7 +245,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentCreated { Data = data, Status = Status.Draft }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); A.CallTo(() => scriptEngine.ExecuteAsync(A._, "", ScriptOptions())) .MustNotHaveHappened(); @@ -268,7 +268,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentCreated { Data = data, Status = Status.Draft }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); A.CallTo(() => scriptEngine.ExecuteAsync(A._, "", ScriptOptions())) .MustNotHaveHappened(); @@ -292,9 +292,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentStatusChanged { Status = Status.Archived }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Archived, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Archived, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -316,7 +316,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentUpdated { Data = otherData }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(otherData, data, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(otherData, data, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -338,7 +338,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentUpdated { Data = otherData }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(otherData, data, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(otherData, data, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -362,9 +362,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentStatusChanged { Status = Status.Archived }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(otherData, data, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(otherData, data, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(otherData, null, Status.Archived, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(otherData, null, Status.Archived, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -418,7 +418,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentUpdated { Data = otherData }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(otherData, data, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(otherData, data, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -442,7 +442,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentUpdated { Data = otherData }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(otherData, data, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(otherData, data, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -491,7 +491,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentUpdated { Data = patched }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(patched, data, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(patched, data, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -515,7 +515,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentUpdated { Data = patched }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(patched, data, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(patched, data, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -554,7 +554,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentStatusChanged { Status = Status.Archived }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Archived, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Archived, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -576,7 +576,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentStatusChanged { Status = Status.Archived }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Archived, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Archived, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -599,7 +599,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentStatusChanged { Status = Status.Draft, Change = StatusChange.Unpublished }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft, Status.Published), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Draft, Status.Published), "", ScriptOptions())) .MustHaveHappened(); } @@ -608,7 +608,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject { var command = new ChangeContentStatus { Status = Status.Draft }; - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft, Status.Published), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Draft, Status.Published), "", ScriptOptions())) .Returns(otherData); await ExecuteCreateAsync(); @@ -627,7 +627,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentStatusChanged { Status = Status.Draft, Change = StatusChange.Unpublished }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Draft, Status.Published), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Draft, Status.Published), "", ScriptOptions())) .MustHaveHappened(); } @@ -651,7 +651,31 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentStatusChanged { Change = StatusChange.Change, Status = Status.Archived }) ); - A.CallTo(() => scriptEngine.TransformAsync(ScriptContext(data, null, Status.Archived, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Archived, Status.Draft), "", ScriptOptions())) + .MustHaveHappened(); + } + + [Fact] + public async Task ChangeStatus_should_create_events_and_delete_new_version_when_available() + { + var command = new ChangeContentStatus { Status = Status.Published }; + + await ExecuteCreateAsync(); + await ExecutePublishAsync(); + await ExecuteCreateDraftAsync(); + + var result = await PublishAsync(command); + + result.ShouldBeEquivalent(sut.Snapshot); + + Assert.Null(sut.Snapshot.NewVersion?.Status); + + LastEvents + .ShouldHaveSameEvents( + CreateContentEvent(new ContentStatusChanged { Change = StatusChange.Published, Status = Status.Published }) + ); + + A.CallTo(() => scriptEngine.TransformAsync(ScriptVars(data, null, Status.Published, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -796,7 +820,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject CreateContentEvent(new ContentDeleted()) ); - A.CallTo(() => scriptEngine.ExecuteAsync(ScriptContext(data, null, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.ExecuteAsync(ScriptVars(data, null, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -814,7 +838,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject Assert.Equal(EtagVersion.Empty, sut.Snapshot.Version); Assert.Empty(LastEvents); - A.CallTo(() => scriptEngine.ExecuteAsync(ScriptContext(data, null, Status.Draft), "", ScriptOptions())) + A.CallTo(() => scriptEngine.ExecuteAsync(ScriptVars(data, null, Status.Draft), "", ScriptOptions())) .MustHaveHappened(); } @@ -920,12 +944,12 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject return A.That.Matches(x => x.CanDisallow && x.CanReject && x.AsContext); } - private ScriptVars ScriptContext(ContentData? newData, ContentData? oldData, Status newStatus) + private ScriptVars ScriptVars(ContentData? newData, ContentData? oldData, Status newStatus) { return A.That.Matches(x => Matches(x, newData, oldData, newStatus, default)); } - private ScriptVars ScriptContext(ContentData? newData, ContentData? oldData, Status newStatus, Status oldStatus) + private ScriptVars ScriptVars(ContentData? newData, ContentData? oldData, Status newStatus, Status oldStatus) { return A.That.Matches(x => Matches(x, newData, oldData, newStatus, oldStatus)); } diff --git a/backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs b/backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs index cb445fe7c..46aa10842 100644 --- a/backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs +++ b/backend/tools/TestSuite/TestSuite.ApiTests/AssetTests.cs @@ -367,7 +367,7 @@ namespace TestSuite.ApiTests [Theory] [InlineData(false)] [InlineData(true)] - public async Task Should_recreate_asset(bool permanent) + public async Task Should_recreate_deleted_asset(bool permanent) { // STEP 1: Create asset var asset_1 = await _.UploadFileAsync("Assets/logo-squared.png", "image/png"); diff --git a/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs b/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs index d2856e5f3..230fb277e 100644 --- a/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs +++ b/backend/tools/TestSuite/TestSuite.ApiTests/ContentUpdateTests.cs @@ -29,7 +29,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_return_published_item() + public async Task Should_return_published_content() { TestEntity content = null; try @@ -55,7 +55,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_not_return_archived_item() + public async Task Should_not_return_archived_content() { TestEntity content = null; try @@ -81,7 +81,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_not_return_unpublished_item() + public async Task Should_not_return_unpublished_content() { TestEntity content = null; try @@ -294,7 +294,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_create_non_published_item() + public async Task Should_create_non_published_content() { TestEntity content = null; try @@ -316,7 +316,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_create_published_item() + public async Task Should_create_published_content() { TestEntity content = null; try @@ -338,7 +338,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_create_item_with_custom_id() + public async Task Should_create_content_with_custom_id() { var id = Guid.NewGuid().ToString(); @@ -360,7 +360,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_not_create_item_with_custom_id_twice() + public async Task Should_not_create_content_with_custom_id_twice() { var id = Guid.NewGuid().ToString(); @@ -388,7 +388,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_create_item_with_custom_id_and_upsert() + public async Task Should_create_content_with_custom_id_and_upsert() { var id = Guid.NewGuid().ToString(); @@ -422,7 +422,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_update_item() + public async Task Should_update_content() { TestEntity content = null; try @@ -448,7 +448,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_update_item_to_null() + public async Task Should_update_content_to_null() { TestEntity content = null; try @@ -474,7 +474,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_patch_item() + public async Task Should_patch_content() { TestEntity content = null; try @@ -500,7 +500,7 @@ namespace TestSuite.ApiTests } [Fact] - public async Task Should_patch_item_to_null() + public async Task Should_patch_content_to_null() { TestEntity content = null; try @@ -542,17 +542,23 @@ namespace TestSuite.ApiTests // STEP 3: Update the item and ensure that the data has not changed. await _.Contents.PatchAsync(content.Id, new TestEntityData { Number = 2 }); - var updated = await _.Contents.GetAsync(content.Id); + var updated_1 = await _.Contents.GetAsync(content.Id); - Assert.Equal(1, updated.Data.Number); - Assert.Null(updated.NewStatus); + Assert.Equal(1, updated_1.Data.Number); // STEP 4: Get the unpublished version var unpublished = await _.Contents.GetAsync(content.Id, QueryContext.Default.Unpublished()); Assert.Equal(2, unpublished.Data.Number); - Assert.Equal("Draft", unpublished.NewStatus); + + + // STEP 5: Publish draft and ensure that it has been updated. + await _.Contents.ChangeStatusAsync(content.Id, "Published"); + + var updated_2 = await _.Contents.GetAsync(content.Id); + + Assert.Equal(2, updated_2.Data.Number); } finally { @@ -566,7 +572,7 @@ namespace TestSuite.ApiTests [Theory] [InlineData(true)] [InlineData(false)] - public async Task Should_delete_item(bool permanent) + public async Task Should_delete_content(bool permanent) { // STEP 1: Create a new item. var content = await _.Contents.CreateAsync(new TestEntityData { Number = 2 }, true); @@ -594,7 +600,7 @@ namespace TestSuite.ApiTests [Theory] [InlineData(true)] [InlineData(false)] - public async Task Should_recreate_delete_item(bool permanent) + public async Task Should_recreate_deleted_content(bool permanent) { // STEP 1: Create a new item. var content_1 = await _.Contents.CreateAsync(new TestEntityData { Number = 2 }, true); @@ -613,7 +619,7 @@ namespace TestSuite.ApiTests [Theory] [InlineData(true)] [InlineData(false)] - public async Task Should_recreate_delete_item_with_upsert(bool permanent) + public async Task Should_recreate_deleted_content_with_upsert(bool permanent) { // STEP 1: Create a new item. var content_1 = await _.Contents.CreateAsync(new TestEntityData { Number = 2 }, true);