Skip to content

Commit 4a657b5

Browse files
authored
[Local catalog] Handle variation ids in dotcom errors (#16430)
2 parents 6abd2f2 + f5be5a3 commit 4a657b5

File tree

59 files changed

+177
-158
lines changed

Some content is hidden

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

59 files changed

+177
-158
lines changed

Modules/Sources/Fakes/NetworkingCore.generated.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ extension NetworkingCore.DotcomError {
4444
/// Returns a "ready to use" type filled with fake values.
4545
///
4646
public static func fake() -> NetworkingCore.DotcomError {
47-
.empty
47+
.empty()
4848
}
4949
}
5050
extension NetworkingCore.MetaContainer {

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/DevicesRemote.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public class DevicesRemote: Remote {
5656

5757
enqueue(request, mapper: mapper) { (success, error) in
5858
guard success == true else {
59-
completion(error ?? DotcomError.empty)
59+
completion(error ?? DotcomError.empty())
6060
return
6161
}
6262

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: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,79 +7,79 @@ public enum DotcomError: Error, Decodable, Equatable, GeneratedFakeable {
77

88
/// Non explicit reason
99
///
10-
case empty
10+
case empty(data: [String: AnyDecodable]? = nil)
1111

1212
/// Missing Token!
1313
///
14-
case unauthorized
14+
case unauthorized(data: [String: AnyDecodable]? = nil)
1515

1616
/// We're not properly authenticated
1717
///
18-
case invalidToken
18+
case invalidToken(data: [String: AnyDecodable]? = nil)
1919

2020
/// Remote Request Failed
2121
///
22-
case requestFailed
22+
case requestFailed(data: [String: AnyDecodable]? = nil)
2323

2424
/// No route was found matching the URL and request method
2525
///
26-
case noRestRoute
26+
case noRestRoute(data: [String: AnyDecodable]? = nil)
2727

2828
/// Jetpack is not connected
2929
///
3030
/// This can be caused by an `unknown_token` error from Jetpack
3131
/// or an `invalid_blog` error from WordPress.com Stats.
3232
///
33-
case jetpackNotConnected
33+
case jetpackNotConnected(data: [String: AnyDecodable]? = nil)
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/
4141
/// Note: when the cases get large, consider refactoring them into a separate error enum that conforms to a Dotcom error protocol
4242

4343
/// No permission to view site stats
44-
case noStatsPermission
44+
case noStatsPermission(data: [String: AnyDecodable]? = nil)
4545

4646
/// Jetpack site stats module disabled
47-
case statsModuleDisabled
47+
case statsModuleDisabled(data: [String: AnyDecodable]? = nil)
4848

4949
/// The requested resourced does not exist remotely
50-
case resourceDoesNotExist
50+
case resourceDoesNotExist(data: [String: AnyDecodable]? = nil)
5151

5252
/// Decodable Initializer.
5353
///
5454
public init(from decoder: Decoder) throws {
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:
61-
self = .invalidToken
62+
self = .invalidToken(data: data)
6263
case Constants.requestFailed:
63-
self = .requestFailed
64+
self = .requestFailed(data: data)
6465
case Constants.unauthorized where message == ErrorMessages.noStatsPermission:
65-
self = .noStatsPermission
66+
self = .noStatsPermission(data: data)
6667
case Constants.unauthorized:
67-
self = .unauthorized
68+
self = .unauthorized(data: data)
6869
case Constants.noRestRoute:
69-
self = .noRestRoute
70+
self = .noRestRoute(data: data)
7071
case Constants.invalidBlog where message == ErrorMessages.statsModuleDisabled:
71-
self = .statsModuleDisabled
72+
self = .statsModuleDisabled(data: data)
7273
case Constants.restTermInvalid where message == ErrorMessages.resourceDoesNotExist:
73-
self = .resourceDoesNotExist
74+
self = .resourceDoesNotExist(data: data)
7475
case Constants.unknownToken,
7576
Constants.invalidBlog where message == ErrorMessages.jetpackNotConnected:
76-
self = .jetpackNotConnected
77+
self = .jetpackNotConnected(data: data)
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$@",
@@ -150,14 +151,17 @@ extension DotcomError: CustomStringConvertible {
150151
//
151152
public func ==(lhs: DotcomError, rhs: DotcomError) -> Bool {
152153
switch (lhs, rhs) {
153-
case (.requestFailed, .requestFailed),
154+
case (.empty, .empty),
154155
(.unauthorized, .unauthorized),
156+
(.invalidToken, .invalidToken),
157+
(.requestFailed, .requestFailed),
155158
(.noRestRoute, .noRestRoute),
159+
(.jetpackNotConnected, .jetpackNotConnected),
156160
(.noStatsPermission, .noStatsPermission),
157161
(.statsModuleDisabled, .statsModuleDisabled),
158-
(.jetpackNotConnected, .jetpackNotConnected):
162+
(.resourceDoesNotExist, .resourceDoesNotExist):
159163
return true
160-
case let (.unknown(codeLHS, _), .unknown(codeRHS, _)):
164+
case let (.unknown(codeLHS, _, _), .unknown(codeRHS, _, _)):
161165
return codeLHS == codeRHS
162166
default:
163167
return false

Modules/Sources/NetworkingCore/Remote/NotificationsRemote.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public final class NotificationsRemote: Remote, NotificationsRemoteProtocol {
7474

7575
enqueue(request, mapper: mapper) { (success, error) in
7676
guard success == true else {
77-
completion(error ?? DotcomError.empty)
77+
completion(error ?? DotcomError.empty())
7878
return
7979
}
8080

@@ -99,7 +99,7 @@ public final class NotificationsRemote: Remote, NotificationsRemoteProtocol {
9999

100100
enqueue(request, mapper: mapper) { (success, error) in
101101
guard success == true else {
102-
completion(error ?? DotcomError.empty)
102+
completion(error ?? DotcomError.empty())
103103
return
104104
}
105105

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: 6 additions & 5 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
}
@@ -684,7 +685,7 @@ private extension ProductStore {
684685
feature: .productDetailsFromScannedTexts,
685686
responseFormat: .json)
686687
guard let jsonData = jsonString.data(using: .utf8) else {
687-
return completion(.failure(DotcomError.resourceDoesNotExist))
688+
return completion(.failure(DotcomError.resourceDoesNotExist()))
688689
}
689690
let details = try JSONDecoder().decode(ProductDetailsFromScannedTexts.self, from: jsonData)
690691
completion(.success(.init(name: details.name, description: details.description)))
@@ -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
}

0 commit comments

Comments
 (0)