Skip to content

Commit b2828e5

Browse files
authored
Merge pull request #6571 from woocommerce/add/order-creation-ui-test-more
Order Creation: Expand new order UI test to include editing Order Status
2 parents d33a435 + 7817f04 commit b2828e5

File tree

7 files changed

+90
-1
lines changed

7 files changed

+90
-1
lines changed

WooCommerce/Classes/ViewRelated/Orders/Order Creation/StatusSection/OrderStatusSection.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ struct OrderStatusSection: View {
3535
.fixedSize(horizontal: true, vertical: true)
3636
.padding(.trailing, -Layout.linkButtonTrailingPadding) // remove trailing padding to align button title to the side
3737
.accessibilityLabel(Text(Localization.editButtonAccessibilityLabel))
38+
.accessibilityIdentifier("order-status-section-edit-button")
3839
.sheet(isPresented: $viewModel.shouldShowOrderStatusList) {
3940
OrderStatusList(siteID: viewModel.siteID, status: viewModel.currentOrderStatus) { newStatus in
4041
viewModel.updateOrderStatus(newStatus: newStatus)

WooCommerce/Classes/ViewRelated/Orders/Order Details/Order Summary Section/Edit Order Status/OrderStatusListViewController.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ final class OrderStatusListViewController: UIViewController {
7474
func configureTableView() {
7575
view.backgroundColor = .listBackground
7676
tableView.backgroundColor = .listBackground
77+
tableView.accessibilityIdentifier = "order-status-list"
7778
tableView.dataSource = self
7879
tableView.delegate = self
7980
}
@@ -110,6 +111,7 @@ extension OrderStatusListViewController {
110111
target: self,
111112
action: #selector(applyButtonTapped))
112113
navigationItem.setRightBarButton(rightBarButton, animated: false)
114+
navigationItem.rightBarButtonItem?.accessibilityIdentifier = "order-status-list-apply-button"
113115
deActivateApplyButton()
114116
}
115117

WooCommerce/UITestsFoundation/Screens/Orders/NewOrderScreen.swift

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,36 @@ public final class NewOrderScreen: ScreenObject {
77
$0.buttons["new-order-create-button"]
88
}
99

10+
private let orderStatusEditButtonGetter: (XCUIApplication) -> XCUIElement = {
11+
$0.buttons["order-status-section-edit-button"]
12+
}
13+
1014
private var createButton: XCUIElement { createButtonGetter(app) }
1115

12-
init(app: XCUIApplication = XCUIApplication()) throws {
16+
/// Edit button in the Order Status section.
17+
///
18+
private var orderStatusEditButton: XCUIElement { orderStatusEditButtonGetter(app) }
19+
20+
public init(app: XCUIApplication = XCUIApplication()) throws {
1321
try super.init(
1422
expectedElementGetters: [ createButtonGetter ],
1523
app: app
1624
)
1725
}
1826

27+
/// Creates a remote order with all of the entered order data.
28+
/// - Returns: Single Order Detail screen object.
1929
@discardableResult
2030
public func createOrder() throws -> SingleOrderScreen {
2131
createButton.tap()
2232
return try SingleOrderScreen()
2333
}
34+
35+
/// Opens the Order Status screen (to set a new order status).
36+
/// - Returns: Order Status screen object.
37+
@discardableResult
38+
public func openOrderStatusScreen() throws -> OrderStatusScreen {
39+
orderStatusEditButton.tap()
40+
return try OrderStatusScreen()
41+
}
2442
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import ScreenObject
2+
import XCTest
3+
4+
public final class OrderStatusScreen: ScreenObject {
5+
6+
private let applyButtonGetter: (XCUIApplication) -> XCUIElement = {
7+
$0.buttons["order-status-list-apply-button"]
8+
}
9+
10+
private let orderStatusTableGetter: (XCUIApplication) -> XCUIElement = {
11+
$0.tables["order-status-list"]
12+
}
13+
14+
private var applyButton: XCUIElement { applyButtonGetter(app) }
15+
16+
/// Table with list of order statuses.
17+
///
18+
private var orderStatusTable: XCUIElement { orderStatusTableGetter(app) }
19+
20+
init(app: XCUIApplication = XCUIApplication()) throws {
21+
try super.init(
22+
expectedElementGetters: [ orderStatusTableGetter ],
23+
app: app
24+
)
25+
}
26+
27+
/// Selects a new order status from the list.
28+
/// - Returns: Order Status screen object (self).
29+
@discardableResult
30+
public func selectOrderStatus(atIndex index: Int) throws -> Self {
31+
orderStatusTable.cells.element(boundBy: index).tap()
32+
return self
33+
}
34+
35+
/// Updates the order with the selected order status.
36+
/// - Returns: New Order screen object.
37+
@discardableResult
38+
public func confirmSelectedOrderStatus() throws -> NewOrderScreen {
39+
applyButton.tap()
40+
return try NewOrderScreen()
41+
}
42+
}

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,6 +1206,8 @@
12061206
CC07860526736B6500BA9AC1 /* ErrorTopBannerFactoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC07860426736B6500BA9AC1 /* ErrorTopBannerFactoryTests.swift */; };
12071207
CC13C0CB278E021300C0B5B5 /* AddProductVariationToOrderViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC13C0CA278E021300C0B5B5 /* AddProductVariationToOrderViewModel.swift */; };
12081208
CC13C0CD278E086D00C0B5B5 /* AddProductVariationToOrderViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC13C0CC278E086D00C0B5B5 /* AddProductVariationToOrderViewModelTests.swift */; };
1209+
CC1AB56827FC5822003DEF43 /* OrderStatusScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC1AB56727FC5821003DEF43 /* OrderStatusScreen.swift */; };
1210+
CC1AB56A27FC60D1003DEF43 /* NewOrderFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC1AB56927FC60D1003DEF43 /* NewOrderFlow.swift */; };
12091211
CC200BB127847DE300EC5884 /* OrderPaymentSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC200BB027847DE300EC5884 /* OrderPaymentSection.swift */; };
12101212
CC254F2D26C17AB5005F3C82 /* BottomButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC254F2C26C17AB5005F3C82 /* BottomButtonView.swift */; };
12111213
CC254F3026C2A53D005F3C82 /* ShippingLabelAddNewPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC254F2F26C2A53D005F3C82 /* ShippingLabelAddNewPackage.swift */; };
@@ -2898,6 +2900,8 @@
28982900
CC07860426736B6500BA9AC1 /* ErrorTopBannerFactoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorTopBannerFactoryTests.swift; sourceTree = "<group>"; };
28992901
CC13C0CA278E021300C0B5B5 /* AddProductVariationToOrderViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddProductVariationToOrderViewModel.swift; sourceTree = "<group>"; };
29002902
CC13C0CC278E086D00C0B5B5 /* AddProductVariationToOrderViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddProductVariationToOrderViewModelTests.swift; sourceTree = "<group>"; };
2903+
CC1AB56727FC5821003DEF43 /* OrderStatusScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderStatusScreen.swift; sourceTree = "<group>"; };
2904+
CC1AB56927FC60D1003DEF43 /* NewOrderFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewOrderFlow.swift; sourceTree = "<group>"; };
29012905
CC200BB027847DE300EC5884 /* OrderPaymentSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderPaymentSection.swift; sourceTree = "<group>"; };
29022906
CC254F2C26C17AB5005F3C82 /* BottomButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomButtonView.swift; sourceTree = "<group>"; };
29032907
CC254F2F26C2A53D005F3C82 /* ShippingLabelAddNewPackage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelAddNewPackage.swift; sourceTree = "<group>"; };
@@ -5782,6 +5786,7 @@
57825786
children = (
57835787
80E6FC742763579D0086CD67 /* MockDataReader.swift */,
57845788
800A5B9D275623FC009DE2CD /* LoginFlow.swift */,
5789+
CC1AB56927FC60D1003DEF43 /* NewOrderFlow.swift */,
57855790
);
57865791
path = Flows;
57875792
sourceTree = "<group>";
@@ -7808,6 +7813,7 @@
78087813
CC5C278627EE19A600B25D2A /* NewOrderScreen.swift */,
78097814
F997173623DBF02400592D8E /* SingleOrderScreen.swift */,
78107815
F997173C23DBFBBF00592D8E /* OrderSearchScreen.swift */,
7816+
CC1AB56727FC5821003DEF43 /* OrderStatusScreen.swift */,
78117817
);
78127818
path = Orders;
78137819
sourceTree = "<group>";
@@ -8495,6 +8501,7 @@
84958501
3F0CF30D2704490A00EF3D71 /* LoginSiteAddressScreen.swift in Sources */,
84968502
80C3626B27704EE1005CEAD3 /* ProductDataStructs.swift in Sources */,
84978503
80C3627127745737005CEAD3 /* ReviewDataStructs.swift in Sources */,
8504+
CC1AB56827FC5822003DEF43 /* OrderStatusScreen.swift in Sources */,
84988505
3F0CF2FE270420DD00EF3D71 /* ScreenObject+Extension.swift in Sources */,
84998506
3FF314EA26FC751B0012E68E /* XCTest+Extensions.swift in Sources */,
85008507
3F0CF3002704490A00EF3D71 /* OrderSearchScreen.swift in Sources */,
@@ -9831,6 +9838,7 @@
98319838
800A5B58275483D6009DE2CD /* OrdersTests.swift in Sources */,
98329839
80AD2CA427858BAB00A63DE8 /* StatsTests.swift in Sources */,
98339840
800A5BCB2759CE4B009DE2CD /* ProductsTests.swift in Sources */,
9841+
CC1AB56A27FC60D1003DEF43 /* NewOrderFlow.swift in Sources */,
98349842
800A5B9E275623FC009DE2CD /* LoginFlow.swift in Sources */,
98359843
);
98369844
runOnlyForDeploymentPostprocessing = 0;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import UITestsFoundation
2+
import XCTest
3+
4+
/// Helpers for actions that flow across different New Order screens.
5+
///
6+
class NewOrderFlow {
7+
8+
/// Changes the new order status to the second status in the Order Status list.
9+
/// - Returns: New Order screen object.
10+
@discardableResult
11+
static func editOrderStatus() throws -> NewOrderScreen {
12+
return try NewOrderScreen().openOrderStatusScreen()
13+
.selectOrderStatus(atIndex: 1)
14+
.confirmSelectedOrderStatus()
15+
}
16+
}

WooCommerce/WooCommerceUITests/Tests/OrdersTests.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ final class OrdersTests: XCTestCase {
2828
func test_create_new_order() throws {
2929
try TabNavComponent().goToOrdersScreen()
3030
.startOrderCreation()
31+
32+
try NewOrderFlow.editOrderStatus()
3133
.createOrder()
3234
}
3335
}

0 commit comments

Comments
 (0)