github.com/wanddynosios/cli/v8@v8.7.9-0.20240221182337-1a92e3a7017f/command/v7/update_service_broker_command_test.go (about) 1 package v7_test 2 3 import ( 4 "fmt" 5 "os" 6 7 "code.cloudfoundry.org/cli/actor/actionerror" 8 "code.cloudfoundry.org/cli/actor/v7action" 9 "code.cloudfoundry.org/cli/cf/errors" 10 "code.cloudfoundry.org/cli/command/commandfakes" 11 v7 "code.cloudfoundry.org/cli/command/v7" 12 "code.cloudfoundry.org/cli/command/v7/v7fakes" 13 "code.cloudfoundry.org/cli/resources" 14 "code.cloudfoundry.org/cli/util/configv3" 15 "code.cloudfoundry.org/cli/util/ui" 16 . "github.com/onsi/ginkgo" 17 . "github.com/onsi/gomega" 18 . "github.com/onsi/gomega/gbytes" 19 ) 20 21 var _ = Describe("update-service-broker command", func() { 22 const ( 23 binaryName = "cf-command" 24 serviceBrokerName = "fake-service-broker-name" 25 username = "fake-username" 26 password = "fake-password" 27 url = "fake-url" 28 ) 29 30 var ( 31 cmd *v7.UpdateServiceBrokerCommand 32 fakeUpdateServiceBrokerActor *v7fakes.FakeActor 33 fakeSharedActor *commandfakes.FakeSharedActor 34 fakeConfig *commandfakes.FakeConfig 35 input *Buffer 36 testUI *ui.UI 37 ) 38 39 BeforeEach(func() { 40 fakeUpdateServiceBrokerActor = &v7fakes.FakeActor{} 41 fakeSharedActor = &commandfakes.FakeSharedActor{} 42 input = NewBuffer() 43 testUI = ui.NewTestUI(input, NewBuffer(), NewBuffer()) 44 fakeConfig = &commandfakes.FakeConfig{} 45 cmd = &v7.UpdateServiceBrokerCommand{ 46 BaseCommand: v7.BaseCommand{ 47 Actor: fakeUpdateServiceBrokerActor, 48 SharedActor: fakeSharedActor, 49 UI: testUI, 50 Config: fakeConfig, 51 }, 52 } 53 }) 54 55 When("logged in", func() { 56 const guid = "fake-service-broker-guid" 57 58 BeforeEach(func() { 59 fakeUpdateServiceBrokerActor.GetServiceBrokerByNameReturns( 60 resources.ServiceBroker{GUID: guid}, 61 v7action.Warnings{}, 62 nil, 63 ) 64 65 fakeUpdateServiceBrokerActor.GetCurrentUserReturns(configv3.User{Name: "user"}, nil) 66 67 setPositionalFlags(cmd, serviceBrokerName, username, password, url) 68 }) 69 70 It("succeeds", func() { 71 fakeUpdateServiceBrokerActor.UpdateServiceBrokerReturns(v7action.Warnings{"update service broker warning"}, nil) 72 73 err := cmd.Execute(nil) 74 Expect(err).NotTo(HaveOccurred()) 75 76 Expect(fakeUpdateServiceBrokerActor.UpdateServiceBrokerCallCount()).To(Equal(1)) 77 serviceBrokerGUID, model := fakeUpdateServiceBrokerActor.UpdateServiceBrokerArgsForCall(0) 78 Expect(serviceBrokerGUID).To(Equal(guid)) 79 Expect(model.Username).To(Equal(username)) 80 Expect(model.Password).To(Equal(password)) 81 Expect(model.URL).To(Equal(url)) 82 83 Expect(testUI.Err).To(Say("update service broker warning")) 84 }) 85 86 When("the UpdateServiceBroker actor fails to get the broker name", func() { 87 BeforeEach(func() { 88 fakeUpdateServiceBrokerActor.GetServiceBrokerByNameReturns( 89 resources.ServiceBroker{}, 90 v7action.Warnings{"some-warning"}, 91 actionerror.ServiceBrokerNotFoundError{ 92 Name: serviceBrokerName, 93 }, 94 ) 95 }) 96 97 It("returns the error and displays all warnings", func() { 98 err := cmd.Execute(nil) 99 Expect(err).To(MatchError(actionerror.ServiceBrokerNotFoundError{Name: serviceBrokerName})) 100 Expect(testUI.Err).To(Say("some-warning")) 101 102 Expect(fakeUpdateServiceBrokerActor.GetServiceBrokerByNameCallCount()).To(Equal(1)) 103 Expect(fakeUpdateServiceBrokerActor.GetServiceBrokerByNameArgsForCall(0)).To(Equal(serviceBrokerName)) 104 }) 105 }) 106 107 When("the UpdateServiceBroker actor fails to update the broker", func() { 108 It("returns the error and displays any warnings", func() { 109 fakeUpdateServiceBrokerActor.UpdateServiceBrokerReturns(v7action.Warnings{"a-warning"}, errors.New("something went wrong")) 110 111 err := cmd.Execute(nil) 112 113 Expect(err).To(HaveOccurred()) 114 Expect(err.Error()).To(Equal("something went wrong")) 115 Expect(testUI.Err).To(Say("a-warning")) 116 }) 117 }) 118 119 When("it fails to get the current user", func() { 120 BeforeEach(func() { 121 fakeUpdateServiceBrokerActor.GetCurrentUserReturns(configv3.User{}, errors.New("no user found")) 122 }) 123 124 It("returns the error and displays all warnings", func() { 125 err := cmd.Execute(nil) 126 127 Expect(err).To(HaveOccurred()) 128 Expect(err).To(MatchError("no user found")) 129 }) 130 }) 131 132 When("password is provided as environment variable", func() { 133 const ( 134 varName = "CF_BROKER_PASSWORD" 135 varPassword = "var-password" 136 ) 137 138 BeforeEach(func() { 139 setPositionalFlags(cmd, serviceBrokerName, username, url, "") 140 os.Setenv(varName, varPassword) 141 142 Expect(cmd.Execute(nil)).To(Succeed()) 143 }) 144 145 AfterEach(func() { 146 os.Unsetenv(varName) 147 }) 148 149 It("passes the data to the actor layer", func() { 150 Expect(fakeUpdateServiceBrokerActor.UpdateServiceBrokerCallCount()).To(Equal(1)) 151 serviceBrokerGUID, model := fakeUpdateServiceBrokerActor.UpdateServiceBrokerArgsForCall(0) 152 Expect(serviceBrokerGUID).To(Equal(guid)) 153 Expect(model.Username).To(Equal(username)) 154 Expect(model.Password).To(Equal(varPassword)) 155 Expect(model.URL).To(Equal(url)) 156 }) 157 }) 158 159 When("password is provided via prompt", func() { 160 const promptPassword = "prompt-password" 161 162 BeforeEach(func() { 163 setPositionalFlags(cmd, serviceBrokerName, username, url, "") 164 165 _, err := input.Write([]byte(fmt.Sprintf("%s\n", promptPassword))) 166 Expect(err).NotTo(HaveOccurred()) 167 168 Expect(cmd.Execute(nil)).To(Succeed()) 169 }) 170 171 It("prompts the user for credentials", func() { 172 Expect(testUI.Out).To(Say("Service Broker Password: ")) 173 }) 174 175 It("does not echo the credentials", func() { 176 Expect(testUI.Out).NotTo(Say(promptPassword)) 177 Expect(testUI.Err).NotTo(Say(promptPassword)) 178 }) 179 180 It("passes the data to the actor layer", func() { 181 Expect(fakeUpdateServiceBrokerActor.UpdateServiceBrokerCallCount()).To(Equal(1)) 182 serviceBrokerGUID, model := fakeUpdateServiceBrokerActor.UpdateServiceBrokerArgsForCall(0) 183 Expect(serviceBrokerGUID).To(Equal(guid)) 184 Expect(model.Username).To(Equal(username)) 185 Expect(model.Password).To(Equal(promptPassword)) 186 Expect(model.URL).To(Equal(url)) 187 }) 188 }) 189 }) 190 191 When("not logged in", func() { 192 BeforeEach(func() { 193 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{ 194 BinaryName: binaryName, 195 }) 196 }) 197 198 It("returns an error", func() { 199 err := cmd.Execute(nil) 200 201 Expect(err).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 202 203 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 204 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 205 Expect(checkTargetedOrg).To(BeFalse()) 206 Expect(checkTargetedSpace).To(BeFalse()) 207 }) 208 }) 209 })