github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/command/plugin/shared/handle_error_test.go (about)

     1  package shared_test
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  
     7  	"code.cloudfoundry.org/cli/actor/pluginaction"
     8  	"code.cloudfoundry.org/cli/api/plugin/pluginerror"
     9  	. "code.cloudfoundry.org/cli/command/plugin/shared"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/ginkgo/extensions/table"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("HandleError", func() {
    16  	err := errors.New("some-error")
    17  	jsonErr := new(json.SyntaxError)
    18  	genericErr := errors.New("some-generic-error")
    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("json.SyntaxError -> JSONSyntaxError",
    27  			jsonErr,
    28  			JSONSyntaxError{Err: jsonErr},
    29  		),
    30  
    31  		Entry("pluginerror.RawHTTPStatusError -> DownloadPluginHTTPError",
    32  			pluginerror.RawHTTPStatusError{Status: "some status"},
    33  			DownloadPluginHTTPError{Message: "some status"},
    34  		),
    35  		Entry("pluginerror.SSLValidationHostnameError -> DownloadPluginHTTPError",
    36  			pluginerror.SSLValidationHostnameError{Message: "some message"},
    37  			DownloadPluginHTTPError{Message: "Hostname does not match SSL Certificate (some message)"},
    38  		),
    39  		Entry("pluginerror.UnverifiedServerError -> DownloadPluginHTTPError",
    40  			pluginerror.UnverifiedServerError{URL: "some URL"},
    41  			DownloadPluginHTTPError{Message: "x509: certificate signed by unknown authority"},
    42  		),
    43  
    44  		Entry("pluginaction.AddPluginRepositoryError -> AddPluginRepositoryError",
    45  			pluginaction.AddPluginRepositoryError{Name: "some-repo", URL: "some-URL", Message: "404"},
    46  			AddPluginRepositoryError{Name: "some-repo", URL: "some-URL", Message: "404"}),
    47  		Entry("pluginaction.GettingPluginRepositoryError -> GettingPluginRepositoryError",
    48  			pluginaction.GettingPluginRepositoryError{Name: "some-repo", Message: "404"},
    49  			GettingPluginRepositoryError{Name: "some-repo", Message: "404"}),
    50  		Entry("pluginaction.NoCompatibleBinaryError -> NoCompatibleBinaryError",
    51  			pluginaction.NoCompatibleBinaryError{},
    52  			NoCompatibleBinaryError{}),
    53  		Entry("pluginaction.PluginCommandConflictError -> PluginCommandConflictError",
    54  			pluginaction.PluginCommandsConflictError{
    55  				PluginName:     "some-plugin",
    56  				PluginVersion:  "1.1.1",
    57  				CommandNames:   []string{"some-command", "some-other-command"},
    58  				CommandAliases: []string{"sc", "soc"},
    59  			},
    60  			PluginCommandsConflictError{
    61  				PluginName:     "some-plugin",
    62  				PluginVersion:  "1.1.1",
    63  				CommandNames:   []string{"some-command", "some-other-command"},
    64  				CommandAliases: []string{"sc", "soc"},
    65  			}),
    66  		Entry("pluginaction.PluginInvalidError -> PluginInvalidError",
    67  			pluginaction.PluginInvalidError{},
    68  			PluginInvalidError{}),
    69  		Entry("pluginaction.PluginInvalidError -> PluginInvalidError",
    70  			pluginaction.PluginInvalidError{Err: genericErr},
    71  			PluginInvalidError{Err: genericErr}),
    72  		Entry("pluginaction.PluginNotFoundError -> PluginNotFoundError",
    73  			pluginaction.PluginNotFoundError{PluginName: "some-plugin"},
    74  			PluginNotFoundError{PluginName: "some-plugin"}),
    75  		Entry("pluginaction.RepositoryNameTakenError -> RepositoryNameTakenError",
    76  			pluginaction.RepositoryNameTakenError{Name: "some-repo"},
    77  			RepositoryNameTakenError{Name: "some-repo"}),
    78  		Entry("pluginaction.RepositoryNotRegisteredError -> RepositoryNotRegisteredError",
    79  			pluginaction.RepositoryNotRegisteredError{Name: "some-repo"},
    80  			RepositoryNotRegisteredError{Name: "some-repo"}),
    81  
    82  		Entry("default case -> original error",
    83  			err,
    84  			err),
    85  	)
    86  
    87  	It("returns nil for a common.PluginInstallationCancelled error", func() {
    88  		err := HandleError(PluginInstallationCancelled{})
    89  		Expect(err).To(BeNil())
    90  	})
    91  
    92  	It("returns nil for a nil error", func() {
    93  		nilErr := HandleError(nil)
    94  		Expect(nilErr).To(BeNil())
    95  	})
    96  })