github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+incompatible/command/translatableerror/translate_test.go (about) 1 package translatableerror_test 2 3 import ( 4 "bytes" 5 "errors" 6 "text/template" 7 8 . "code.cloudfoundry.org/cli/command/translatableerror" 9 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/ginkgo/extensions/table" 12 . "github.com/onsi/gomega" 13 ) 14 15 var _ = Describe("Translatable Errors", func() { 16 translateFunc := func(s string, vars ...interface{}) string { 17 formattedTemplate, err := template.New("test template").Parse(s) 18 Expect(err).ToNot(HaveOccurred()) 19 formattedTemplate.Option("missingkey=error") 20 21 var buffer bytes.Buffer 22 if len(vars) > 0 { 23 err = formattedTemplate.Execute(&buffer, vars[0]) 24 Expect(err).ToNot(HaveOccurred()) 25 26 return buffer.String() 27 } else { 28 return s 29 } 30 } 31 32 DescribeTable("translates error", 33 func(e error) { 34 err, ok := e.(TranslatableError) 35 Expect(ok).To(BeTrue()) 36 err.Translate(translateFunc) 37 }, 38 39 Entry("AddPluginRepositoryError", AddPluginRepositoryError{}), 40 Entry("APINotFoundError", APINotFoundError{}), 41 Entry("APIRequestError", APIRequestError{}), 42 Entry("ApplicationNotFoundError", ApplicationNotFoundError{}), 43 Entry("AppNotFoundInManifestError", AppNotFoundInManifestError{}), 44 Entry("ArgumentCombinationError", ArgumentCombinationError{}), 45 Entry("AssignDropletError", AssignDropletError{}), 46 Entry("BadCredentialsError", BadCredentialsError{}), 47 Entry("CFNetworkingEndpointNotFoundError", CFNetworkingEndpointNotFoundError{}), 48 Entry("CommandLineArgsWithMultipleAppsError", CommandLineArgsWithMultipleAppsError{}), 49 Entry("CommandLineOptionsAndManifestConflictError", CommandLineOptionsAndManifestConflictError{}), 50 Entry("DockerPasswordNotSetError", DockerPasswordNotSetError{}), 51 Entry("DownloadPluginHTTPError", DownloadPluginHTTPError{}), 52 Entry("EmptyDirectoryError", EmptyDirectoryError{}), 53 Entry("EmptyBuildpacksError", EmptyBuildpacksError{}), 54 Entry("FetchingPluginInfoFromRepositoriesError", FetchingPluginInfoFromRepositoriesError{}), 55 Entry("FileChangedError", FileChangedError{}), 56 Entry("FileNotFoundError", FileNotFoundError{}), 57 Entry("GettingPluginRepositoryError", GettingPluginRepositoryError{}), 58 Entry("HealthCheckTypeUnsupportedError", HealthCheckTypeUnsupportedError{SupportedTypes: []string{"some-type", "another-type"}}), 59 Entry("HostAndPathNotAllowedWithTCPDomainError", HostAndPathNotAllowedWithTCPDomainError{}), 60 Entry("HostnameWithTCPDomainError", HostnameWithTCPDomainError{}), 61 Entry("HTTPHealthCheckInvalidError", HTTPHealthCheckInvalidError{}), 62 Entry("InvalidChecksumError", InvalidChecksumError{}), 63 Entry("InvalidRouteError", InvalidRouteError{}), 64 Entry("InvalidSSLCertError", InvalidSSLCertError{}), 65 Entry("IsolationSegmentNotFoundError", IsolationSegmentNotFoundError{}), 66 Entry("JobFailedError", JobFailedError{}), 67 Entry("JobTimeoutError", JobTimeoutError{}), 68 Entry("JSONSyntaxError", JSONSyntaxError{Err: errors.New("some-error")}), 69 Entry("LifecycleMinimumAPIVersionNotMetError", LifecycleMinimumAPIVersionNotMetError{}), 70 Entry("ManifestCreationError", ManifestCreationError{}), 71 Entry("ManifestFileNotFoundInDirectoryError", ManifestFileNotFoundInDirectoryError{}), 72 Entry("MinimumAPIVersionNotMetError", MinimumAPIVersionNotMetError{}), 73 Entry("MinimumCLIVersionNotMetError", MinimumCLIVersionNotMetError{}), 74 Entry("MissingCredentialsError", MissingCredentialsError{}), 75 Entry("MultiError", MultiError{}), 76 Entry("NetworkPolicyProtocolOrPortNotProvidedError", NetworkPolicyProtocolOrPortNotProvidedError{}), 77 Entry("NoAPISetError", NoAPISetError{}), 78 Entry("NoCompatibleBinaryError", NoCompatibleBinaryError{}), 79 Entry("NoDomainsFoundError", NoDomainsFoundError{}), 80 Entry("NoMatchingDomainError", NoMatchingDomainError{}), 81 Entry("NoOrganizationTargetedError", NoOrganizationTargetedError{}), 82 Entry("NoPluginRepositoriesError", NoPluginRepositoriesError{}), 83 Entry("NoSpaceTargetedError", NoSpaceTargetedError{}), 84 Entry("NotLoggedInError", NotLoggedInError{}), 85 Entry("OrgNotFoundError", OrganizationNotFoundError{}), 86 Entry("ParseArgumentError", ParseArgumentError{}), 87 Entry("PasswordGrantTypeLogoutRequiredError", PasswordGrantTypeLogoutRequiredError{}), 88 Entry("PluginAlreadyInstalledError", PluginAlreadyInstalledError{}), 89 Entry("PluginBinaryRemoveFailedError", PluginBinaryRemoveFailedError{}), 90 Entry("PluginBinaryUninstallError", PluginBinaryUninstallError{}), 91 Entry("PluginCommandsConflictError", PluginCommandsConflictError{}), 92 Entry("PluginInvalidError", PluginInvalidError{Err: errors.New("invalid error")}), 93 Entry("PluginInvalidError", PluginInvalidError{}), 94 Entry("PluginNotFoundError", PluginNotFoundError{}), 95 Entry("PluginNotFoundInRepositoryError", PluginNotFoundInRepositoryError{}), 96 Entry("PluginNotFoundOnDiskOrInAnyRepositoryError", PluginNotFoundOnDiskOrInAnyRepositoryError{}), 97 Entry("PortNotAllowedWithHTTPDomainError", PortNotAllowedWithHTTPDomainError{}), 98 Entry("ProcessInstanceNotFoundError", ProcessInstanceNotFoundError{ProcessType: "some-process", InstanceIndex: 1}), 99 Entry("ProcessInstanceNotRunningError", ProcessInstanceNotRunningError{ProcessType: "some-process", InstanceIndex: 1}), 100 Entry("PropertyCombinationError", PropertyCombinationError{Properties: []string{"property-1", "property-2"}}), 101 Entry("RepositoryNameTakenError", RepositoryNameTakenError{}), 102 Entry("RequiredArgumentError", RequiredArgumentError{}), 103 Entry("RequiredFlagsError", RequiredFlagsError{}), 104 Entry("RequiredNameForPushError", RequiredNameForPushError{}), 105 Entry("RouteInDifferentSpaceError", RouteInDifferentSpaceError{}), 106 Entry("RoutePathWithTCPDomainError", RoutePathWithTCPDomainError{}), 107 Entry("RunTaskError", RunTaskError{}), 108 Entry("SecurityGroupNotFoundError", SecurityGroupNotFoundError{}), 109 Entry("ServiceInstanceNotShareableError", ServiceInstanceNotShareableError{}), 110 Entry("ServiceInstanceNotFoundError", ServiceInstanceNotFoundError{}), 111 Entry("SharedServiceInstanceNotFoundError", SharedServiceInstanceNotFoundError{}), 112 Entry("SpaceNotFoundError", SpaceNotFoundError{}), 113 Entry("SSHUnableToAuthenticateError", SSHUnableToAuthenticateError{}), 114 Entry("SSLCertError", SSLCertError{}), 115 Entry("StackNotFoundError with name", SpaceNotFoundError{Name: "steve"}), 116 Entry("StackNotFoundError without name", SpaceNotFoundError{}), 117 Entry("StagingFailedError", StagingFailedError{}), 118 Entry("StagingFailedNoAppDetectedError", StagingFailedNoAppDetectedError{}), 119 Entry("StagingTimeoutError", StagingTimeoutError{}), 120 Entry("StartupTimeoutError", StartupTimeoutError{}), 121 Entry("ThreeRequiredArgumentsError", ThreeRequiredArgumentsError{}), 122 Entry("TriggerLegacyPushError", TriggerLegacyPushError{}), 123 Entry("UnsuccessfulStartError", UnsuccessfulStartError{}), 124 Entry("UnsupportedURLSchemeError", UnsupportedURLSchemeError{}), 125 Entry("UploadFailedError", UploadFailedError{Err: JobFailedError{}}), 126 Entry("V3APIDoesNotExistError", V3APIDoesNotExistError{}), 127 ) 128 129 Describe("PluginInvalidError", func() { 130 Context("when the wrapped error is nil", func() { 131 It("does not concatenate the nil error in the returned Error()", func() { 132 err := PluginInvalidError{} 133 Expect(err.Error()).To(Equal("File is not a valid cf CLI plugin binary.")) 134 }) 135 }) 136 137 Context("when the wrapped error is not nil", func() { 138 It("does prepends the error message in the returned Error()", func() { 139 err := PluginInvalidError{Err: errors.New("ello")} 140 Expect(err.Error()).To(Equal("ello\nFile is not a valid cf CLI plugin binary.")) 141 }) 142 }) 143 }) 144 })