Skip to content

Commit af21c7c

Browse files
committed
Add PackageCreationError to pass specific errors to UI layer
1 parent cba587c commit af21c7c

File tree

4 files changed

+96
-3
lines changed

4 files changed

+96
-3
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import Yosemite
2+
3+
extension PackageCreationError {
4+
var alertTitle: String {
5+
switch self {
6+
case .duplicatePackageNames, .duplicateNamesByCarrier, .duplicateCustomPackageNames, .duplicatePredefinedPackageNames:
7+
return NSLocalizedString("Invalid Package Name",
8+
comment: "The title of the alert when there is an error with the package name")
9+
case .unknown:
10+
return NSLocalizedString("Cannot add package",
11+
comment: "The title of the alert when there is a generic error adding the package")
12+
}
13+
}
14+
}
15+
16+
extension PackageCreationError: LocalizedError {
17+
public var errorDescription: String? {
18+
switch self {
19+
case .duplicatePackageNames, .duplicateCustomPackageNames:
20+
return NSLocalizedString("The new custom package name is not unique.",
21+
comment: "The message of the alert when another custom package has the same name")
22+
case .duplicateNamesByCarrier, .duplicatePredefinedPackageNames:
23+
return NSLocalizedString("The new service package name is not unique.",
24+
comment: "The message of the alert when another service package has the same name")
25+
case .unknown:
26+
return NSLocalizedString("Unexpected error", comment: "The message of the alert when there is an unexpected error adding the package")
27+
}
28+
}
29+
}

WooCommerce/WooCommerce.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -970,6 +970,7 @@
970970
CC4D1D8625E6CDDE00B6E4E7 /* RenameAttributesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4D1D8525E6CDDE00B6E4E7 /* RenameAttributesViewModel.swift */; };
971971
CC4D1E7925EE415D00B6E4E7 /* RenameAttributesViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4D1E7825EE415D00B6E4E7 /* RenameAttributesViewModelTests.swift */; };
972972
CC593A6726EA116300EF0E04 /* ShippingLabelAddNewPackageViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC593A6626EA116300EF0E04 /* ShippingLabelAddNewPackageViewModelTests.swift */; };
973+
CC593A6B26EA640800EF0E04 /* PackageCreationError+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC593A6A26EA640800EF0E04 /* PackageCreationError+UI.swift */; };
973974
CC69236226010946002FB669 /* LoginProloguePages.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC69236126010946002FB669 /* LoginProloguePages.swift */; };
974975
CC6923AC26010D8D002FB669 /* LoginProloguePageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC6923AB26010D8D002FB669 /* LoginProloguePageViewController.swift */; };
975976
CC8413E423F5C48E00EFC277 /* stop.sh in Resources */ = {isa = PBXBuildFile; fileRef = CCFC011123E9E40B00157A78 /* stop.sh */; };
@@ -2400,6 +2401,7 @@
24002401
CC4D1D8525E6CDDE00B6E4E7 /* RenameAttributesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenameAttributesViewModel.swift; sourceTree = "<group>"; };
24012402
CC4D1E7825EE415D00B6E4E7 /* RenameAttributesViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RenameAttributesViewModelTests.swift; sourceTree = "<group>"; };
24022403
CC593A6626EA116300EF0E04 /* ShippingLabelAddNewPackageViewModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShippingLabelAddNewPackageViewModelTests.swift; sourceTree = "<group>"; };
2404+
CC593A6A26EA640800EF0E04 /* PackageCreationError+UI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PackageCreationError+UI.swift"; sourceTree = "<group>"; };
24032405
CC69236126010946002FB669 /* LoginProloguePages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginProloguePages.swift; sourceTree = "<group>"; };
24042406
CC6923AB26010D8D002FB669 /* LoginProloguePageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginProloguePageViewController.swift; sourceTree = "<group>"; };
24052407
CCCC29DC25E5757C0046B96F /* RenameAttributesViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = RenameAttributesViewController.xib; sourceTree = "<group>"; };
@@ -5368,6 +5370,7 @@
53685370
CC254F3726C43B52005F3C82 /* ShippingLabelCustomPackageFormViewModel.swift */,
53695371
CCD2F51926D67BB50010E679 /* ShippingLabelServicePackageList.swift */,
53705372
CCD2F51B26D697860010E679 /* ShippingLabelServicePackageListViewModel.swift */,
5373+
CC593A6A26EA640800EF0E04 /* PackageCreationError+UI.swift */,
53715374
);
53725375
path = "Package Creation";
53735376
sourceTree = "<group>";
@@ -7771,6 +7774,7 @@
77717774
CC69236226010946002FB669 /* LoginProloguePages.swift in Sources */,
77727775
D817586422BDD81600289CFE /* OrderDetailsDataSource.swift in Sources */,
77737776
D8B4D5EE26C2C26C00F34E94 /* InPersonPaymentsStripeAcountReviewView.swift in Sources */,
7777+
CC593A6B26EA640800EF0E04 /* PackageCreationError+UI.swift in Sources */,
77747778
CE1F512920697F0100C6C810 /* UIFont+Helpers.swift in Sources */,
77757779
2687165A24D350C20042F6AE /* SurveyCoordinatingController.swift in Sources */,
77767780
02C88775245036D400E4470F /* FilterProductListViewModel.swift in Sources */,

Yosemite/Yosemite/Actions/ShippingLabelAction.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public enum ShippingLabelAction: Action {
4646
case createPackage(siteID: Int64,
4747
customPackage: ShippingLabelCustomPackage? = nil,
4848
predefinedOption: ShippingLabelPredefinedOption? = nil,
49-
completion: (Result<Bool, Error>) -> Void)
49+
completion: (Result<Bool, PackageCreationError>) -> Void)
5050

5151
/// Fetch list of shipping carriers and their rates
5252
///

Yosemite/Yosemite/Stores/ShippingLabelStore.swift

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,15 @@ private extension ShippingLabelStore {
171171
func createPackage(siteID: Int64,
172172
customPackage: ShippingLabelCustomPackage?,
173173
predefinedOption: ShippingLabelPredefinedOption?,
174-
completion: @escaping (Result<Bool, Error>) -> Void) {
175-
remote.createPackage(siteID: siteID, customPackage: customPackage, predefinedOption: predefinedOption, completion: completion)
174+
completion: @escaping (Result<Bool, PackageCreationError>) -> Void) {
175+
remote.createPackage(siteID: siteID, customPackage: customPackage, predefinedOption: predefinedOption) { result in
176+
switch result {
177+
case .success(let success):
178+
completion(.success(success))
179+
case .failure(let error):
180+
completion(.failure(PackageCreationError(error: error)))
181+
}
182+
}
176183
}
177184

178185
func loadCarriersAndRates(siteID: Int64,
@@ -477,3 +484,56 @@ public enum LabelPurchaseError: Error {
477484
/// Label purchase not complete after polling the backend
478485
case purchaseIncomplete
479486
}
487+
488+
/// An error that occurs while creating a package.
489+
///
490+
/// - duplicateCustomPackageNames: The new custom package names are not unique.
491+
/// - duplicatePackageNames: At least one of the new custom packages has the same name as existing packages.
492+
/// - duplicatePredefinedPackageNames: The new predefined package names are not unique.
493+
/// - duplicateNamesByCarrier: At least one of the new predefined packages has the same name as existing packages.
494+
/// - unknown: other error cases.
495+
///
496+
public enum PackageCreationError: Error, Equatable {
497+
case duplicateCustomPackageNames
498+
case duplicatePackageNames
499+
case duplicatePredefinedPackageNames
500+
case duplicateNamesByCarrier
501+
case unknown(error: AnyError)
502+
503+
init(error: Error) {
504+
guard let dotcomError = error as? DotcomError else {
505+
self = .unknown(error: error.toAnyError)
506+
return
507+
}
508+
switch dotcomError {
509+
case .unknown(let code, _):
510+
guard let errorCode = ErrorCode(rawValue: code) else {
511+
self = .unknown(error: dotcomError.toAnyError)
512+
return
513+
}
514+
self = errorCode.error
515+
default:
516+
self = .unknown(error: dotcomError.toAnyError)
517+
}
518+
}
519+
520+
private enum ErrorCode: String {
521+
case duplicateCustomPackageNames = "duplicate_custom_package_names"
522+
case duplicatePackageNames = "duplicate_custom_package_names_of_existing_packages"
523+
case duplicatePredefinedPackageNames = "duplicate_predefined_package_names"
524+
case duplicateNamesByCarrier = "duplicate_predefined_package_names_of_existing_packages"
525+
526+
var error: PackageCreationError {
527+
switch self {
528+
case .duplicateCustomPackageNames:
529+
return .duplicateCustomPackageNames
530+
case .duplicatePredefinedPackageNames:
531+
return .duplicatePredefinedPackageNames
532+
case .duplicatePackageNames:
533+
return .duplicatePackageNames
534+
case .duplicateNamesByCarrier:
535+
return .duplicateNamesByCarrier
536+
}
537+
}
538+
}
539+
}

0 commit comments

Comments
 (0)