github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/command/v3/shared/handle_error_test.go (about)

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