Skip to content

Commit f31edba

Browse files
committed
Use copiable for POSOrder
1 parent 577ee8e commit f31edba

File tree

8 files changed

+89
-60
lines changed

8 files changed

+89
-60
lines changed

Modules/Sources/Yosemite/Model/Copiable/Models+Copiable.generated.swift

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ import Codegen
44
import Foundation
55
import Networking
66
import WooFoundation
7+
import enum NetworkingCore.OrderStatusEnum
8+
import struct NetworkingCore.Address
9+
import struct NetworkingCore.MetaData
10+
import struct NetworkingCore.Order
11+
import struct NetworkingCore.OrderItem
12+
import struct NetworkingCore.OrderRefundCondensed
713

814

915
extension Yosemite.JustInTimeMessage {
@@ -51,6 +57,60 @@ extension Yosemite.JustInTimeMessage {
5157
}
5258
}
5359

60+
extension Yosemite.POSOrder {
61+
public func copy(
62+
id: CopiableProp<Int64> = .copy,
63+
number: CopiableProp<String> = .copy,
64+
dateCreated: CopiableProp<Date> = .copy,
65+
status: CopiableProp<OrderStatusEnum> = .copy,
66+
formattedTotal: CopiableProp<String> = .copy,
67+
formattedSubtotal: CopiableProp<String> = .copy,
68+
customerEmail: NullableCopiableProp<String> = .copy,
69+
paymentMethodID: CopiableProp<String> = .copy,
70+
paymentMethodTitle: CopiableProp<String> = .copy,
71+
lineItems: CopiableProp<[POSOrderItem]> = .copy,
72+
refunds: CopiableProp<[POSOrderRefund]> = .copy,
73+
formattedDiscountTotal: NullableCopiableProp<String> = .copy,
74+
formattedTotalTax: CopiableProp<String> = .copy,
75+
formattedPaymentTotal: CopiableProp<String> = .copy,
76+
formattedNetAmount: NullableCopiableProp<String> = .copy
77+
) -> Yosemite.POSOrder {
78+
let id = id ?? self.id
79+
let number = number ?? self.number
80+
let dateCreated = dateCreated ?? self.dateCreated
81+
let status = status ?? self.status
82+
let formattedTotal = formattedTotal ?? self.formattedTotal
83+
let formattedSubtotal = formattedSubtotal ?? self.formattedSubtotal
84+
let customerEmail = customerEmail ?? self.customerEmail
85+
let paymentMethodID = paymentMethodID ?? self.paymentMethodID
86+
let paymentMethodTitle = paymentMethodTitle ?? self.paymentMethodTitle
87+
let lineItems = lineItems ?? self.lineItems
88+
let refunds = refunds ?? self.refunds
89+
let formattedDiscountTotal = formattedDiscountTotal ?? self.formattedDiscountTotal
90+
let formattedTotalTax = formattedTotalTax ?? self.formattedTotalTax
91+
let formattedPaymentTotal = formattedPaymentTotal ?? self.formattedPaymentTotal
92+
let formattedNetAmount = formattedNetAmount ?? self.formattedNetAmount
93+
94+
return Yosemite.POSOrder(
95+
id: id,
96+
number: number,
97+
dateCreated: dateCreated,
98+
status: status,
99+
formattedTotal: formattedTotal,
100+
formattedSubtotal: formattedSubtotal,
101+
customerEmail: customerEmail,
102+
paymentMethodID: paymentMethodID,
103+
paymentMethodTitle: paymentMethodTitle,
104+
lineItems: lineItems,
105+
refunds: refunds,
106+
formattedDiscountTotal: formattedDiscountTotal,
107+
formattedTotalTax: formattedTotalTax,
108+
formattedPaymentTotal: formattedPaymentTotal,
109+
formattedNetAmount: formattedNetAmount
110+
)
111+
}
112+
}
113+
54114
extension Yosemite.POSSimpleProduct {
55115
public func copy(
56116
id: CopiableProp<UUID> = .copy,

Modules/Sources/Yosemite/PointOfSale/OrderList/POSOrder.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import Foundation
2+
import Codegen
23
import struct NetworkingCore.Address
34
import struct NetworkingCore.OrderItem
45
import struct NetworkingCore.OrderRefundCondensed
56
import struct NetworkingCore.MetaData
67
import enum NetworkingCore.OrderStatusEnum
78
import struct NetworkingCore.Order
89

9-
public struct POSOrder: Equatable, Hashable {
10+
public struct POSOrder: Equatable, Hashable, GeneratedCopiable {
1011
public let id: Int64
1112
public let number: String
1213
public let dateCreated: Date
@@ -34,8 +35,8 @@ public struct POSOrder: Equatable, Hashable {
3435
paymentMethodTitle: String,
3536
lineItems: [POSOrderItem] = [],
3637
refunds: [POSOrderRefund] = [],
37-
formattedTotalTax: String,
3838
formattedDiscountTotal: String?,
39+
formattedTotalTax: String,
3940
formattedPaymentTotal: String,
4041
formattedNetAmount: String? = nil) {
4142
self.id = id
@@ -49,8 +50,8 @@ public struct POSOrder: Equatable, Hashable {
4950
self.paymentMethodTitle = paymentMethodTitle
5051
self.lineItems = lineItems
5152
self.refunds = refunds
52-
self.formattedTotalTax = formattedTotalTax
5353
self.formattedDiscountTotal = formattedDiscountTotal
54+
self.formattedTotalTax = formattedTotalTax
5455
self.formattedPaymentTotal = formattedPaymentTotal
5556
self.formattedNetAmount = formattedNetAmount
5657
}

Modules/Sources/Yosemite/PointOfSale/OrderList/POSOrderMapper.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ struct POSOrderMapper {
4545
paymentMethodTitle: order.paymentMethodTitle,
4646
lineItems: posLineItems,
4747
refunds: posRefunds,
48-
formattedTotalTax: currencyFormatter.formatAmount(order.totalTax, with: order.currency) ?? "",
4948
formattedDiscountTotal: formattedDiscountTotal,
49+
formattedTotalTax: currencyFormatter.formatAmount(order.totalTax, with: order.currency) ?? "",
5050
formattedPaymentTotal: order.paymentTotal(currencyFormatter: currencyFormatter),
5151
formattedNetAmount: formattedNetAmount
5252
)

WooCommerce/Classes/POS/Utils/PreviewHelpers.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,8 +274,8 @@ struct POSPreviewHelpers {
274274
)
275275
],
276276
refunds: [],
277-
formattedTotalTax: "$3.76",
278277
formattedDiscountTotal: "$0.00",
278+
formattedTotalTax: "$3.76",
279279
formattedPaymentTotal: "$45.75",
280280
formattedNetAmount: nil
281281
)
@@ -318,8 +318,8 @@ final class PointOfSalePreviewOrderListController: PointOfSaleSearchingOrderList
318318
)
319319
],
320320
refunds: [],
321-
formattedTotalTax: "$4.75",
322321
formattedDiscountTotal: "-$5.24",
322+
formattedTotalTax: "$4.75",
323323
formattedPaymentTotal: "$45.75",
324324
formattedNetAmount: nil
325325
),
@@ -363,8 +363,8 @@ final class PointOfSalePreviewOrderListController: PointOfSaleSearchingOrderList
363363
reason: "Customer requested partial refund"
364364
)
365365
],
366-
formattedTotalTax: "$8.95",
367366
formattedDiscountTotal: "-$15.00",
367+
formattedTotalTax: "$8.95",
368368
formattedPaymentTotal: "$89.50",
369369
formattedNetAmount: "$69.51"
370370
)

WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderListControllerTests.swift

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -325,23 +325,7 @@ final class PointOfSaleOrderListControllerTests {
325325

326326
// Setup updated order
327327
let orderToUpdate = initialOrders[0]
328-
let updatedOrder = POSOrder(
329-
id: orderToUpdate.id,
330-
number: orderToUpdate.number,
331-
dateCreated: orderToUpdate.dateCreated,
332-
status: orderToUpdate.status,
333-
formattedTotal: orderToUpdate.formattedTotal,
334-
formattedSubtotal: orderToUpdate.formattedSubtotal,
335-
customerEmail: "[email protected]", // Updated email
336-
paymentMethodID: orderToUpdate.paymentMethodID,
337-
paymentMethodTitle: orderToUpdate.paymentMethodTitle,
338-
lineItems: orderToUpdate.lineItems,
339-
refunds: orderToUpdate.refunds,
340-
formattedTotalTax: orderToUpdate.formattedTotalTax,
341-
formattedDiscountTotal: orderToUpdate.formattedDiscountTotal,
342-
formattedPaymentTotal: orderToUpdate.formattedPaymentTotal,
343-
formattedNetAmount: orderToUpdate.formattedNetAmount
344-
)
328+
let updatedOrder = orderToUpdate.copy(customerEmail: .some("[email protected]"))
345329
orderListService.loadOrderResult = updatedOrder
346330

347331
// When
@@ -371,23 +355,7 @@ final class PointOfSaleOrderListControllerTests {
371355
#expect(sut.selectedOrder?.id == orderToUpdate.id)
372356

373357
// Setup updated order
374-
let updatedOrder = POSOrder(
375-
id: orderToUpdate.id,
376-
number: orderToUpdate.number,
377-
dateCreated: orderToUpdate.dateCreated,
378-
status: orderToUpdate.status,
379-
formattedTotal: orderToUpdate.formattedTotal,
380-
formattedSubtotal: orderToUpdate.formattedSubtotal,
381-
customerEmail: "[email protected]",
382-
paymentMethodID: orderToUpdate.paymentMethodID,
383-
paymentMethodTitle: orderToUpdate.paymentMethodTitle,
384-
lineItems: orderToUpdate.lineItems,
385-
refunds: orderToUpdate.refunds,
386-
formattedTotalTax: orderToUpdate.formattedTotalTax,
387-
formattedDiscountTotal: orderToUpdate.formattedDiscountTotal,
388-
formattedPaymentTotal: orderToUpdate.formattedPaymentTotal,
389-
formattedNetAmount: orderToUpdate.formattedNetAmount
390-
)
358+
let updatedOrder = orderToUpdate.copy(customerEmail: .some("[email protected]"))
391359
orderListService.loadOrderResult = updatedOrder
392360

393361
// When

WooCommerce/WooCommerceTests/POS/Mocks/MockPointOfSaleOrderListService.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ extension MockPointOfSaleOrderListService {
172172
)
173173
],
174174
refunds: [],
175-
formattedTotalTax: "$0.00",
176175
formattedDiscountTotal: nil,
176+
formattedTotalTax: "$0.00",
177177
formattedPaymentTotal: "$25.99",
178178
formattedNetAmount: nil
179179
)
@@ -200,8 +200,8 @@ extension MockPointOfSaleOrderListService {
200200
)
201201
],
202202
refunds: [],
203-
formattedTotalTax: "$0.00",
204203
formattedDiscountTotal: nil,
204+
formattedTotalTax: "$0.00",
205205
formattedPaymentTotal: "$15.50",
206206
formattedNetAmount: nil
207207
)
@@ -243,8 +243,8 @@ extension MockPointOfSaleOrderListService {
243243
)
244244
],
245245
refunds: [],
246-
formattedTotalTax: "$0.00",
247246
formattedDiscountTotal: nil,
247+
formattedTotalTax: "$0.00",
248248
formattedPaymentTotal: "$42.75",
249249
formattedNetAmount: nil
250250
)
@@ -273,8 +273,8 @@ extension MockPointOfSaleOrderListService {
273273
refunds: [
274274
POSOrderRefund(refundID: 1001, formattedTotal: "-$12.00", reason: "Customer request")
275275
],
276-
formattedTotalTax: "$0.00",
277276
formattedDiscountTotal: nil,
277+
formattedTotalTax: "$0.00",
278278
formattedPaymentTotal: "$12.00",
279279
formattedNetAmount: "$0.00"
280280
)
@@ -307,8 +307,8 @@ extension MockPointOfSaleOrderListService {
307307
)
308308
],
309309
refunds: [],
310-
formattedTotalTax: "$0.00",
311310
formattedDiscountTotal: nil,
311+
formattedTotalTax: "$0.00",
312312
formattedPaymentTotal: "$18.50",
313313
formattedNetAmount: nil
314314
)

WooCommerce/WooCommerceTests/POS/Models/POSOrderListStateTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,12 @@ private extension POSOrderListStateTests {
125125
POSOrder(id: 1, number: "1001", dateCreated: Date(), status: .completed,
126126
formattedTotal: "$10.00", formattedSubtotal: "$10.00", customerEmail: "[email protected]",
127127
paymentMethodID: "stripe", paymentMethodTitle: "Credit Card", lineItems: [],
128-
refunds: [], formattedTotalTax: "$0.00", formattedDiscountTotal: nil,
128+
refunds: [], formattedDiscountTotal: nil, formattedTotalTax: "$0.00",
129129
formattedPaymentTotal: "$10.00", formattedNetAmount: nil),
130130
POSOrder(id: 2, number: "1002", dateCreated: Date(), status: .completed,
131131
formattedTotal: "$20.00", formattedSubtotal: "$20.00", customerEmail: "[email protected]",
132132
paymentMethodID: "cash", paymentMethodTitle: "Cash", lineItems: [],
133-
refunds: [], formattedTotalTax: "$0.00", formattedDiscountTotal: nil,
133+
refunds: [], formattedDiscountTotal: nil, formattedTotalTax: "$0.00",
134134
formattedPaymentTotal: "$20.00", formattedNetAmount: nil)
135135
]
136136
}

WooCommerce/WooCommerceTests/POS/Models/PointOfSaleOrderListModelTests.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import enum NetworkingCore.OrderStatusEnum
66

77
final class PointOfSaleOrderListModelTests {
88
private let mockOrdersController = MockPointOfSaleOrderListController()
9-
private let mockReceiptController = MockPOSReceiptController()
9+
private let mockReceiptSender = MockPOSReceiptSender()
1010
private lazy var sut = PointOfSaleOrderListModel(
1111
ordersController: mockOrdersController,
12-
receiptController: mockReceiptController
12+
receiptSender: mockReceiptSender
1313
)
1414

1515
@Test func sendReceipt_when_successful_then_calls_receipt_controller_and_updates_order() async throws {
@@ -21,9 +21,9 @@ final class PointOfSaleOrderListModelTests {
2121
try await sut.sendReceipt(order: testOrder, email: testEmail)
2222

2323
// Then
24-
#expect(mockReceiptController.sendReceiptWasCalled == true)
25-
#expect(mockReceiptController.sendReceiptCalledWithOrderID == 123)
26-
#expect(mockReceiptController.sendReceiptCalledWithEmail == testEmail)
24+
#expect(mockReceiptSender.sendReceiptWasCalled == true)
25+
#expect(mockReceiptSender.sendReceiptCalledWithOrderID == 123)
26+
#expect(mockReceiptSender.sendReceiptCalledWithEmail == testEmail)
2727
#expect(mockOrdersController.updateOrderCalled == true)
2828
#expect(mockOrdersController.spyUpdateOrderID == 123)
2929
}
@@ -32,15 +32,15 @@ final class PointOfSaleOrderListModelTests {
3232
// Given
3333
let testOrder = makeTestOrder(id: 789, email: "[email protected]")
3434
let testEmail = "[email protected]"
35-
mockReceiptController.shouldThrowReceiptError = true
35+
mockReceiptSender.sendReceiptErrorToThrow = MockPOSReceiptSender.TestError.sendReceiptFailed
3636

3737
// When & Then
38-
await #expect(throws: MockPOSReceiptController.TestError.sendReceiptFailed) {
38+
await #expect(throws: MockPOSReceiptSender.TestError.sendReceiptFailed) {
3939
try await sut.sendReceipt(order: testOrder, email: testEmail)
4040
}
4141

4242
// Receipt controller should have been called
43-
#expect(mockReceiptController.sendReceiptWasCalled == true)
43+
#expect(mockReceiptSender.sendReceiptWasCalled == true)
4444

4545
// But order update should NOT have been called since receipt failed
4646
#expect(mockOrdersController.updateOrderCalled == false)
@@ -58,9 +58,9 @@ final class PointOfSaleOrderListModelTests {
5858
}
5959

6060
// Receipt should have succeeded before update failed
61-
#expect(mockReceiptController.sendReceiptWasCalled == true)
62-
#expect(mockReceiptController.sendReceiptCalledWithOrderID == 999)
63-
#expect(mockReceiptController.sendReceiptCalledWithEmail == testEmail)
61+
#expect(mockReceiptSender.sendReceiptWasCalled == true)
62+
#expect(mockReceiptSender.sendReceiptCalledWithOrderID == 999)
63+
#expect(mockReceiptSender.sendReceiptCalledWithEmail == testEmail)
6464
#expect(mockOrdersController.updateOrderCalled == true)
6565
#expect(mockOrdersController.spyUpdateOrderID == 999)
6666
}
@@ -78,8 +78,8 @@ final class PointOfSaleOrderListModelTests {
7878
paymentMethodTitle: "Test Payment",
7979
lineItems: [],
8080
refunds: [],
81-
formattedTotalTax: "$0.00",
8281
formattedDiscountTotal: nil,
82+
formattedTotalTax: "$0.00",
8383
formattedPaymentTotal: "$10.00",
8484
formattedNetAmount: nil
8585
)

0 commit comments

Comments
 (0)