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