github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+incompatible/command/v3/v3_create_package_command_test.go (about) 1 package v3_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 "code.cloudfoundry.org/cli/actor/v3action" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 9 "code.cloudfoundry.org/cli/command/commandfakes" 10 "code.cloudfoundry.org/cli/command/flag" 11 "code.cloudfoundry.org/cli/command/translatableerror" 12 "code.cloudfoundry.org/cli/command/v3" 13 "code.cloudfoundry.org/cli/command/v3/shared" 14 "code.cloudfoundry.org/cli/command/v3/v3fakes" 15 "code.cloudfoundry.org/cli/util/configv3" 16 "code.cloudfoundry.org/cli/util/ui" 17 . "github.com/onsi/ginkgo" 18 . "github.com/onsi/gomega" 19 . "github.com/onsi/gomega/gbytes" 20 ) 21 22 var _ = Describe("v3-create-package Command", func() { 23 var ( 24 cmd v3.V3CreatePackageCommand 25 testUI *ui.UI 26 fakeConfig *commandfakes.FakeConfig 27 fakeSharedActor *commandfakes.FakeSharedActor 28 fakeActor *v3fakes.FakeV3CreatePackageActor 29 binaryName string 30 executeErr error 31 app string 32 ) 33 34 BeforeEach(func() { 35 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 36 fakeConfig = new(commandfakes.FakeConfig) 37 fakeSharedActor = new(commandfakes.FakeSharedActor) 38 fakeActor = new(v3fakes.FakeV3CreatePackageActor) 39 40 binaryName = "faceman" 41 fakeConfig.BinaryNameReturns(binaryName) 42 app = "some-app" 43 44 packageDisplayer := shared.NewPackageDisplayer( 45 testUI, 46 fakeConfig, 47 ) 48 49 cmd = v3.V3CreatePackageCommand{ 50 UI: testUI, 51 Config: fakeConfig, 52 SharedActor: fakeSharedActor, 53 Actor: fakeActor, 54 RequiredArgs: flag.AppName{AppName: app}, 55 PackageDisplayer: packageDisplayer, 56 } 57 58 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionV3) 59 }) 60 61 JustBeforeEach(func() { 62 executeErr = cmd.Execute(nil) 63 }) 64 65 Context("when the API version is below the minimum", func() { 66 BeforeEach(func() { 67 fakeActor.CloudControllerAPIVersionReturns("0.0.0") 68 }) 69 70 It("returns a MinimumAPIVersionNotMetError", func() { 71 Expect(executeErr).To(MatchError(translatableerror.MinimumAPIVersionNotMetError{ 72 CurrentVersion: "0.0.0", 73 MinimumVersion: ccversion.MinVersionV3, 74 })) 75 }) 76 77 It("displays the experimental warning", func() { 78 Expect(testUI.Err).To(Say("This command is in EXPERIMENTAL stage and may change without notice")) 79 }) 80 }) 81 82 Context("when checking target fails", func() { 83 BeforeEach(func() { 84 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 85 }) 86 87 It("returns an error", func() { 88 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 89 90 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 91 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 92 Expect(checkTargetedOrg).To(BeTrue()) 93 Expect(checkTargetedSpace).To(BeTrue()) 94 }) 95 }) 96 97 Context("when the user is logged in", func() { 98 BeforeEach(func() { 99 fakeConfig.CurrentUserReturns(configv3.User{Name: "banana"}, nil) 100 fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space", GUID: "some-space-guid"}) 101 fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"}) 102 }) 103 104 Context("when no flags are set", func() { 105 Context("when the create is successful", func() { 106 BeforeEach(func() { 107 myPackage := v3action.Package{GUID: "1234"} 108 fakeActor.CreateAndUploadBitsPackageByApplicationNameAndSpaceReturns(myPackage, v3action.Warnings{"I am a warning", "I am also a warning"}, nil) 109 }) 110 111 It("displays the header and ok", func() { 112 Expect(executeErr).ToNot(HaveOccurred()) 113 114 Expect(testUI.Out).To(Say("Uploading and creating bits package for app some-app in org some-org / space some-space as banana...")) 115 Expect(testUI.Out).To(Say("package guid: 1234")) 116 Expect(testUI.Out).To(Say("OK")) 117 118 Expect(testUI.Err).To(Say("I am a warning")) 119 Expect(testUI.Err).To(Say("I am also a warning")) 120 121 Expect(fakeActor.CreateAndUploadBitsPackageByApplicationNameAndSpaceCallCount()).To(Equal(1)) 122 123 appName, spaceGUID, bitsPath := fakeActor.CreateAndUploadBitsPackageByApplicationNameAndSpaceArgsForCall(0) 124 Expect(appName).To(Equal(app)) 125 Expect(spaceGUID).To(Equal("some-space-guid")) 126 Expect(bitsPath).To(BeEmpty()) 127 }) 128 }) 129 130 Context("when the create is unsuccessful", func() { 131 var expectedErr error 132 133 BeforeEach(func() { 134 expectedErr = errors.New("I am an error") 135 fakeActor.CreateAndUploadBitsPackageByApplicationNameAndSpaceReturns(v3action.Package{}, v3action.Warnings{"I am a warning", "I am also a warning"}, expectedErr) 136 }) 137 138 It("displays the header and error", func() { 139 Expect(executeErr).To(MatchError(expectedErr)) 140 141 Expect(testUI.Out).To(Say("Uploading and creating bits package for app some-app in org some-org / space some-space as banana...")) 142 143 Expect(testUI.Err).To(Say("I am a warning")) 144 Expect(testUI.Err).To(Say("I am also a warning")) 145 }) 146 }) 147 }) 148 149 Context("when the docker image is provided", func() { 150 BeforeEach(func() { 151 cmd.DockerImage.Path = "some-docker-image" 152 fakeActor.CreateDockerPackageByApplicationNameAndSpaceReturns(v3action.Package{GUID: "1234"}, v3action.Warnings{"I am a warning", "I am also a warning"}, nil) 153 }) 154 155 It("creates the docker package", func() { 156 Expect(executeErr).ToNot(HaveOccurred()) 157 158 Expect(testUI.Out).To(Say("Creating docker package for app some-app in org some-org / space some-space as banana...")) 159 Expect(testUI.Out).To(Say("package guid: 1234")) 160 Expect(testUI.Out).To(Say("OK")) 161 162 Expect(testUI.Err).To(Say("I am a warning")) 163 Expect(testUI.Err).To(Say("I am also a warning")) 164 165 Expect(fakeActor.CreateDockerPackageByApplicationNameAndSpaceCallCount()).To(Equal(1)) 166 167 appName, spaceGUID, dockerImageCredentials := fakeActor.CreateDockerPackageByApplicationNameAndSpaceArgsForCall(0) 168 Expect(appName).To(Equal(app)) 169 Expect(spaceGUID).To(Equal("some-space-guid")) 170 Expect(dockerImageCredentials.Path).To(Equal("some-docker-image")) 171 }) 172 }) 173 174 Context("when the path is provided", func() { 175 BeforeEach(func() { 176 cmd.AppPath = "some-app-path" 177 fakeActor.CreateAndUploadBitsPackageByApplicationNameAndSpaceReturns(v3action.Package{GUID: "1234"}, v3action.Warnings{"I am a warning", "I am also a warning"}, nil) 178 }) 179 180 It("creates the package using the specified directory", func() { 181 Expect(executeErr).ToNot(HaveOccurred()) 182 183 Expect(testUI.Out).To(Say("Uploading and creating bits package for app some-app in org some-org / space some-space as banana...")) 184 185 Expect(testUI.Err).To(Say("I am a warning")) 186 Expect(testUI.Err).To(Say("I am also a warning")) 187 188 Expect(fakeActor.CreateAndUploadBitsPackageByApplicationNameAndSpaceCallCount()).To(Equal(1)) 189 190 appName, spaceGUID, appPath := fakeActor.CreateAndUploadBitsPackageByApplicationNameAndSpaceArgsForCall(0) 191 Expect(appName).To(Equal(app)) 192 Expect(spaceGUID).To(Equal("some-space-guid")) 193 Expect(appPath).To(Equal("some-app-path")) 194 }) 195 }) 196 197 Context("when the docker image and path are both provided", func() { 198 BeforeEach(func() { 199 cmd.AppPath = "some-app-path" 200 cmd.DockerImage.Path = "some-docker-image" 201 }) 202 203 It("displays an argument combination error", func() { 204 argumentCombinationError := translatableerror.ArgumentCombinationError{ 205 Args: []string{"--docker-image", "-o", "-p"}, 206 } 207 208 Expect(executeErr).To(MatchError(argumentCombinationError)) 209 }) 210 }) 211 }) 212 })