github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+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/sharedaction" 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 78 Context("when checking target fails", func() { 79 BeforeEach(func() { 80 fakeSharedActor.CheckTargetReturns(sharedaction.NotLoggedInError{BinaryName: binaryName}) 81 }) 82 83 It("returns an error", func() { 84 Expect(executeErr).To(MatchError(translatableerror.NotLoggedInError{BinaryName: binaryName})) 85 86 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 87 _, checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 88 Expect(checkTargetedOrg).To(BeTrue()) 89 Expect(checkTargetedSpace).To(BeTrue()) 90 }) 91 }) 92 93 Context("when the user is logged in", func() { 94 BeforeEach(func() { 95 fakeConfig.CurrentUserReturns(configv3.User{Name: "banana"}, nil) 96 fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space", GUID: "some-space-guid"}) 97 fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"}) 98 }) 99 100 Context("when no flags are set", func() { 101 Context("when the create is successful", func() { 102 BeforeEach(func() { 103 myPackage := v3action.Package{GUID: "1234"} 104 fakeActor.CreateAndUploadBitsPackageByApplicationNameAndSpaceReturns(myPackage, v3action.Warnings{"I am a warning", "I am also a warning"}, nil) 105 }) 106 107 It("displays the header and ok", func() { 108 Expect(executeErr).ToNot(HaveOccurred()) 109 110 Expect(testUI.Out).To(Say("Uploading and creating bits package for app some-app in org some-org / space some-space as banana...")) 111 Expect(testUI.Out).To(Say("package guid: 1234")) 112 Expect(testUI.Out).To(Say("OK")) 113 114 Expect(testUI.Err).To(Say("I am a warning")) 115 Expect(testUI.Err).To(Say("I am also a warning")) 116 117 Expect(fakeActor.CreateAndUploadBitsPackageByApplicationNameAndSpaceCallCount()).To(Equal(1)) 118 119 appName, spaceGUID, bitsPath := fakeActor.CreateAndUploadBitsPackageByApplicationNameAndSpaceArgsForCall(0) 120 Expect(appName).To(Equal(app)) 121 Expect(spaceGUID).To(Equal("some-space-guid")) 122 Expect(bitsPath).To(BeEmpty()) 123 }) 124 }) 125 126 Context("when the create is unsuccessful", func() { 127 var expectedErr error 128 129 BeforeEach(func() { 130 expectedErr = errors.New("I am an error") 131 fakeActor.CreateAndUploadBitsPackageByApplicationNameAndSpaceReturns(v3action.Package{}, v3action.Warnings{"I am a warning", "I am also a warning"}, expectedErr) 132 }) 133 134 It("displays the header and error", func() { 135 Expect(executeErr).To(MatchError(expectedErr)) 136 137 Expect(testUI.Out).To(Say("Uploading and creating bits package for app some-app in org some-org / space some-space as banana...")) 138 139 Expect(testUI.Err).To(Say("I am a warning")) 140 Expect(testUI.Err).To(Say("I am also a warning")) 141 }) 142 }) 143 }) 144 145 Context("when the --docker-image flag is set", func() { 146 BeforeEach(func() { 147 cmd.DockerImage.Path = "some-docker-image" 148 fakeActor.CreateDockerPackageByApplicationNameAndSpaceReturns(v3action.Package{GUID: "1234"}, v3action.Warnings{"I am a warning", "I am also a warning"}, nil) 149 }) 150 151 It("creates the docker package", func() { 152 Expect(executeErr).ToNot(HaveOccurred()) 153 154 Expect(testUI.Out).To(Say("Creating docker package for app some-app in org some-org / space some-space as banana...")) 155 Expect(testUI.Out).To(Say("package guid: 1234")) 156 Expect(testUI.Out).To(Say("OK")) 157 158 Expect(testUI.Err).To(Say("I am a warning")) 159 Expect(testUI.Err).To(Say("I am also a warning")) 160 161 Expect(fakeActor.CreateDockerPackageByApplicationNameAndSpaceCallCount()).To(Equal(1)) 162 163 appName, spaceGUID, dockerImageCredentials := fakeActor.CreateDockerPackageByApplicationNameAndSpaceArgsForCall(0) 164 Expect(appName).To(Equal(app)) 165 Expect(spaceGUID).To(Equal("some-space-guid")) 166 Expect(dockerImageCredentials.Path).To(Equal("some-docker-image")) 167 }) 168 }) 169 }) 170 })