Skip to content

Commit 268a11c

Browse files
committed
Add Yosemite function to update yosemite order
1 parent 5bad105 commit 268a11c

File tree

5 files changed

+112
-5
lines changed

5 files changed

+112
-5
lines changed

Networking/Networking/Remote/OrdersRemote.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ public class OrdersRemote: Remote {
184184
let billingAddressEncoded = try order.billingAddress?.toDictionary()
185185
params[Order.CodingKeys.billingAddress.rawValue] = billingAddressEncoded
186186
case .fees:
187-
let feesEncoded = try order.fees.toDictionary()
187+
let feesEncoded = try order.fees.map { try $0.toDictionary() }
188188
params[Order.CodingKeys.feeLines.rawValue] = feesEncoded
189189
}
190190
}

Networking/NetworkingTests/Remote/OrdersRemoteTests.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,16 +252,17 @@ final class OrdersRemoteTests: XCTestCase {
252252
func test_create_order_properly_encodes_fee_lines() throws {
253253
// Given
254254
let remote = OrdersRemote(network: network)
255-
let fee = OrderFeeLine(feeID: 0, name: "Line", taxClass: "", taxStatus: .none, total: "12.34", totalTax: "", taxes: [], attributes: [])
255+
let fee = OrderFeeLine(feeID: 333, name: "Line", taxClass: "", taxStatus: .none, total: "12.34", totalTax: "", taxes: [], attributes: [])
256256
let order = Order.fake().copy(fees: [fee])
257257

258258
// When
259259
remote.createOrder(siteID: 123, order: order, fields: [.feeLines]) { result in }
260260

261261
// Then
262262
let request = try XCTUnwrap(network.requestsForResponseData.last as? JetpackRequest)
263-
let received = try XCTUnwrap(request.parameters["fee_lines"] as? [[String: String]]).first
264-
let expected = [
263+
let received = try XCTUnwrap(request.parameters["fee_lines"] as? [[String: AnyHashable]]).first
264+
let expected: [String: AnyHashable] = [
265+
"id": fee.feeID,
265266
"name": fee.name,
266267
"tax_status": fee.taxStatus.rawValue,
267268
"tax_class": fee.taxClass,

Yosemite/Yosemite/Actions/OrderAction.swift

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,22 @@ public enum OrderAction: Action {
6565
///
6666
case updateOrder(siteID: Int64, order: Order, fields: [OrderUpdateField], onCompletion: (Result<Order, Error>) -> Void)
6767

68-
/// Creates a simple payments order with a specific amount value and no tax.
68+
/// Creates a simple payments order with a specific amount value and tax status.
6969
///
7070
case createSimplePaymentsOrder(siteID: Int64, amount: String, taxable: Bool, onCompletion: (Result<Order, Error>) -> Void)
7171

7272
/// Creates a manual order with the provided order details.
7373
///
7474
case createOrder(siteID: Int64, order: Order, onCompletion: (Result<Order, Error>) -> Void)
75+
76+
/// Updates a simple payments order with the specified values.
77+
///
78+
case updateSimplePaymentsOrder(siteID: Int64,
79+
orderID: Int64,
80+
feeID: Int64,
81+
amount: String,
82+
taxable: Bool,
83+
orderNote: String?,
84+
email: String?,
85+
onCompletion: (Result<Order, Error>) -> Void)
7586
}

Yosemite/Yosemite/Stores/OrderStore.swift

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ public class OrderStore: Store {
6666
createSimplePaymentsOrder(siteID: siteID, amount: amount, taxable: taxable, onCompletion: onCompletion)
6767
case let .createOrder(siteID, order, onCompletion):
6868
createOrder(siteID: siteID, order: order, onCompletion: onCompletion)
69+
70+
case let .updateSimplePaymentsOrder(siteID, orderID, feeID, amount, taxable, orderNote, email, onCompletion):
71+
updateSimplePaymentsOrder(siteID: siteID,
72+
orderID: orderID,
73+
feeID: feeID,
74+
amount: amount,
75+
taxable: taxable,
76+
orderNote: orderNote,
77+
email: email,
78+
onCompletion: onCompletion)
6979
}
7080
}
7181
}
@@ -267,6 +277,41 @@ private extension OrderStore {
267277
}
268278
}
269279

280+
/// Updates a simple payment order with the specified values.
281+
///
282+
func updateSimplePaymentsOrder(siteID: Int64,
283+
orderID: Int64,
284+
feeID: Int64,
285+
amount: String,
286+
taxable: Bool,
287+
orderNote: String?,
288+
email: String?,
289+
onCompletion: @escaping (Result<Order, Error>) -> Void) {
290+
291+
// Recreate the original order
292+
let originalOrder = OrderFactory.simplePaymentsOrder(amount: amount, taxable: taxable)
293+
294+
// Create updated fields
295+
let newFee = OrderFactory.simplePaymentFee(feeID: feeID, amount: amount, taxable: taxable)
296+
let newBillingAddress = Address(firstName: "",
297+
lastName: "",
298+
company: nil,
299+
address1: "",
300+
address2: nil,
301+
city: "",
302+
state: "",
303+
postcode: "",
304+
country: "",
305+
phone: nil,
306+
email: email)
307+
308+
// Set new fields
309+
let updatedOrder = originalOrder.copy(orderID: orderID, customerNote: orderNote, billingAddress: newBillingAddress, fees: [newFee])
310+
let updateFields: [OrderUpdateField] = [.customerNote, .billingAddress, .fees]
311+
312+
updateOrder(siteID: siteID, order: updatedOrder, fields: updateFields, onCompletion: onCompletion)
313+
}
314+
270315
/// Creates a manual order with the provided order details.
271316
///
272317
func createOrder(siteID: Int64, order: Order, onCompletion: @escaping (Result<Order, Error>) -> Void) {

Yosemite/YosemiteTests/Stores/OrderStoreTests.swift

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,6 +710,56 @@ final class OrderStoreTests: XCTestCase {
710710
// Then
711711
XCTAssertNotNil(storedOrder)
712712
}
713+
714+
func test_update_simple_payments_order_sends_correct_values() throws {
715+
// Given
716+
let feeID: Int64 = 1234
717+
let amount = "100.00"
718+
let taxable = true
719+
let note = "This is a note"
720+
let email = "[email protected]"
721+
722+
let store = OrderStore(dispatcher: dispatcher, storageManager: storageManager, network: network)
723+
network.simulateResponse(requestUrlSuffix: "orders/963", filename: "order")
724+
725+
// When
726+
let action = OrderAction.updateSimplePaymentsOrder(siteID: sampleSiteID,
727+
orderID: sampleOrderID,
728+
feeID: feeID,
729+
amount: amount,
730+
taxable: taxable,
731+
orderNote: note,
732+
email: email) { _ in }
733+
store.onAction(action)
734+
735+
// Then
736+
let request = try XCTUnwrap(network.requestsForResponseData.last as? JetpackRequest)
737+
let receivedFees = try XCTUnwrap(request.parameters["fee_lines"] as? [[String: AnyHashable]]).first
738+
let expectedFees: [String: AnyHashable] = [
739+
"id": 1234,
740+
"name": "Simple Payments",
741+
"tax_status": "taxable",
742+
"tax_class": "",
743+
"total": "100.00"
744+
]
745+
assertEqual(expectedFees, receivedFees)
746+
747+
let receivedBilling = try XCTUnwrap(request.parameters["billing"] as? [String: AnyHashable])
748+
let expectedBilling: [String: AnyHashable] = [
749+
"first_name": "",
750+
"last_name": "",
751+
"address_1": "",
752+
"city": "",
753+
"state": "",
754+
"postcode": "",
755+
"country": "",
756+
"email": email
757+
]
758+
assertEqual(receivedBilling, expectedBilling)
759+
760+
let receivedNote = try XCTUnwrap(request.parameters["customer_note"] as? String)
761+
assertEqual(receivedNote, note)
762+
}
713763
}
714764

715765

0 commit comments

Comments
 (0)