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  })