github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/command/v3/shared/handle_error_test.go (about) 1 package shared_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/sharedaction" 7 "code.cloudfoundry.org/cli/actor/v3action" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 9 "code.cloudfoundry.org/cli/command" 10 . "code.cloudfoundry.org/cli/command/v3/shared" 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/ginkgo/extensions/table" 13 . "github.com/onsi/gomega" 14 ) 15 16 var _ = Describe("HandleError", func() { 17 err := errors.New("some-error") 18 unprocessableEntityError := ccerror.UnprocessableEntityError{Message: "another message"} 19 20 DescribeTable("error translations", 21 func(passedInErr error, expectedErr error) { 22 actualErr := HandleError(passedInErr) 23 Expect(actualErr).To(MatchError(expectedErr)) 24 }, 25 26 Entry("ccerror.RequestError -> APIRequestError", 27 ccerror.RequestError{Err: err}, 28 command.APIRequestError{Err: err}), 29 30 Entry("ccerror.UnverifiedServerError -> InvalidSSLCertError", 31 ccerror.UnverifiedServerError{URL: "some-url"}, 32 command.InvalidSSLCertError{API: "some-url"}), 33 34 Entry("ccerror.SSLValidationHostnameError -> SSLCertErrorError", 35 ccerror.SSLValidationHostnameError{Message: "some-message"}, 36 command.SSLCertErrorError{Message: "some-message"}), 37 38 Entry("ccerror.UnprocessableEntityError with droplet message -> RunTaskError", 39 ccerror.UnprocessableEntityError{Message: "The request is semantically invalid: Task must have a droplet. Specify droplet or assign current droplet to app."}, 40 RunTaskError{Message: "App is not staged."}), 41 42 // This changed in CF254 43 Entry("ccerror.UnprocessableEntityError with droplet message -> RunTaskError", 44 ccerror.UnprocessableEntityError{Message: "Task must have a droplet. Specify droplet or assign current droplet to app."}, 45 RunTaskError{Message: "App is not staged."}), 46 47 Entry("ccerror.UnprocessableEntityError without droplet message -> original error", 48 unprocessableEntityError, 49 unprocessableEntityError), 50 51 Entry("ccerror.APINotFoundError -> APINotFoundError", 52 ccerror.APINotFoundError{URL: "some-url"}, 53 command.APINotFoundError{URL: "some-url"}), 54 55 Entry("v3action.ApplicationNotFoundError -> ApplicationNotFoundError", 56 v3action.ApplicationNotFoundError{Name: "some-app"}, 57 command.ApplicationNotFoundError{Name: "some-app"}), 58 59 Entry("v3action.TaskWorkersUnavailableError -> RunTaskError", 60 v3action.TaskWorkersUnavailableError{Message: "fooo: Banana Pants"}, 61 RunTaskError{Message: "Task workers are unavailable."}), 62 63 Entry("sharedaction.NotLoggedInError -> NotLoggedInError", 64 sharedaction.NotLoggedInError{BinaryName: "faceman"}, 65 command.NotLoggedInError{BinaryName: "faceman"}), 66 67 Entry("sharedaction.NoOrganizationTargetedError -> NoOrganizationTargetedError", 68 sharedaction.NoOrganizationTargetedError{BinaryName: "faceman"}, 69 command.NoOrganizationTargetedError{BinaryName: "faceman"}), 70 71 Entry("sharedaction.NoSpaceTargetedError -> NoSpaceTargetedError", 72 sharedaction.NoSpaceTargetedError{BinaryName: "faceman"}, 73 command.NoSpaceTargetedError{BinaryName: "faceman"}), 74 75 Entry("v3action.OrganizationNotFoundError -> OrgNotFoundError", 76 v3action.OrganizationNotFoundError{Name: "some-org"}, 77 OrganizationNotFoundError{Name: "some-org"}), 78 79 Entry("v3action.AssignDropletError -> AssignDropletError", 80 v3action.AssignDropletError{}, 81 AssignDropletError{}), 82 83 Entry("default case -> original error", 84 err, 85 err), 86 ) 87 })