Skip to content

Commit c43372b

Browse files
authored
Merge pull request #8068 from woocommerce/update/edit-order-ui-test
Order Editing: Expand edit order UI test to include checking product and closing edit flow
2 parents 472ec8b + 428e215 commit c43372b

File tree

4 files changed

+34
-15
lines changed

4 files changed

+34
-15
lines changed

WooCommerce/UITestsFoundation/Screens/Orders/SingleOrderScreen.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public final class SingleOrderScreen: ScreenObject {
2424

2525
public init(app: XCUIApplication = XCUIApplication()) throws {
2626
try super.init(
27-
expectedElementGetters: [ summaryCellGetter ],
27+
expectedElementGetters: [ summaryCellGetter, editOrderButtonGetter ],
2828
app: app
2929
)
3030
}
@@ -58,7 +58,6 @@ public final class SingleOrderScreen: ScreenObject {
5858
return self
5959
}
6060

61-
@discardableResult
6261
public func tapCollectPaymentButton() throws -> PaymentMethodsScreen {
6362
let orderDetailTableView = app.tables["order-details-table-view"]
6463
while !collectPaymentButton.isFullyVisibleOnScreen() {
@@ -68,7 +67,6 @@ public final class SingleOrderScreen: ScreenObject {
6867
return try PaymentMethodsScreen()
6968
}
7069

71-
@discardableResult
7270
public func goBackToOrdersScreen() throws -> OrdersScreen {
7371
// Only needed for iPhone because iPad shows both Orders and Single Order screens on the same view
7472
if XCUIDevice.isPhone {
@@ -77,7 +75,6 @@ public final class SingleOrderScreen: ScreenObject {
7775
return try OrdersScreen()
7876
}
7977

80-
@discardableResult
8178
public func tapEditOrderButton() throws -> UnifiedOrderScreen {
8279
editOrderButton.tap()
8380
return try UnifiedOrderScreen(flow: .editing)

WooCommerce/UITestsFoundation/Screens/Orders/UnifiedOrderScreen.swift

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -102,47 +102,41 @@ public final class UnifiedOrderScreen: ScreenObject {
102102

103103
/// Opens the Order Status screen (to set a new order status).
104104
/// - Returns: Order Status screen object.
105-
@discardableResult
106105
private func openOrderStatusScreen() throws -> OrderStatusScreen {
107106
orderStatusEditButton.tap()
108107
return try OrderStatusScreen()
109108
}
110109

111110
/// Opens the Add Product screen (to add a new product).
112111
/// - Returns: Add Product screen object.
113-
@discardableResult
114112
private func openAddProductScreen() throws -> AddProductScreen {
115113
addProductButton.tap()
116114
return try AddProductScreen()
117115
}
118116

119117
/// Opens the Customer Details screen.
120118
/// - Returns: Customer Details screen object.
121-
@discardableResult
122119
public func openCustomerDetailsScreen() throws -> CustomerDetailsScreen {
123120
addCustomerDetailsButton.tap()
124121
return try CustomerDetailsScreen()
125122
}
126123

127124
/// Opens the Add Shipping screen.
128125
/// - Returns: Add Shipping screen object.
129-
@discardableResult
130126
public func openAddShippingScreen() throws -> AddShippingScreen {
131127
addShippingButton.tap()
132128
return try AddShippingScreen()
133129
}
134130

135131
/// Opens the Add Fee screen.
136132
/// - Returns: Add Fee screen object.
137-
@discardableResult
138133
public func openAddFeeScreen() throws -> AddFeeScreen {
139134
addFeeButton.tap()
140135
return try AddFeeScreen()
141136
}
142137

143138
/// Opens the Customer Note screen.
144139
/// - Returns: Customer Note screen object.
145-
@discardableResult
146140
public func openCustomerNoteScreen() throws -> CustomerNoteScreen {
147141
addNoteButton.tap()
148142
return try CustomerNoteScreen()
@@ -152,23 +146,20 @@ public final class UnifiedOrderScreen: ScreenObject {
152146

153147
/// Creates a remote order with all of the entered order data.
154148
/// - Returns: Single Order Detail screen object.
155-
@discardableResult
156149
public func createOrder() throws -> SingleOrderScreen {
157150
createButton.tap()
158151
return try SingleOrderScreen()
159152
}
160153

161154
/// Changes the new order status to the second status in the Order Status list.
162155
/// - Returns: Unified Order screen object.
163-
@discardableResult
164156
public func editOrderStatus() throws -> UnifiedOrderScreen {
165157
return try openOrderStatusScreen()
166158
.selectOrderStatus(atIndex: 1)
167159
}
168160

169161
/// Select the first product from the addProductScreen
170162
/// - Returns: Unified Order screen object.
171-
@discardableResult
172163
public func addProduct(byName name: String) throws -> UnifiedOrderScreen {
173164
return try openAddProductScreen()
174165
.selectProduct(byName: name)
@@ -214,7 +205,6 @@ public final class UnifiedOrderScreen: ScreenObject {
214205

215206
/// Cancels Order Creation process
216207
/// - Returns: Orders Screen object.
217-
@discardableResult
218208
public func cancelOrderCreation() throws -> OrdersScreen {
219209
// This cancel button exists only if the feature flag `.splitViewInOrdersTab` is on.
220210
// For taking app store screenshot, the beta feature is turned off so we should pop to get out of this screen.
@@ -236,4 +226,25 @@ public final class UnifiedOrderScreen: ScreenObject {
236226

237227
return self
238228
}
229+
230+
/// Checks the screen for existence of all products, checking each name.
231+
/// - Parameter productNames: Array of product names to check.
232+
/// - Returns: Unified Order screen object.
233+
@discardableResult
234+
public func checkForExistingProducts(byName productNames: [String]) throws -> UnifiedOrderScreen {
235+
for productName in productNames {
236+
let productNamePredicate = NSPredicate(format: "label MATCHES %@", productName)
237+
XCTAssertTrue(app.staticTexts.containing(productNamePredicate).element.exists)
238+
}
239+
240+
return self
241+
}
242+
243+
/// Finishes Order Editing process
244+
/// - Returns: Single Order Screen object.
245+
public func closeEditingFlow() throws -> SingleOrderScreen {
246+
doneButton.tap()
247+
248+
return try SingleOrderScreen()
249+
}
239250
}

WooCommerce/WooCommerceUITests/Tests/OrdersTests.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,19 @@ final class OrdersTests: XCTestCase {
4040
.createOrder()
4141
.verifySingleOrderScreenLoaded()
4242
.goBackToOrdersScreen()
43+
.verifyOrdersScreenLoaded()
4344
}
4445

45-
func test_edit_existing_order() throws {
46+
func test_load_existing_order() throws {
4647
let orders = try GetMocks.readOrdersData()
4748

4849
try TabNavComponent().goToOrdersScreen()
4950
.selectOrder(byOrderNumber: orders[0].number)
5051
.tapEditOrderButton()
5152
.checkForExistingOrderTitle(byOrderNumber: orders[0].number)
53+
.checkForExistingProducts(byName: orders[0].line_items.map { $0.name })
54+
.closeEditingFlow()
55+
.verifySingleOrderScreenLoaded()
5256
}
5357

5458
func test_cancel_order_creation() throws {

docs/UI-TESTS.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ The following flows are covered/planned to be covered by UI tests. Tests that ar
3333
- [x] With shipping
3434
- [x] With a fee
3535
- [x] With a customer note
36+
- [x] Edit an existing order:
37+
- [x] Open edit flow
38+
- [x] Check existing order number
39+
- [x] Check existing product
40+
- [ ] Edit products
41+
- [ ] Edit customer details
42+
- [x] Order Edit flow can be dismissed
3643
- [x] Order Creation flow can be dismissed
3744
4. [Products](../WooCommerce/WooCommerceUITests/Tests/ProductsTests.swift)
3845
- [x] Products list and single product screens load

0 commit comments

Comments
 (0)