Skip to content

Commit 04fab3b

Browse files
authored
Merge branch 'trunk' into task/WOOMOB-938-prevent-subs-products-from-order-flow
2 parents 866c91c + 772ab3f commit 04fab3b

File tree

63 files changed

+2740
-757
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2740
-757
lines changed

Modules/Package.resolved

Lines changed: 19 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Modules/Package.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ let package = Package(
7272
.package(url: "https://github.com/Alamofire/Alamofire", from: "5.2.0"),
7373
.package(url: "https://github.com/AliSoftware/OHHTTPStubs", from: "9.0.0"),
7474
.package(url: "https://github.com/apple/swift-algorithms.git", from: "1.2.0"),
75+
.package(url: "https://github.com/apple/swift-async-algorithms", exact: "1.0.4"),
7576
.package(url: "https://github.com/Automattic/AutomatticAbout-swift.git", from: "1.1.5"),
7677
.package(url: "https://github.com/Automattic/Automattic-Tracks-iOS.git", from: "3.5.2"),
7778
.package(url: "https://github.com/Automattic/Gridicons-iOS", revision: "c904cb73e26e86463a78e1335c6f4fd54a9e9223"),
@@ -381,6 +382,7 @@ enum XcodeSupport {
381382
.product(name: "Inject", package: "Inject"),
382383
.product(name: "KeychainAccess", package: "KeychainAccess"),
383384
.product(name: "Kingfisher", package: "Kingfisher"),
385+
.product(name: "AsyncAlgorithms", package: "swift-async-algorithms"),
384386
.product(name: "ScrollViewSectionKit", package: "ScrollViewSectionKit"),
385387
.product(name: "Shimmer", package: "SwiftUI-Shimmer"),
386388
.product(name: "StripeTerminal", package: "stripe-terminal-ios"),

Modules/Sources/Experiments/DefaultFeatureFlagService.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ public struct DefaultFeatureFlagService: FeatureFlagService {
103103
return true
104104
case .pointOfSaleBarcodeScanningi2:
105105
return buildConfig == .localDeveloper || buildConfig == .alpha
106+
case .orderAddressMapSearch:
107+
return buildConfig == .localDeveloper || buildConfig == .alpha
106108
default:
107109
return true
108110
}

Modules/Sources/Experiments/FeatureFlag.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,4 +210,8 @@ public enum FeatureFlag: Int {
210210
/// Enables the Point of Sale Barcode Scanner set up flows, as part of i2
211211
///
212212
case pointOfSaleBarcodeScanningi2
213+
214+
/// Enables the CTA to search for an address in the map in order details > shipping address.
215+
///
216+
case orderAddressMapSearch
213217
}

Modules/Sources/Hardware/CardReader/CardReaderType.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ extension CardReaderType {
2929
case .wisepad3:
3030
return "WISEPAD_3"
3131
case .tapToPay:
32-
return "COTS_DEVICE"
32+
return "TAP_TO_PAY_DEVICE"
3333
default:
3434
return "UNKNOWN"
3535
}

Modules/Sources/NetworkingCore/Remote/OrdersRemote.swift

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,8 @@ public class OrdersRemote: Remote {
228228
params[Order.CodingKeys.createdVia.rawValue] = createdViaValue
229229
}
230230

231+
params[ParameterKeys.decimalPlaces] = OrdersRemote.Defaults.decimalPoints
232+
231233
return params
232234
}()
233235

@@ -253,7 +255,10 @@ public class OrdersRemote: Remote {
253255
///
254256
public func updateOrder(from siteID: Int64, orderID: Int64, statusKey: OrderStatusEnum, completion: @escaping (Order?, Error?) -> Void) {
255257
let path = "\(Constants.ordersPath)/" + String(orderID)
256-
let parameters = [ParameterKeys.statusKey: statusKey.rawValue]
258+
let parameters = [
259+
ParameterKeys.statusKey: statusKey.rawValue,
260+
ParameterKeys.decimalPlaces: OrdersRemote.Defaults.decimalPoints
261+
]
257262
let mapper = OrderMapper(siteID: siteID)
258263

259264
let request = JetpackRequest(wooApiVersion: .mark3,
@@ -328,6 +333,9 @@ public class OrdersRemote: Remote {
328333
value: cashPaymentChangeDueAmount).toDictionary()]
329334
}
330335

336+
// Add decimal places parameter for better precision
337+
params[ParameterKeys.decimalPlaces] = OrdersRemote.Defaults.decimalPoints
338+
331339
return params
332340
}()
333341

@@ -449,8 +457,9 @@ extension OrdersRemote: POSOrdersRemoteProtocol {
449457
//
450458
public extension OrdersRemote {
451459
enum Defaults {
452-
public static let pageSize: Int = 25
453-
public static let pageNumber: Int = 1
460+
public static let pageSize: Int = 25
461+
public static let pageNumber: Int = 1
462+
public static let decimalPoints: String = "8"
454463
public static let statusAny: String = "any"
455464
}
456465

@@ -477,6 +486,7 @@ public extension OrdersRemote {
477486
static let customer = "customer"
478487
static let product = "product"
479488
static let createdVia = "created_via"
489+
static let decimalPlaces = "dp"
480490
}
481491

482492
enum ParameterValues {

Modules/Sources/UITestsFoundation/Screens/Orders/CustomerDetailsScreen.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,12 @@ public final class CustomerDetailsScreen: ScreenObject {
4040
@discardableResult
4141
public func enterCustomerDetails(name: String) throws -> UnifiedOrderScreen {
4242
billingFirstNameField.tap()
43-
billingFirstNameField.typeText(name)
43+
// `\n` was added after the first name input in order to dismiss the keyboard so that the address toggle is interactive in shorter screens.
44+
billingFirstNameField.typeText("\(name)\n")
45+
let tableView = app.tables.firstMatch
46+
tableView.swipeUp()
4447
addressToggleSet(to: "1")
48+
tableView.swipeUp()
4549
shippingFirstNameField.tap()
4650
shippingFirstNameField.typeText(name)
4751
doneButton.tap()

Modules/Tests/NetworkingTests/Remote/OrdersRemoteTests.swift

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,19 @@ final class OrdersRemoteTests: XCTestCase {
309309
wait(for: [expectation], timeout: Constants.expectationTimeout)
310310
}
311311

312+
func test_updateOrder_status_includes_decimal_places_parameter() throws {
313+
// Given
314+
let remote = OrdersRemote(network: network)
315+
316+
// When
317+
remote.updateOrder(from: sampleSiteID, orderID: sampleOrderID, statusKey: .pending) { (order, error) in }
318+
319+
// Then
320+
let request = try XCTUnwrap(network.requestsForResponseData.last as? JetpackRequest)
321+
let received = try XCTUnwrap(request.parameters["dp"] as? String)
322+
assertEqual(received, "8")
323+
}
324+
312325
func test_update_order_properly_encodes_shipping_lines_for_removal_from_order() throws {
313326
// Given
314327
let remote = OrdersRemote(network: network)
@@ -517,6 +530,20 @@ final class OrdersRemoteTests: XCTestCase {
517530
XCTAssertNil(request.parameters["meta_data"])
518531
}
519532

533+
func test_updateOrder_with_fields_includes_decimal_places_parameter() throws {
534+
// Given
535+
let remote = OrdersRemote(network: network)
536+
let order = Order.fake()
537+
538+
// When
539+
remote.updateOrder(from: sampleSiteID, order: order, giftCard: nil, fields: [.customerNote]) { result in }
540+
541+
// Then
542+
let request = try XCTUnwrap(network.requestsForResponseData.last as? JetpackRequest)
543+
let received = try XCTUnwrap(request.parameters["dp"] as? String)
544+
assertEqual(received, "8")
545+
}
546+
520547
// MARK: - Load Order Notes Tests
521548

522549
/// Verifies that loadOrderNotes properly parses the `order-notes` sample response.
@@ -806,6 +833,20 @@ final class OrdersRemoteTests: XCTestCase {
806833
XCTAssertNil(request.parameters["created_via"])
807834
}
808835

836+
func test_createOrder_includes_decimal_places_parameter() throws {
837+
// Given
838+
let remote = OrdersRemote(network: network)
839+
let order = Order.fake()
840+
841+
// When
842+
remote.createOrder(siteID: 123, order: order, giftCard: nil, fields: []) { result in }
843+
844+
// Then
845+
let request = try XCTUnwrap(network.requestsForResponseData.last as? JetpackRequest)
846+
let received = try XCTUnwrap(request.parameters["dp"] as? String)
847+
assertEqual(received, "8")
848+
}
849+
809850
// MARK: - Delete order tests
810851

811852
func test_delete_order_properly_returns_parsed_order() throws {

Modules/Tests/YosemiteTests/Stores/OrderStoreTests.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1269,6 +1269,7 @@ final class OrderStoreTests: XCTestCase {
12691269
"currency",
12701270
"customer_id",
12711271
"customer_note",
1272+
"dp",
12721273
"fee_lines",
12731274
"line_items",
12741275
"meta_data",
@@ -1297,6 +1298,7 @@ final class OrderStoreTests: XCTestCase {
12971298
"currency",
12981299
"customer_id",
12991300
"customer_note",
1301+
"dp",
13001302
"fee_lines",
13011303
"gift_cards",
13021304
"line_items",
@@ -1359,7 +1361,8 @@ final class OrderStoreTests: XCTestCase {
13591361
let expectedKeys = [
13601362
"gift_cards"
13611363
]
1362-
assertEqual(expectedKeys, receivedKeys)
1364+
// Updating an order will also contain `dp` (decimal point), but in this case we're only interested in `gift_cards`
1365+
XCTAssertTrue(receivedKeys.contains(expectedKeys))
13631366
}
13641367

13651368
func test_update_order_with_gift_card_returns_notApplied_error_when_error_response_does_not_include_gift_card() throws {

RELEASE-NOTES.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33

44
23.0
55
-----
6+
- [*] Increased decimal sensitivity in order creation to mitigate tax rounding issues [https://github.com/woocommerce/woocommerce-ios/pull/15957]
7+
- [*] Fix initialization of authenticator to avoid crashes during login [https://github.com/woocommerce/woocommerce-ios/pull/15953]
68
- [*] Shipping Labels: Made HS tariff number field required in customs form for EU destinations [https://github.com/woocommerce/woocommerce-ios/pull/15946]
79
- [*] Order Creation: Prevent subscription products to be added to an order [https://github.com/woocommerce/woocommerce-ios/pull/15960]
10+
- [internal] Replace COTS_DEVICE reader model name with TAP_TO_PAY_DEVICE. [https://github.com/woocommerce/woocommerce-ios/pull/15961]
811

912
22.9
1013
-----

0 commit comments

Comments
 (0)