Skip to content

Commit ffd81e1

Browse files
committed
Handle variation ID in DotcomError at POS checkout
- Add `data` to `DotcomError.unknown` case - Parse `data` and handle variation ID when present during POS checkout - Update other uses of it to use the new signature
1 parent 1fd6b6c commit ffd81e1

30 files changed

+78
-60
lines changed

Modules/Sources/Networking/Remote/AccountRemote.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ public enum CreateAccountError: Error, Equatable {
253253
/// Decodable Initializer.
254254
///
255255
init(dotcomError error: DotcomError) {
256-
if case let .unknown(code, message) = error {
256+
if case let .unknown(code, message, _) = error {
257257
switch code {
258258
case Constants.emailExists:
259259
self = .emailExists

Modules/Sources/Networking/Remote/WordPressThemeRemote.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public enum InstallThemeError: Error {
7171

7272
init?(_ error: Error) {
7373
guard let dotcomError = error as? DotcomError,
74-
case let .unknown(code, _) = dotcomError else {
74+
case let .unknown(code, _, _) = dotcomError else {
7575
return nil
7676
}
7777

Modules/Sources/NetworkingCore/Model/DotcomError.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public enum DotcomError: Error, Decodable, Equatable, GeneratedFakeable {
3434

3535
/// Unknown: Represents an unmapped remote error. Capisce?
3636
///
37-
case unknown(code: String, message: String?)
37+
case unknown(code: String, message: String?, data: [String: AnyDecodable]?)
3838

3939
/// Stats error cases - API documentation of possible errors:
4040
/// https://developer.wordpress.com/docs/api/1.1/get/sites/%24site/stats/
@@ -55,6 +55,7 @@ public enum DotcomError: Error, Decodable, Equatable, GeneratedFakeable {
5555
let container = try decoder.container(keyedBy: CodingKeys.self)
5656
let error = try container.decode(String.self, forKey: .error)
5757
let message = try container.decodeIfPresent(String.self, forKey: .message)
58+
let data = try container.decodeIfPresent([String: AnyDecodable].self, forKey: .data)
5859

5960
switch error {
6061
case Constants.invalidToken:
@@ -75,11 +76,10 @@ public enum DotcomError: Error, Decodable, Equatable, GeneratedFakeable {
7576
Constants.invalidBlog where message == ErrorMessages.jetpackNotConnected:
7677
self = .jetpackNotConnected
7778
default:
78-
self = .unknown(code: error, message: message)
79+
self = .unknown(code: error, message: message, data: data)
7980
}
8081
}
8182

82-
8383
/// Constants for Possible Error Identifiers
8484
///
8585
private enum Constants {
@@ -97,6 +97,7 @@ public enum DotcomError: Error, Decodable, Equatable, GeneratedFakeable {
9797
private enum CodingKeys: String, CodingKey {
9898
case error
9999
case message
100+
case data
100101
}
101102

102103
/// Possible Error Messages
@@ -134,7 +135,7 @@ extension DotcomError: CustomStringConvertible {
134135
return NSLocalizedString("Dotcom Resource does not exist", comment: "WordPress.com error thrown when a requested resource does not exist remotely.")
135136
case .jetpackNotConnected:
136137
return NSLocalizedString("Jetpack Not Connected", comment: "WordPress.com error thrown when Jetpack is not connected.")
137-
case .unknown(let code, let message):
138+
case .unknown(let code, let message, _):
138139
let theMessage = message ?? String()
139140
let messageFormat = NSLocalizedString(
140141
"Dotcom Error: [%1$@] %2$@",
@@ -157,7 +158,7 @@ public func ==(lhs: DotcomError, rhs: DotcomError) -> Bool {
157158
(.statsModuleDisabled, .statsModuleDisabled),
158159
(.jetpackNotConnected, .jetpackNotConnected):
159160
return true
160-
case let (.unknown(codeLHS, _), .unknown(codeRHS, _)):
161+
case let (.unknown(codeLHS, _, _), .unknown(codeRHS, _, _)):
161162
return codeLHS == codeRHS
162163
default:
163164
return false

Modules/Sources/Yosemite/Stores/CouponsError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public struct CouponsError: Error, LocalizedError {
88

99
public init?(underlyingError error: Error) {
1010
switch error {
11-
case DotcomError.unknown(Constants.invalidCouponCode, let message):
11+
case DotcomError.unknown(Constants.invalidCouponCode, let message, _):
1212
self.message = message ?? Localizations.defaultCouponsError
1313
self.underlyingError = error
1414
case let NetworkError.unacceptableStatusCode(_, response):

Modules/Sources/Yosemite/Stores/OrderStore.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ private extension OrderStore {
663663
})
664664
case .failure(let error):
665665
if let dotcomError = error as? DotcomError,
666-
case let .unknown(code, message) = dotcomError {
666+
case let .unknown(code, message, _) = dotcomError {
667667
switch code {
668668
case "woocommerce_rest_gift_card_cannot_apply":
669669
return onCompletion(.failure(GiftCardError.cannotApply(reason: message)))

Modules/Sources/Yosemite/Stores/PaymentsError.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public enum PaymentsError: Error, LocalizedError {
1919

2020
private static func unwrapError(error: Error) -> PaymentsErrorConvertible? {
2121
switch error {
22-
case let DotcomError.unknown(code, message):
22+
case let DotcomError.unknown(code, message, _):
2323
return PaymentsDotcomErrorDetails(code: code, message: message)
2424
case let NetworkError.unacceptableStatusCode(_, response):
2525
guard let response,

Modules/Sources/Yosemite/Stores/ProductStore.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -317,8 +317,9 @@ private extension ProductStore {
317317
shouldDeleteExistingProducts: shouldDeleteExistingProducts)
318318
let hasNextPage = products.count == pageSize
319319
return hasNextPage
320-
} catch let error as DotcomError where error == .unknown(code: "rest_invalid_param", message: "Invalid parameter(s): type") {
321-
if let productType,
320+
} catch let error as DotcomError {
321+
if case .unknown(code: "rest_invalid_param", message: "Invalid parameter(s): type", data: _) = error,
322+
let productType,
322323
ProductType.coreTypes.contains(productType) == false {
323324
return false
324325
}
@@ -1388,7 +1389,7 @@ public enum ProductUpdateError: Error, Equatable {
13881389
return
13891390
}
13901391
switch dotcomError {
1391-
case let .unknown(code, message):
1392+
case let .unknown(code, message, _):
13921393
guard let errorCode = ErrorCode(rawValue: code) else {
13931394
self = .unknown(error: dotcomError.toAnyError)
13941395
return
@@ -1476,7 +1477,7 @@ public enum ProductLoadError: Error, Equatable {
14761477
case unknown(error: AnyError)
14771478

14781479
init(underlyingError error: Error) {
1479-
guard case let DotcomError.unknown(code, _) = error else {
1480+
guard case let DotcomError.unknown(code, _, _) = error else {
14801481
self = .unknown(error: error.toAnyError)
14811482
return
14821483
}

Modules/Sources/Yosemite/Stores/ShippingLabelStore.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ public enum PackageCreationError: Error, Equatable {
492492
return
493493
}
494494
switch dotcomError {
495-
case .unknown(let code, _):
495+
case .unknown(let code, _, _):
496496
guard let errorCode = ErrorCode(rawValue: code) else {
497497
self = .unknown(error: dotcomError.toAnyError)
498498
return

Modules/Sources/Yosemite/Stores/SiteStore.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ public enum SiteCreationError: Error, Equatable {
210210
}
211211
case let remoteError as DotcomError:
212212
switch remoteError {
213-
case let .unknown(code, _):
213+
case let .unknown(code, _, _):
214214
switch code {
215215
case "blog_name_exists":
216216
self = .domainExists

Modules/Sources/Yosemite/Tools/CommonReaderConfigProvider.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ final public class CommonReaderConfigProvider: CommonReaderConfigProviding {
6666
private extension CardReaderConfigError {
6767
init?(error: Error) {
6868
switch error {
69-
case DotcomError.unknown(code: "store_address_is_incomplete", let message):
69+
case DotcomError.unknown(code: "store_address_is_incomplete", let message, _):
7070
self = .incompleteStoreAddress(adminUrl: URL(string: message ?? ""))
71-
case DotcomError.unknown(code: "postal_code_invalid", _):
71+
case DotcomError.unknown(code: "postal_code_invalid", _, _):
7272
self = .invalidPostalCode
7373
case NetworkError.unacceptableStatusCode(_, let responseData):
7474
guard let responseData,

0 commit comments

Comments
 (0)