github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/cf/commands/servicebroker/create_service_broker_test.go (about) 1 package servicebroker_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/cf/commandregistry" 7 "code.cloudfoundry.org/cli/cf/commands/servicebroker" 8 "code.cloudfoundry.org/cli/cf/configuration/coreconfig" 9 "code.cloudfoundry.org/cli/cf/flags" 10 "code.cloudfoundry.org/cli/cf/requirements" 11 "code.cloudfoundry.org/cli/cf/requirements/requirementsfakes" 12 13 "code.cloudfoundry.org/cli/cf/api/apifakes" 14 testconfig "code.cloudfoundry.org/cli/cf/util/testhelpers/configuration" 15 testterm "code.cloudfoundry.org/cli/cf/util/testhelpers/terminal" 16 17 . "code.cloudfoundry.org/cli/cf/util/testhelpers/matchers" 18 . "github.com/onsi/ginkgo" 19 . "github.com/onsi/gomega" 20 ) 21 22 var _ = Describe("CreateServiceBroker", func() { 23 var ( 24 ui *testterm.FakeUI 25 configRepo coreconfig.Repository 26 serviceBrokerRepo *apifakes.FakeServiceBrokerRepository 27 28 cmd commandregistry.Command 29 deps commandregistry.Dependency 30 factory *requirementsfakes.FakeFactory 31 flagContext flags.FlagContext 32 33 loginRequirement requirements.Requirement 34 targetedSpaceRequirement requirements.Requirement 35 ) 36 37 BeforeEach(func() { 38 ui = &testterm.FakeUI{} 39 configRepo = testconfig.NewRepositoryWithDefaults() 40 serviceBrokerRepo = new(apifakes.FakeServiceBrokerRepository) 41 repoLocator := deps.RepoLocator.SetServiceBrokerRepository(serviceBrokerRepo) 42 43 deps = commandregistry.Dependency{ 44 UI: ui, 45 Config: configRepo, 46 RepoLocator: repoLocator, 47 } 48 49 cmd = &servicebroker.CreateServiceBroker{} 50 cmd.SetDependency(deps, false) 51 52 flagContext = flags.NewFlagContext(cmd.MetaData().Flags) 53 factory = new(requirementsfakes.FakeFactory) 54 55 loginRequirement = &passingRequirement{Name: "login-requirement"} 56 factory.NewLoginRequirementReturns(loginRequirement) 57 58 targetedSpaceRequirement = &passingRequirement{Name: "targeted-space-requirement"} 59 factory.NewTargetedSpaceRequirementReturns(targetedSpaceRequirement) 60 }) 61 62 It("has an alias of `csb`", func() { 63 cmd := &servicebroker.CreateServiceBroker{} 64 65 Expect(cmd.MetaData().ShortName).To(Equal("csb")) 66 }) 67 68 Describe("Requirements", func() { 69 Context("when not provided exactly four args", func() { 70 BeforeEach(func() { 71 flagContext.Parse("service-broker") 72 }) 73 74 It("fails with usage", func() { 75 _, err := cmd.Requirements(factory, flagContext) 76 Expect(err).To(HaveOccurred()) 77 Expect(ui.Outputs()).To(ContainSubstrings( 78 []string{"FAILED"}, 79 []string{"Incorrect Usage. Requires SERVICE_BROKER, USERNAME, PASSWORD, URL as arguments"}, 80 )) 81 }) 82 }) 83 84 Context("when provided exactly four args", func() { 85 BeforeEach(func() { 86 flagContext.Parse("service-broker", "username", "password", "url") 87 }) 88 89 It("returns a LoginRequirement", func() { 90 actualRequirements, err := cmd.Requirements(factory, flagContext) 91 Expect(err).NotTo(HaveOccurred()) 92 Expect(factory.NewLoginRequirementCallCount()).To(Equal(1)) 93 Expect(actualRequirements).To(ContainElement(loginRequirement)) 94 }) 95 }) 96 97 Context("when the --space-scoped flag is provided", func() { 98 BeforeEach(func() { 99 flagContext.Parse("service-broker", "username", "password", "url", "--space-scoped") 100 }) 101 102 It("returns a TargetedSpaceRequirement", func() { 103 actualRequirements, err := cmd.Requirements(factory, flagContext) 104 Expect(err).NotTo(HaveOccurred()) 105 Expect(factory.NewTargetedSpaceRequirementCallCount()).To(Equal(1)) 106 Expect(actualRequirements).To(ContainElement(targetedSpaceRequirement)) 107 }) 108 }) 109 }) 110 111 Describe("Execute", func() { 112 var runCLIErr error 113 114 BeforeEach(func() { 115 err := flagContext.Parse("service-broker", "username", "password", "url") 116 Expect(err).NotTo(HaveOccurred()) 117 cmd.Requirements(factory, flagContext) 118 }) 119 120 JustBeforeEach(func() { 121 runCLIErr = cmd.Execute(flagContext) 122 }) 123 124 It("tells the user it is creating the service broker", func() { 125 Expect(runCLIErr).NotTo(HaveOccurred()) 126 Expect(ui.Outputs()).To(ContainSubstrings( 127 []string{"Creating service broker", "service-broker", "my-user"}, 128 []string{"OK"}, 129 )) 130 }) 131 132 It("tries to create the service broker", func() { 133 Expect(runCLIErr).NotTo(HaveOccurred()) 134 Expect(serviceBrokerRepo.CreateCallCount()).To(Equal(1)) 135 name, url, username, password, spaceGUID := serviceBrokerRepo.CreateArgsForCall(0) 136 Expect(name).To(Equal("service-broker")) 137 Expect(url).To(Equal("url")) 138 Expect(username).To(Equal("username")) 139 Expect(password).To(Equal("password")) 140 Expect(spaceGUID).To(Equal("")) 141 }) 142 143 Context("when the --space-scoped flag is passed", func() { 144 BeforeEach(func() { 145 err := flagContext.Parse("service-broker", "username", "password", "url", "--space-scoped") 146 Expect(err).NotTo(HaveOccurred()) 147 }) 148 149 It("tries to create the service broker with the targeted space guid", func() { 150 Expect(runCLIErr).NotTo(HaveOccurred()) 151 Expect(serviceBrokerRepo.CreateCallCount()).To(Equal(1)) 152 name, url, username, password, spaceGUID := serviceBrokerRepo.CreateArgsForCall(0) 153 Expect(name).To(Equal("service-broker")) 154 Expect(url).To(Equal("url")) 155 Expect(username).To(Equal("username")) 156 Expect(password).To(Equal("password")) 157 Expect(spaceGUID).To(Equal("my-space-guid")) 158 }) 159 160 It("tells the user it is creating the service broker in the targeted org and space", func() { 161 Expect(runCLIErr).NotTo(HaveOccurred()) 162 Expect(ui.Outputs()).To(ContainSubstrings( 163 []string{"Creating service broker service-broker in org my-org / space my-space as my-user"}, 164 []string{"OK"}, 165 )) 166 }) 167 }) 168 169 Context("when creating the service broker succeeds", func() { 170 BeforeEach(func() { 171 serviceBrokerRepo.CreateReturns(nil) 172 }) 173 174 It("says OK", func() { 175 Expect(runCLIErr).NotTo(HaveOccurred()) 176 Expect(ui.Outputs()).To(ContainSubstrings([]string{"OK"})) 177 }) 178 }) 179 180 Context("when creating the service broker fails", func() { 181 BeforeEach(func() { 182 serviceBrokerRepo.CreateReturns(errors.New("create-err")) 183 }) 184 185 It("returns an error", func() { 186 Expect(runCLIErr).To(HaveOccurred()) 187 Expect(runCLIErr.Error()).To(Equal("create-err")) 188 }) 189 }) 190 }) 191 })