github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/command/v2/shared/handle_error_test.go (about) 1 package shared_test 2 3 import ( 4 "errors" 5 6 "github.com/liamawhite/cli-with-i18n/actor/actionerror" 7 "github.com/liamawhite/cli-with-i18n/actor/pushaction" 8 "github.com/liamawhite/cli-with-i18n/actor/sharedaction" 9 "github.com/liamawhite/cli-with-i18n/actor/v2action" 10 "github.com/liamawhite/cli-with-i18n/api/cloudcontroller/ccerror" 11 "github.com/liamawhite/cli-with-i18n/api/uaa" 12 "github.com/liamawhite/cli-with-i18n/command/translatableerror" 13 . "github.com/liamawhite/cli-with-i18n/command/v2/shared" 14 "github.com/liamawhite/cli-with-i18n/util/manifest" 15 . "github.com/onsi/ginkgo" 16 . "github.com/onsi/ginkgo/extensions/table" 17 . "github.com/onsi/gomega" 18 ) 19 20 var _ = Describe("HandleError", func() { 21 err := errors.New("some-error") 22 23 DescribeTable("error translations", 24 func(passedInErr error, expectedErr error) { 25 actualErr := HandleError(passedInErr) 26 Expect(actualErr).To(MatchError(expectedErr)) 27 }, 28 29 Entry("ccerror.RequestError -> APIRequestError", 30 ccerror.RequestError{Err: err}, 31 translatableerror.APIRequestError{Err: err}), 32 33 Entry("ccerror.UnverifiedServerError -> InvalidSSLCertError", 34 ccerror.UnverifiedServerError{URL: "some-url"}, 35 translatableerror.InvalidSSLCertError{API: "some-url"}), 36 37 Entry("ccerror.SSLValidationHostnameError -> SSLCertErrorError", 38 ccerror.SSLValidationHostnameError{Message: "some-message"}, 39 translatableerror.SSLCertError{Message: "some-message"}), 40 41 Entry("ccerror.APINotFoundError -> APINotFoundError", 42 ccerror.APINotFoundError{URL: "some-url"}, 43 translatableerror.APINotFoundError{URL: "some-url"}), 44 45 Entry("v2action.ApplicationNotFoundError -> ApplicationNotFoundError", 46 actionerror.ApplicationNotFoundError{Name: "some-app"}, 47 translatableerror.ApplicationNotFoundError{Name: "some-app"}), 48 49 Entry("v2action.SecurityGroupNotFoundError -> SecurityGroupNotFoundError", 50 v2action.SecurityGroupNotFoundError{Name: "some-security-group"}, 51 translatableerror.SecurityGroupNotFoundError{Name: "some-security-group"}), 52 53 Entry("v2action.ServiceInstanceNotFoundError -> ServiceInstanceNotFoundError", 54 v2action.ServiceInstanceNotFoundError{Name: "some-service-instance"}, 55 translatableerror.ServiceInstanceNotFoundError{Name: "some-service-instance"}), 56 57 Entry("v2action.StackNotFoundError -> StackNotFoundError", 58 v2action.StackNotFoundError{Name: "some-stack-name", GUID: "some-stack-guid"}, 59 translatableerror.StackNotFoundError{Name: "some-stack-name", GUID: "some-stack-guid"}), 60 61 Entry("ccerror.JobFailedError -> JobFailedError", 62 ccerror.JobFailedError{JobGUID: "some-job-guid", Message: "some-message"}, 63 translatableerror.JobFailedError{JobGUID: "some-job-guid", Message: "some-message"}), 64 65 Entry("ccerror.JobTimeoutError -> JobTimeoutError", 66 ccerror.JobTimeoutError{JobGUID: "some-job-guid"}, 67 translatableerror.JobTimeoutError{JobGUID: "some-job-guid"}), 68 69 Entry("v2action.OrganizationNotFoundError -> OrgNotFoundError", 70 v2action.OrganizationNotFoundError{Name: "some-org"}, 71 translatableerror.OrganizationNotFoundError{Name: "some-org"}), 72 73 Entry("v2action.SpaceNotFoundError -> SpaceNotFoundError", 74 v2action.SpaceNotFoundError{Name: "some-space"}, 75 translatableerror.SpaceNotFoundError{Name: "some-space"}), 76 77 Entry("sharedaction.NotLoggedInError -> NotLoggedInError", 78 sharedaction.NotLoggedInError{BinaryName: "faceman"}, 79 translatableerror.NotLoggedInError{BinaryName: "faceman"}), 80 81 Entry("sharedaction.NoOrganizationTargetedError -> NoOrganizationTargetedError", 82 sharedaction.NoOrganizationTargetedError{BinaryName: "faceman"}, 83 translatableerror.NoOrganizationTargetedError{BinaryName: "faceman"}), 84 85 Entry("sharedaction.NoSpaceTargetedError -> NoSpaceTargetedError", 86 sharedaction.NoSpaceTargetedError{BinaryName: "faceman"}, 87 translatableerror.NoSpaceTargetedError{BinaryName: "faceman"}), 88 89 Entry("v2action.HTTPHealthCheckInvalidError -> HTTPHealthCheckInvalidError", 90 actionerror.HTTPHealthCheckInvalidError{}, 91 translatableerror.HTTPHealthCheckInvalidError{}, 92 ), 93 94 Entry("v2action.RouteInDifferentSpaceError -> RouteInDifferentSpaceError", 95 v2action.RouteInDifferentSpaceError{Route: "some-route"}, 96 translatableerror.RouteInDifferentSpaceError{Route: "some-route"}, 97 ), 98 99 Entry("v2action.FileChangedError -> FileChangedError", 100 v2action.FileChangedError{Filename: "some-filename"}, 101 translatableerror.FileChangedError{Filename: "some-filename"}, 102 ), 103 104 Entry("v2action.EmptyDirectoryError -> EmptyDirectoryError", 105 sharedaction.EmptyDirectoryError{Path: "some-filename"}, 106 translatableerror.EmptyDirectoryError{Path: "some-filename"}, 107 ), 108 109 Entry("v2action.DomainNotFoundError -> DomainNotFoundError", 110 v2action.DomainNotFoundError{Name: "some-domain-name", GUID: "some-domain-guid"}, 111 translatableerror.DomainNotFoundError{Name: "some-domain-name", GUID: "some-domain-guid"}, 112 ), 113 114 Entry("actionerror.NoMatchingDomainError -> NoMatchingDomainError", 115 actionerror.NoMatchingDomainError{Route: "some-route.com"}, 116 translatableerror.NoMatchingDomainError{Route: "some-route.com"}, 117 ), 118 119 Entry("uaa.BadCredentialsError -> BadCredentialsError", 120 uaa.BadCredentialsError{}, 121 translatableerror.BadCredentialsError{}, 122 ), 123 124 Entry("uaa.InvalidAuthTokenError -> InvalidRefreshTokenError", 125 uaa.InvalidAuthTokenError{}, 126 translatableerror.InvalidRefreshTokenError{}, 127 ), 128 129 Entry("pushaction.AppNotFoundInManifestError -> AppNotFoundInManifestError", 130 pushaction.AppNotFoundInManifestError{Name: "some-app"}, 131 translatableerror.AppNotFoundInManifestError{Name: "some-app"}, 132 ), 133 134 Entry("pushaction.NoDomainsFoundError -> NoDomainsFoundError", 135 pushaction.NoDomainsFoundError{OrganizationGUID: "some-guid"}, 136 translatableerror.NoDomainsFoundError{}, 137 ), 138 139 Entry("actionerror.InvalidHTTPRouteSettings -> PortNotAllowedWithHTTPDomainError", 140 actionerror.InvalidHTTPRouteSettings{Domain: "some-domain"}, 141 translatableerror.PortNotAllowedWithHTTPDomainError{Domain: "some-domain"}, 142 ), 143 144 Entry("pushaction.MissingNameError -> RequiredNameForPushError", 145 pushaction.MissingNameError{}, 146 translatableerror.RequiredNameForPushError{}, 147 ), 148 149 Entry("pushaction.UploadFailedError -> UploadFailedError", 150 pushaction.UploadFailedError{Err: pushaction.NoDomainsFoundError{}}, 151 translatableerror.UploadFailedError{Err: translatableerror.NoDomainsFoundError{}}, 152 ), 153 154 Entry("pushaction.NonexistentAppPathError -> FileNotFoundError", 155 pushaction.NonexistentAppPathError{Path: "some-path"}, 156 translatableerror.FileNotFoundError{Path: "some-path"}, 157 ), 158 159 Entry("pushaction.CommandLineOptionsWithMultipleAppsError -> CommandLineArgsWithMultipleAppsError", 160 pushaction.CommandLineOptionsWithMultipleAppsError{}, 161 translatableerror.CommandLineArgsWithMultipleAppsError{}, 162 ), 163 164 Entry("manifest.ManifestCreationError -> ManifestCreationError", 165 manifest.ManifestCreationError{Err: errors.New("some-error")}, 166 translatableerror.ManifestCreationError{Err: errors.New("some-error")}, 167 ), 168 169 Entry("default case -> original error", 170 err, 171 err), 172 ) 173 174 It("returns nil for a nil error", func() { 175 nilErr := HandleError(nil) 176 Expect(nilErr).To(BeNil()) 177 }) 178 })