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