Skip to content

Commit c538e92

Browse files
authored
Merge pull request #6163 from woocommerce/issue/6026-shipping-fee-networking-layer
Order Creation: Add support for adding shipping lines on orders in Networking layer
2 parents a864348 + c5e15cc commit c538e92

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
lines changed

Networking/Networking/Model/ShippingLine.swift

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Codegen
33

44
/// Represents a Shipping Line Entity.
55
///
6-
public struct ShippingLine: Decodable, Equatable, GeneratedFakeable {
6+
public struct ShippingLine: Codable, Equatable, GeneratedFakeable {
77
public let shippingID: Int64
88
public let methodTitle: String
99
public let methodID: String
@@ -29,6 +29,21 @@ public struct ShippingLine: Decodable, Equatable, GeneratedFakeable {
2929
}
3030
}
3131

32+
// MARK: Codable
33+
extension ShippingLine {
34+
35+
/// Encodes ShippingLine writable fields.
36+
///
37+
public func encode(to encoder: Encoder) throws {
38+
var container = encoder.container(keyedBy: CodingKeys.self)
39+
40+
try container.encode(shippingID, forKey: .shippingID)
41+
try container.encode(methodTitle, forKey: .methodTitle)
42+
try container.encode(methodID, forKey: .methodID)
43+
try container.encode(total, forKey: .total)
44+
}
45+
}
46+
3247

3348
/// Defines all of the Shipping Line CodingKeys
3449
///

Networking/Networking/Remote/OrdersRemote.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ public class OrdersRemote: Remote {
147147
if let shippingAddress = order.shippingAddress {
148148
params[Order.CodingKeys.shippingAddress.rawValue] = try shippingAddress.toDictionary()
149149
}
150+
case .shippingLines:
151+
params[Order.CodingKeys.shippingLines.rawValue] = try order.shippingLines.compactMap { try $0.toDictionary() }
150152
}
151153
}
152154
}()
@@ -201,6 +203,9 @@ public class OrdersRemote: Remote {
201203
case .fees:
202204
let feesEncoded = try order.fees.map { try $0.toDictionary() }
203205
params[Order.CodingKeys.feeLines.rawValue] = feesEncoded
206+
case .shippingLines:
207+
let shippingEncoded = try order.shippingLines.map { try $0.toDictionary() }
208+
params[Order.CodingKeys.shippingLines.rawValue] = shippingEncoded
204209
}
205210
}
206211
}()
@@ -283,6 +288,7 @@ public extension OrdersRemote {
283288
case shippingAddress
284289
case billingAddress
285290
case fees
291+
case shippingLines
286292
}
287293

288294
/// Order fields supported for create
@@ -293,5 +299,6 @@ public extension OrdersRemote {
293299
case items
294300
case billingAddress
295301
case shippingAddress
302+
case shippingLines
296303
}
297304
}

Networking/NetworkingTests/Remote/OrdersRemoteTests.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ final class OrdersRemoteTests: XCTestCase {
264264
wait(for: [expectation], timeout: Constants.expectationTimeout)
265265
}
266266

267+
// MARK: - Create Order Tests
268+
267269
func test_create_order_properly_encodes_fee_lines() throws {
268270
// Given
269271
let remote = OrdersRemote(network: network)
@@ -376,6 +378,27 @@ final class OrdersRemoteTests: XCTestCase {
376378
]
377379
assertEqual(received2, expected2)
378380
}
381+
382+
func test_create_order_properly_encodes_shipping_lines() throws {
383+
// Given
384+
let remote = OrdersRemote(network: network)
385+
let shipping = ShippingLine(shippingID: 333, methodTitle: "Shipping", methodID: "other", total: "1.23", totalTax: "", taxes: [])
386+
let order = Order.fake().copy(shippingLines: [shipping])
387+
388+
// When
389+
remote.createOrder(siteID: 123, order: order, fields: [.shippingLines]) { result in }
390+
391+
// Then
392+
let request = try XCTUnwrap(network.requestsForResponseData.last as? JetpackRequest)
393+
let received = try XCTUnwrap(request.parameters["shipping_lines"] as? [[String: AnyHashable]]).first
394+
let expected: [String: AnyHashable] = [
395+
"id": shipping.shippingID,
396+
"method_title": shipping.methodTitle,
397+
"method_id": shipping.methodID,
398+
"total": shipping.total
399+
]
400+
assertEqual(received, expected)
401+
}
379402
}
380403

381404
private extension OrdersRemoteTests {

0 commit comments

Comments
 (0)