Skip to content

Commit a3f7913

Browse files
committed
Update canBeDismissed to work only for order creation
1 parent 7834c0a commit a3f7913

File tree

3 files changed

+50
-4
lines changed

3 files changed

+50
-4
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Creation/NewOrder.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ final class NewOrderHostingController: UIHostingController<NewOrder> {
4444
///
4545
extension NewOrderHostingController {
4646
override func shouldPopOnBackButton() -> Bool {
47-
guard viewModel.canBeDismissed || !viewModel.hasChanges else {
47+
guard viewModel.canBeDismissed else {
4848
presentDiscardChangesActionSheet(onDiscard: { [weak self] in
4949
self?.discardOrderAndPop()
5050
})
@@ -62,7 +62,7 @@ extension NewOrderHostingController {
6262
///
6363
extension NewOrderHostingController: UIAdaptivePresentationControllerDelegate {
6464
func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
65-
return viewModel.canBeDismissed || !viewModel.hasChanges
65+
return viewModel.canBeDismissed
6666
}
6767

6868
func presentationControllerDidAttemptToDismiss(_ presentationController: UIPresentationController) {

WooCommerce/Classes/ViewRelated/Orders/Order Creation/NewOrderViewModel.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,15 @@ final class NewOrderViewModel: ObservableObject {
3636
}
3737
}
3838

39-
/// Indicates whether view can be dismissed. If the value is `false` - confirmation alert will be displayd depending on `hasChanges` value.
39+
/// Indicates whether view can be dismissed.
4040
///
4141
var canBeDismissed: Bool {
42-
flow == .creation
42+
switch flow {
43+
case .creation: // Creation can be dismissed when there aren't changes pending to commit.
44+
return !hasChanges
45+
case .editing: // Editing can always be dismissed because changes are committed instantly.
46+
return true
47+
}
4348
}
4449

4550
/// Indicates whether the cancel button is visible.

WooCommerce/WooCommerceTests/ViewRelated/Orders/Order Creation/NewOrderViewModelTests.swift

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import WooFoundation
66
final class NewOrderViewModelTests: XCTestCase {
77

88
let sampleSiteID: Int64 = 123
9+
let sampleOrderID: Int64 = 1234
910
let sampleProductID: Int64 = 5
1011

1112
func test_view_model_inits_with_expected_values() {
@@ -1012,6 +1013,46 @@ final class NewOrderViewModelTests: XCTestCase {
10121013
XCTAssertEqual(viewModel.addressFormViewModel.fields.lastName, "",
10131014
"Pending change was not discarded when address form was reset")
10141015
}
1016+
1017+
func test_canBeDismissed_is_true_when_creating_order_without_changes() {
1018+
// Given
1019+
let viewModel = NewOrderViewModel(siteID: sampleSiteID)
1020+
1021+
// Then
1022+
XCTAssertTrue(viewModel.canBeDismissed)
1023+
}
1024+
1025+
func test_canBeDismissed_is_false_when_creating_order_with_changes() {
1026+
// Given
1027+
let viewModel = NewOrderViewModel(siteID: sampleSiteID)
1028+
1029+
// When
1030+
viewModel.updateOrderStatus(newStatus: .failed)
1031+
1032+
// Then
1033+
XCTAssertFalse(viewModel.canBeDismissed)
1034+
}
1035+
1036+
func test_canBeDismissed_is_true_when_editing_order_without_changes() {
1037+
// Given
1038+
let order = Order.fake().copy(orderID: sampleOrderID)
1039+
let viewModel = NewOrderViewModel(siteID: sampleSiteID, flow: .editing(initialOrder: order))
1040+
1041+
// Then
1042+
XCTAssertTrue(viewModel.canBeDismissed)
1043+
}
1044+
1045+
func test_canBeDismissed_is_true_when_editing_order_with_changes() {
1046+
// Given
1047+
let order = Order.fake().copy(orderID: sampleOrderID)
1048+
let viewModel = NewOrderViewModel(siteID: sampleSiteID, flow: .editing(initialOrder: order))
1049+
1050+
// When
1051+
viewModel.updateOrderStatus(newStatus: .failed)
1052+
1053+
// Then
1054+
XCTAssertTrue(viewModel.canBeDismissed)
1055+
}
10151056
}
10161057

10171058
private extension MockStorageManager {

0 commit comments

Comments
 (0)