From 2d1613c31c0f631089fb34663385d91b89b069ec Mon Sep 17 00:00:00 2001 From: Brandon Titus Date: Fri, 13 Mar 2020 17:07:42 -0600 Subject: [PATCH 1/6] Fix post status issues after scheduling --- .../Post/Scheduling/PublishSettingsViewController.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/WordPress/Classes/ViewRelated/Post/Scheduling/PublishSettingsViewController.swift b/WordPress/Classes/ViewRelated/Post/Scheduling/PublishSettingsViewController.swift index d639b67a482f..05614445f506 100644 --- a/WordPress/Classes/ViewRelated/Post/Scheduling/PublishSettingsViewController.swift +++ b/WordPress/Classes/ViewRelated/Post/Scheduling/PublishSettingsViewController.swift @@ -70,6 +70,11 @@ struct PublishSettingsViewModel { mutating func setDate(_ date: Date?) { if let date = date { post.dateCreated = date + if post.hasFuturePublishDate() { + post.status = .scheduled + } else { + post.status = .publish + } } else { post.publishImmediately() } From 142462e59809360b34dff325dfb891f5546743ae Mon Sep 17 00:00:00 2001 From: Brandon Titus Date: Fri, 13 Mar 2020 17:08:17 -0600 Subject: [PATCH 2/6] Show post scheduled date when available --- WordPress/Classes/Models/AbstractPost.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/Models/AbstractPost.m b/WordPress/Classes/Models/AbstractPost.m index 16477d2f41c9..1f7f91b760db 100644 --- a/WordPress/Classes/Models/AbstractPost.m +++ b/WordPress/Classes/Models/AbstractPost.m @@ -420,7 +420,7 @@ - (void)publishImmediately - (BOOL)shouldPublishImmediately { - return [self originalIsDraft] && ![self hasFuturePublishDate]; + return [self originalIsDraft] && self.dateCreated == nil && ![self hasFuturePublishDate]; } - (NSString *)authorNameForDisplay From dc589a72fdd36c9587b58e1a2fb44646e70a5f16 Mon Sep 17 00:00:00 2001 From: Brandon Titus Date: Fri, 13 Mar 2020 17:08:43 -0600 Subject: [PATCH 3/6] Show the publish confirmation when post changed --- WordPress/Classes/ViewRelated/Post/PostEditor+Publish.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/ViewRelated/Post/PostEditor+Publish.swift b/WordPress/Classes/ViewRelated/Post/PostEditor+Publish.swift index 9f7c42eb4358..f1be6791dbfe 100644 --- a/WordPress/Classes/ViewRelated/Post/PostEditor+Publish.swift +++ b/WordPress/Classes/ViewRelated/Post/PostEditor+Publish.swift @@ -111,7 +111,7 @@ extension PostEditor where Self: UIViewController { !UserDefaults.standard.asyncPromoWasDisplayed { promoBlock() } else if action.isAsync, - let postStatus = self.post.status, + let postStatus = self.post.original?.status ?? self.post.status, ![.publish, .publishPrivate].contains(postStatus) { // Only display confirmation alert for unpublished posts displayPublishConfirmationAlert(for: action, onPublish: publishBlock) From 1c5b05ca50b597b1307fd7c3102fb577ff91438b Mon Sep 17 00:00:00 2001 From: Brandon Titus Date: Mon, 23 Mar 2020 22:44:59 -0600 Subject: [PATCH 4/6] Adjust publish immediately logic + update unit tests --- WordPress/Classes/Models/AbstractPost.m | 2 +- .../Controllers/PublishSettingsControllerTests.swift | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/WordPress/Classes/Models/AbstractPost.m b/WordPress/Classes/Models/AbstractPost.m index 1f7f91b760db..539b2031a27a 100644 --- a/WordPress/Classes/Models/AbstractPost.m +++ b/WordPress/Classes/Models/AbstractPost.m @@ -420,7 +420,7 @@ - (void)publishImmediately - (BOOL)shouldPublishImmediately { - return [self originalIsDraft] && self.dateCreated == nil && ![self hasFuturePublishDate]; + return [self dateCreatedIsNilOrEqualToDateModified]; } - (NSString *)authorNameForDisplay diff --git a/WordPress/WordPressTest/ViewRelated/Post/Controllers/PublishSettingsControllerTests.swift b/WordPress/WordPressTest/ViewRelated/Post/Controllers/PublishSettingsControllerTests.swift index 5f2671a2c475..105364ac6180 100644 --- a/WordPress/WordPressTest/ViewRelated/Post/Controllers/PublishSettingsControllerTests.swift +++ b/WordPress/WordPressTest/ViewRelated/Post/Controllers/PublishSettingsControllerTests.swift @@ -43,7 +43,7 @@ class PublishSettingsViewControllerTests: XCTestCase { func testViewModelDateImmediately() { let testDate = Date() - let post = PostBuilder(context).with(dateCreated: testDate).drafted().withRemote().build() + let post = PostBuilder(context).drafted().withRemote().build() var viewModel = PublishSettingsViewModel(post: post) XCTAssertNil(viewModel.date, "Date should not exist in view model") @@ -51,11 +51,19 @@ class PublishSettingsViewControllerTests: XCTestCase { if case PublishSettingsViewModel.State.immediately = viewModel.state { // Success } else { - XCTFail("View model should be immediately") + XCTFail("View model should be immediately instead of \(viewModel.state)") } viewModel.setDate(testDate) + if case PublishSettingsViewModel.State.published(_) = viewModel.state { + // Success + } else { + XCTFail("View model should be published instead of \(viewModel.state)") + } + + viewModel.setDate(nil) + if case PublishSettingsViewModel.State.immediately = viewModel.state { // Success } else { From 9ec436260463338e326a367de050a8311da6468a Mon Sep 17 00:00:00 2001 From: Brandon Titus Date: Mon, 23 Mar 2020 23:01:04 -0600 Subject: [PATCH 5/6] Revert to previous publishImmediately checking The publish logic needs to be updated for the `nil` dateCreated change to work properly. --- WordPress/Classes/Models/AbstractPost.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPress/Classes/Models/AbstractPost.m b/WordPress/Classes/Models/AbstractPost.m index 539b2031a27a..b3d094ed8a3a 100644 --- a/WordPress/Classes/Models/AbstractPost.m +++ b/WordPress/Classes/Models/AbstractPost.m @@ -420,7 +420,7 @@ - (void)publishImmediately - (BOOL)shouldPublishImmediately { - return [self dateCreatedIsNilOrEqualToDateModified]; + return [self originalIsDraft] && [self dateCreatedIsNilOrEqualToDateModified]; } - (NSString *)authorNameForDisplay From 46e9cbd37da5758468d43ec13d1accdbb0f9387a Mon Sep 17 00:00:00 2001 From: Brandon Titus Date: Mon, 23 Mar 2020 23:36:44 -0600 Subject: [PATCH 6/6] Remove extra test for publish immediately This logic doesn't match current app behavior, so the test can be removed. --- .../Post/Controllers/PublishSettingsControllerTests.swift | 8 -------- 1 file changed, 8 deletions(-) diff --git a/WordPress/WordPressTest/ViewRelated/Post/Controllers/PublishSettingsControllerTests.swift b/WordPress/WordPressTest/ViewRelated/Post/Controllers/PublishSettingsControllerTests.swift index 105364ac6180..46a4f5a913d0 100644 --- a/WordPress/WordPressTest/ViewRelated/Post/Controllers/PublishSettingsControllerTests.swift +++ b/WordPress/WordPressTest/ViewRelated/Post/Controllers/PublishSettingsControllerTests.swift @@ -61,14 +61,6 @@ class PublishSettingsViewControllerTests: XCTestCase { } else { XCTFail("View model should be published instead of \(viewModel.state)") } - - viewModel.setDate(nil) - - if case PublishSettingsViewModel.State.immediately = viewModel.state { - // Success - } else { - XCTFail("View model should be immediately instead of \(viewModel.state)") - } } func testViewModelDatePublished() {