github.com/randomtask1155/cli@v6.41.1-0.20181227003417-a98eed78cbde+incompatible/command/v6/v3_create_package_command_test.go (about) 1 package v6_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/v6" 13 "code.cloudfoundry.org/cli/command/v6/shared" 14 "code.cloudfoundry.org/cli/command/v6/v6fakes" 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 V3CreatePackageCommand 25 testUI *ui.UI 26 fakeConfig *commandfakes.FakeConfig 27 fakeSharedActor *commandfakes.FakeSharedActor 28 fakeActor *v6fakes.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(v6fakes.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 = 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 59 JustBeforeEach(func() { 60 executeErr = cmd.Execute(nil) 61 }) 62 63 When("the API version is below the minimum", func() { 64 BeforeEach(func() { 65 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinV3ClientVersion) 66 }) 67 68 It("returns a MinimumAPIVersionNotMetError", func() { 69 Expect(executeErr).To(MatchError(translatableerror.MinimumCFAPIVersionNotMetError{ 70 CurrentVersion: ccversion.MinV3ClientVersion, 71 MinimumVersion: ccversion.MinVersionApplicationFlowV3, 72 })) 73 }) 74 75 It("displays the experimental warning", func() { 76 Expect(testUI.Err).To(Say("This command is in EXPERIMENTAL stage and may change without notice")) 77 }) 78 }) 79 80 When("checking target fails", func() { 81 BeforeEach(func() { 82 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 83 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 84 }) 85 86 It("returns an error", func() { 87 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 88 89 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 90 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 91 Expect(checkTargetedOrg).To(BeTrue()) 92 Expect(checkTargetedSpace).To(BeTrue()) 93 }) 94 }) 95 96 When("the user is logged in", func() { 97 BeforeEach(func() { 98 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 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 When("no flags are set", func() { 105 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 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 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 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 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 })