github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/command/v6/rename_buildpack_command_test.go (about) 1 package v6_test 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/v2action" 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 7 "code.cloudfoundry.org/cli/command/commandfakes" 8 "code.cloudfoundry.org/cli/command/flag" 9 "code.cloudfoundry.org/cli/command/translatableerror" 10 . "code.cloudfoundry.org/cli/command/v6" 11 "code.cloudfoundry.org/cli/command/v6/v6fakes" 12 "code.cloudfoundry.org/cli/util/configv3" 13 "code.cloudfoundry.org/cli/util/ui" 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 . "github.com/onsi/gomega/gbytes" 17 ) 18 19 var _ = Describe("rename buildpack command", func() { 20 var ( 21 cmd RenameBuildpackCommand 22 fakeActor *v6fakes.FakeRenameBuildpackActor 23 fakeConfig *commandfakes.FakeConfig 24 fakeSharedActor *commandfakes.FakeSharedActor 25 testUI *ui.UI 26 executeErr error 27 ) 28 29 BeforeEach(func() { 30 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 31 fakeConfig = new(commandfakes.FakeConfig) 32 fakeSharedActor = new(commandfakes.FakeSharedActor) 33 fakeActor = new(v6fakes.FakeRenameBuildpackActor) 34 35 cmd = RenameBuildpackCommand{ 36 UI: testUI, 37 Actor: fakeActor, 38 Config: fakeConfig, 39 SharedActor: fakeSharedActor, 40 } 41 }) 42 43 JustBeforeEach(func() { 44 executeErr = cmd.Execute(nil) 45 }) 46 47 When("checking the target fails", func() { 48 var binaryName string 49 50 BeforeEach(func() { 51 binaryName = "faceman" 52 fakeConfig.BinaryNameReturns(binaryName) 53 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 54 }) 55 56 It("returns an error", func() { 57 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: "faceman"})) 58 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 59 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 60 Expect(checkTargetedOrg).To(BeFalse()) 61 Expect(checkTargetedSpace).To(BeFalse()) 62 }) 63 }) 64 65 When("checking the target succeeds", func() { 66 var ( 67 oldName string 68 newName string 69 stackName string 70 userName string 71 ) 72 73 BeforeEach(func() { 74 oldName = "some-old-name" 75 newName = "some-new-name" 76 stackName = "some-stack" 77 userName = "some-user" 78 79 cmd.RequiredArgs = flag.RenameBuildpackArgs{ 80 OldBuildpackName: oldName, 81 NewBuildpackName: newName, 82 } 83 84 fakeConfig.CurrentUserReturns(configv3.User{Name: userName}, nil) 85 }) 86 87 When("the user does not specify a stack", func() { 88 When("no error is returned", func() { 89 BeforeEach(func() { 90 fakeActor.RenameBuildpackReturns(v2action.Warnings{"warning1", "warning2"}, nil) 91 }) 92 93 It("successfully renames the buildpack and displays any warnings", func() { 94 Expect(executeErr).ToNot(HaveOccurred()) 95 96 Expect(fakeActor.RenameBuildpackCallCount()).To(Equal(1)) 97 98 oldBuildpackName, newBuildpackName, stack := fakeActor.RenameBuildpackArgsForCall(0) 99 Expect(oldBuildpackName).To(Equal(oldName)) 100 Expect(newBuildpackName).To(Equal(newName)) 101 Expect(stack).To(BeEmpty()) 102 103 Expect(testUI.Out).To(Say("Renaming buildpack %s to %s as %s...", oldName, newName, userName)) 104 Expect(testUI.Err).To(Say("warning1")) 105 Expect(testUI.Err).To(Say("warning2")) 106 }) 107 }) 108 109 When("an error is returned", func() { 110 BeforeEach(func() { 111 fakeActor.RenameBuildpackReturns( 112 v2action.Warnings{"warning1", "warning2"}, 113 actionerror.BuildpackNameTakenError{Name: newName}) 114 }) 115 116 It("returns an error and prints warnings", func() { 117 Expect(executeErr).To(MatchError(actionerror.BuildpackNameTakenError{Name: newName})) 118 Expect(testUI.Err).To(Say("warning1")) 119 Expect(testUI.Err).To(Say("warning2")) 120 }) 121 }) 122 }) 123 124 When("the user specifies a stack", func() { 125 BeforeEach(func() { 126 cmd.Stack = stackName 127 }) 128 129 When("the version of CC API is less than minimum version", func() { 130 BeforeEach(func() { 131 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinSupportedV2ClientVersion) 132 }) 133 134 It("should warn the user that the version of CAPI is too low and exit with an error", func() { 135 Expect(executeErr).To(MatchError(translatableerror.MinimumCFAPIVersionNotMetError{ 136 Command: "Option '-s'", 137 CurrentVersion: ccversion.MinSupportedV2ClientVersion, 138 MinimumVersion: ccversion.MinVersionBuildpackStackAssociationV2, 139 })) 140 }) 141 }) 142 143 When("the version of the CC API greater than/equal too the minimum version", func() { 144 BeforeEach(func() { 145 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionBuildpackStackAssociationV2) 146 }) 147 148 When("the actor succeeds", func() { 149 BeforeEach(func() { 150 fakeActor.RenameBuildpackReturns(v2action.Warnings{"warning1", "warning2"}, nil) 151 }) 152 153 It("successfully renames the buildpack and displays any warnings", func() { 154 Expect(executeErr).ToNot(HaveOccurred()) 155 156 Expect(fakeActor.RenameBuildpackCallCount()).To(Equal(1)) 157 158 oldBuildpackName, newBuildpackName, stack := fakeActor.RenameBuildpackArgsForCall(0) 159 Expect(oldBuildpackName).To(Equal(oldName)) 160 Expect(newBuildpackName).To(Equal(newName)) 161 Expect(stack).To(Equal(stackName)) 162 163 Expect(testUI.Out).To(Say("Renaming buildpack %s to %s with stack %s as %s...", 164 oldName, 165 newName, 166 stackName, 167 userName, 168 )) 169 Expect(testUI.Err).To(Say("warning1")) 170 Expect(testUI.Err).To(Say("warning2")) 171 }) 172 }) 173 174 When("the actor returns an error", func() { 175 BeforeEach(func() { 176 fakeActor.RenameBuildpackReturns( 177 v2action.Warnings{"warning1", "warning2"}, 178 actionerror.BuildpackNameTakenError{Name: newName}) 179 }) 180 181 It("returns an error and prints warnings", func() { 182 Expect(executeErr).To(MatchError(actionerror.BuildpackNameTakenError{Name: newName})) 183 Expect(testUI.Err).To(Say("warning1")) 184 Expect(testUI.Err).To(Say("warning2")) 185 }) 186 }) 187 }) 188 }) 189 }) 190 })