Skip to content

Commit 39b9582

Browse files
authored
Merge pull request #7056 from woocommerce/issue/6976-update-networking-with-is-editable
[Unified Order Editing] Update Order with new WC 6.6 properties
2 parents ee4b53a + 97ad4c2 commit 39b9582

File tree

14 files changed

+90
-1
lines changed

14 files changed

+90
-1
lines changed

Fakes/Fakes/Networking.generated.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,9 @@ extension Order {
323323
parentID: .fake(),
324324
customerID: .fake(),
325325
orderKey: .fake(),
326+
isEditable: .fake(),
327+
needsPayment: .fake(),
328+
needsProcessing: .fake(),
326329
number: .fake(),
327330
status: .fake(),
328331
currency: .fake(),

Networking/Networking/Model/Copiable/Models+Copiable.generated.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,9 @@ extension Order {
242242
parentID: CopiableProp<Int64> = .copy,
243243
customerID: CopiableProp<Int64> = .copy,
244244
orderKey: CopiableProp<String> = .copy,
245+
isEditable: CopiableProp<Bool> = .copy,
246+
needsPayment: CopiableProp<Bool> = .copy,
247+
needsProcessing: CopiableProp<Bool> = .copy,
245248
number: CopiableProp<String> = .copy,
246249
status: CopiableProp<OrderStatusEnum> = .copy,
247250
currency: CopiableProp<String> = .copy,
@@ -273,6 +276,9 @@ extension Order {
273276
let parentID = parentID ?? self.parentID
274277
let customerID = customerID ?? self.customerID
275278
let orderKey = orderKey ?? self.orderKey
279+
let isEditable = isEditable ?? self.isEditable
280+
let needsPayment = needsPayment ?? self.needsPayment
281+
let needsProcessing = needsProcessing ?? self.needsProcessing
276282
let number = number ?? self.number
277283
let status = status ?? self.status
278284
let currency = currency ?? self.currency
@@ -305,6 +311,9 @@ extension Order {
305311
parentID: parentID,
306312
customerID: customerID,
307313
orderKey: orderKey,
314+
isEditable: isEditable,
315+
needsPayment: needsPayment,
316+
needsProcessing: needsProcessing,
308317
number: number,
309318
status: status,
310319
currency: currency,

Networking/Networking/Model/Order.swift

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ public struct Order: Decodable, GeneratedCopiable, GeneratedFakeable {
1010
public let customerID: Int64
1111
public let orderKey: String
1212

13+
public let isEditable: Bool
14+
public let needsPayment: Bool
15+
public let needsProcessing: Bool
1316
public let number: String
1417
/// The Order status.
1518
///
@@ -50,6 +53,9 @@ public struct Order: Decodable, GeneratedCopiable, GeneratedFakeable {
5053
parentID: Int64,
5154
customerID: Int64,
5255
orderKey: String,
56+
isEditable: Bool,
57+
needsPayment: Bool,
58+
needsProcessing: Bool,
5359
number: String,
5460
status: OrderStatusEnum,
5561
currency: String,
@@ -82,6 +88,9 @@ public struct Order: Decodable, GeneratedCopiable, GeneratedFakeable {
8288
self.customerID = customerID
8389
self.orderKey = orderKey
8490

91+
self.isEditable = isEditable
92+
self.needsPayment = needsPayment
93+
self.needsProcessing = needsProcessing
8594
self.number = number
8695
self.status = status
8796
self.currency = currency
@@ -127,6 +136,11 @@ public struct Order: Decodable, GeneratedCopiable, GeneratedFakeable {
127136
let customerID = try container.decode(Int64.self, forKey: .customerID)
128137
let orderKey = try container.decode(String.self, forKey: .orderKey)
129138

139+
// TODO: Update with local fallback implementation https://github.com/woocommerce/woocommerce-ios/issues/6977
140+
let isEditable = try container.decodeIfPresent(Bool.self, forKey: .isEditable) ?? false
141+
let needsPayment = try container.decodeIfPresent(Bool.self, forKey: .needsPayment) ?? false
142+
let needsProcessing = try container.decodeIfPresent(Bool.self, forKey: .needsProcessing) ?? false
143+
130144
let number = try container.decode(String.self, forKey: .number)
131145
let status = try container.decode(OrderStatusEnum.self, forKey: .status)
132146

@@ -183,6 +197,9 @@ public struct Order: Decodable, GeneratedCopiable, GeneratedFakeable {
183197
parentID: parentID,
184198
customerID: customerID,
185199
orderKey: orderKey,
200+
isEditable: isEditable,
201+
needsPayment: needsPayment,
202+
needsProcessing: needsProcessing,
186203
number: number,
187204
status: status,
188205
currency: currency,
@@ -216,6 +233,9 @@ public struct Order: Decodable, GeneratedCopiable, GeneratedFakeable {
216233
parentID: 0,
217234
customerID: 0,
218235
orderKey: "",
236+
isEditable: false,
237+
needsPayment: false,
238+
needsProcessing: false,
219239
number: "",
220240
status: .pending,
221241
currency: "",
@@ -255,6 +275,9 @@ internal extension Order {
255275
case customerID = "customer_id"
256276
case orderKey = "order_key"
257277

278+
case isEditable = "is_editable"
279+
case needsPayment = "needs_payment"
280+
case needsProcessing = "needs_processing"
258281
case number = "number"
259282
case status = "status"
260283
case currency = "currency"
@@ -297,6 +320,9 @@ extension Order: Equatable {
297320
lhs.parentID == rhs.parentID &&
298321
lhs.customerID == rhs.customerID &&
299322
lhs.orderKey == rhs.orderKey &&
323+
lhs.isEditable == rhs.isEditable &&
324+
lhs.needsPayment == rhs.needsPayment &&
325+
lhs.needsProcessing == rhs.needsProcessing &&
300326
lhs.number == rhs.number &&
301327
lhs.status == rhs.status &&
302328
lhs.dateCreated == rhs.dateCreated &&

Networking/Networking/Remote/OrdersRemote.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,8 @@ public extension OrdersRemote {
294294
private static let commonOrderFieldValues = [
295295
"id", "parent_id", "number", "status", "currency", "customer_id", "customer_note", "date_created_gmt", "date_modified_gmt", "date_paid_gmt",
296296
"discount_total", "discount_tax", "shipping_total", "shipping_tax", "total", "total_tax", "payment_method", "payment_method_title",
297-
"payment_url", "billing", "coupon_lines", "shipping_lines", "refunds", "fee_lines", "order_key", "tax_lines", "meta_data"
297+
"payment_url", "billing", "coupon_lines", "shipping_lines", "refunds", "fee_lines", "order_key", "tax_lines", "meta_data", "is_editable",
298+
"needs_payment", "needs_processing"
298299
]
299300
// Use with caution. Any fields in here will be overwritten with empty values by
300301
// `Order+ReadOnlyConvertible.swift: Order.update(with:)` when the list of orders is fetched.

Networking/NetworkingTests/Remote/OrdersRemoteTests.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,26 @@ final class OrdersRemoteTests: XCTestCase {
110110
wait(for: [expectation], timeout: Constants.expectationTimeout)
111111
}
112112

113+
func test_load_single_order_properly_returns_WC6_6_new_fields() {
114+
// Given
115+
let remote = OrdersRemote(network: network)
116+
network.simulateResponse(requestUrlSuffix: "orders/\(sampleOrderID)", filename: "order")
117+
118+
// When
119+
let order: Order = waitFor { promise in
120+
remote.loadOrder(for: self.sampleSiteID, orderID: self.sampleOrderID) { order, error in
121+
if let order = order {
122+
promise(order)
123+
}
124+
}
125+
}
126+
127+
// Then
128+
XCTAssertTrue(order.isEditable)
129+
XCTAssertTrue(order.needsPayment)
130+
XCTAssertTrue(order.needsProcessing)
131+
}
132+
113133
/// Verifies that loadOrder properly relays any Networking Layer errors.
114134
///
115135
func testLoadSingleOrderProperlyRelaysNetworkingErrors() {

Networking/NetworkingTests/Responses/order.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
"data": {
33
"id": 963,
44
"parent_id": 0,
5+
"is_editable": true,
6+
"needs_payment": true,
7+
"needs_processing": true,
58
"number": "963",
69
"status": "processing",
710
"order_key": "abc123",

Networking/NetworkingTests/Responses/orders-load-all.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
{
44
"id": 963,
55
"parent_id": 0,
6+
"is_editable": true,
7+
"needs_payment": true,
8+
"needs_processing": true,
69
"number": "963",
710
"status": "processing",
811
"order_key": "abc123",

WooCommerce/Classes/ViewRelated/Orders/Order Details/Address Edit/EditOrderAddressForm.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,9 @@ struct EditAddressForm_Previews: PreviewProvider {
431431
parentID: 2,
432432
customerID: 11,
433433
orderKey: "",
434+
isEditable: false,
435+
needsPayment: false,
436+
needsProcessing: false,
434437
number: "789",
435438
status: .processing,
436439
currency: "USD",

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Package Details/Multi-package/ShippingLabelPackagesFormViewModel.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,9 @@ extension ShippingLabelPackagesFormViewModel {
447447
parentID: 0,
448448
customerID: 11,
449449
orderKey: "",
450+
isEditable: false,
451+
needsPayment: false,
452+
needsProcessing: false,
450453
number: "963",
451454
status: .processing,
452455
currency: "USD",

WooCommerce/Classes/ViewRelated/Orders/Order Details/Shipping Labels/Create Shipping Label Form/Package Details/ShippingLabelSampleData.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ enum ShippingLabelSampleData {
1111
parentID: 0,
1212
customerID: 11,
1313
orderKey: "",
14+
isEditable: false,
15+
needsPayment: false,
16+
needsProcessing: false,
1417
number: "963",
1518
status: .processing,
1619
currency: "USD",

0 commit comments

Comments
 (0)