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