Skip to content

Commit af7ce8f

Browse files
committed
fix issue with returning the wrong result on sync
1 parent efff5ea commit af7ce8f

File tree

2 files changed

+42
-25
lines changed

2 files changed

+42
-25
lines changed

WooCommerce/Classes/POS/Controllers/PointOfSaleOrderController.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import protocol WooFoundation.Analytics
1616
enum SyncOrderState {
1717
case newOrder
1818
case orderUpdated
19+
case orderNotChanged
1920
}
2021

2122
enum SyncOrderStateError: Error {
@@ -68,9 +69,8 @@ protocol PointOfSaleOrderControllerProtocol {
6869
POSCartItem(item: $0.item, quantity: Decimal($0.quantity))
6970
}
7071

71-
guard !orderState.isSyncing,
72-
!posCartItems.matches(order: order) else {
73-
return .failure(SyncOrderStateError.syncFailure)
72+
guard !orderState.isSyncing, !posCartItems.matches(order: order) else {
73+
return .success(.orderNotChanged)
7474
}
7575

7676
orderState = .syncing

WooCommerce/WooCommerceTests/POS/Controllers/PointOfSaleOrderControllerTests.swift

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ struct PointOfSaleOrderControllerTests {
293293
if case .success(let state) = result {
294294
#expect(state == .newOrder)
295295
} else {
296-
#expect(Bool(false), "Expected success with new order result")
296+
#expect(Bool(false), "Expected success result with new order")
297297
}
298298
}
299299

@@ -304,7 +304,6 @@ struct PointOfSaleOrderControllerTests {
304304
receiptService: mockReceiptService)
305305
let fakeOrderItem = OrderItem.fake().copy(quantity: 1)
306306
let fakeOrder = Order.fake()
307-
let fakeCartItem = makeItem(orderItemsToMatch: [fakeOrderItem])
308307
mockOrderService.orderToReturn = fakeOrder
309308

310309
// When
@@ -318,34 +317,52 @@ struct PointOfSaleOrderControllerTests {
318317
if case .success(let state) = result {
319318
#expect(state == .orderUpdated)
320319
} else {
321-
#expect(Bool(false), "Expected success with order updated result")
320+
#expect(Bool(false), "Expected success result with order updated")
322321
}
323322
}
324323

325324
@available(iOS 17.0, *)
326-
@Test func syncOrder_when_cart_matching_order_returns_syncFailure() async throws {
327-
// Given
328-
let sut = PointOfSaleOrderController(orderService: mockOrderService,
329-
receiptService: mockReceiptService)
330-
let orderItem = OrderItem.fake().copy(quantity: 1)
331-
let fakeOrder = Order.fake().copy(items: [orderItem])
332-
let cartItem = makeItem(orderItemsToMatch: [orderItem])
333-
mockOrderService.orderToReturn = fakeOrder
325+
@Test func syncOrder_when_cart_matching_order_then_returns_orderNotChanged_result() async throws {
326+
// Given
327+
let sut = PointOfSaleOrderController(orderService: mockOrderService,
328+
receiptService: mockReceiptService)
329+
let orderItem = OrderItem.fake().copy(quantity: 1)
330+
let fakeOrder = Order.fake().copy(items: [orderItem])
331+
let cartItem = makeItem(orderItemsToMatch: [orderItem])
332+
mockOrderService.orderToReturn = fakeOrder
334333

335-
// When
336-
// 1. Initial order
337-
_ = await sut.syncOrder(for: [cartItem], retryHandler: {})
334+
// When
335+
// 1. Initial order
336+
_ = await sut.syncOrder(for: [cartItem], retryHandler: {})
338337

339-
// 2. Syncing existing order with same cart should fail
340-
let result = await sut.syncOrder(for: [cartItem], retryHandler: {})
338+
// 2. Syncing existing order with same cart should not update order
339+
let result = await sut.syncOrder(for: [cartItem], retryHandler: {})
341340

342-
// Then
343-
if case .failure(let error) = result {
344-
#expect(error as? SyncOrderStateError == .syncFailure)
345-
} else {
346-
#expect(Bool(false), "Expected error with syncFailure result")
347-
}
341+
// Then
342+
if case .success(let state) = result {
343+
#expect(state == .orderNotChanged)
344+
} else {
345+
#expect(Bool(false), "Expected success result with no changes to existing order")
346+
}
347+
}
348+
349+
@available(iOS 17.0, *)
350+
@Test func syncOrder_when_orderService_fails_then_returns_syncOrderState_failure() async throws {
351+
let sut = PointOfSaleOrderController(orderService: mockOrderService,
352+
receiptService: mockReceiptService)
353+
let cartItem = makeItem(quantity: 1)
354+
355+
// When
356+
mockOrderService.orderToReturn = nil
357+
let result = await sut.syncOrder(for: [cartItem], retryHandler: {})
358+
359+
// Then
360+
if case .failure(let error) = result {
361+
#expect(error as? SyncOrderStateError == .syncFailure)
362+
} else {
363+
#expect(Bool(false), "Expected sync failure but got \(result)")
348364
}
365+
}
349366

350367
struct AnalyticsTests {
351368
private let analytics: WooAnalytics

0 commit comments

Comments
 (0)