github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/actor/v2action/space_test.go (about) 1 package v2action_test 2 3 import ( 4 "errors" 5 6 . "code.cloudfoundry.org/cli/actor/v2action" 7 "code.cloudfoundry.org/cli/actor/v2action/v2actionfakes" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" 9 . "github.com/onsi/ginkgo" 10 . "github.com/onsi/gomega" 11 ) 12 13 var _ = Describe("Space", func() { 14 Describe("SpaceNotFoundError#Error", func() { 15 Context("when the name is specified", func() { 16 It("returns an error message with the name of the missing space", func() { 17 err := SpaceNotFoundError{ 18 Name: "some-space", 19 } 20 Expect(err.Error()).To(Equal("Space 'some-space' not found.")) 21 }) 22 }) 23 24 Context("when the name is not specified, but the GUID is specified", func() { 25 It("returns an error message with the GUID of the missing space", func() { 26 err := SpaceNotFoundError{ 27 GUID: "some-space-guid", 28 } 29 Expect(err.Error()).To(Equal("Space with GUID 'some-space-guid' not found.")) 30 }) 31 }) 32 33 Context("when neither the name nor the GUID is specified", func() { 34 It("returns a generic error message for the missing space", func() { 35 err := SpaceNotFoundError{} 36 Expect(err.Error()).To(Equal("Space '' not found.")) 37 }) 38 }) 39 }) 40 41 Describe("Actions", func() { 42 var ( 43 actor *Actor 44 fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient 45 ) 46 47 BeforeEach(func() { 48 fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient) 49 actor = NewActor(fakeCloudControllerClient, nil) 50 }) 51 52 Describe("DeleteSpaceByNameAndOrganizationName", func() { 53 var ( 54 warnings Warnings 55 err error 56 ) 57 58 JustBeforeEach(func() { 59 warnings, err = actor.DeleteSpaceByNameAndOrganizationName("some-space", "some-org") 60 }) 61 62 Context("when the org is not found", func() { 63 BeforeEach(func() { 64 fakeCloudControllerClient.GetOrganizationsReturns( 65 []ccv2.Organization{}, 66 ccv2.Warnings{ 67 "warning-1", 68 "warning-2", 69 }, 70 nil, 71 ) 72 }) 73 74 It("returns an OrganizationNotFoundError", func() { 75 Expect(err).To(MatchError(OrganizationNotFoundError{Name: "some-org"})) 76 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 77 }) 78 }) 79 80 Context("when the org is found", func() { 81 BeforeEach(func() { 82 fakeCloudControllerClient.GetOrganizationsReturns( 83 []ccv2.Organization{{Name: "some-org", GUID: "some-org-guid"}}, 84 ccv2.Warnings{"warning-1", "warning-2"}, 85 nil, 86 ) 87 }) 88 89 Context("when the space is not found", func() { 90 BeforeEach(func() { 91 fakeCloudControllerClient.GetSpacesReturns( 92 []ccv2.Space{}, 93 ccv2.Warnings{"warning-3", "warning-4"}, 94 nil, 95 ) 96 }) 97 98 It("returns an SpaceNotFoundError", func() { 99 Expect(err).To(MatchError(SpaceNotFoundError{Name: "some-space"})) 100 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-3", "warning-4")) 101 }) 102 }) 103 104 Context("when the space is found", func() { 105 BeforeEach(func() { 106 fakeCloudControllerClient.GetSpacesReturns( 107 []ccv2.Space{{GUID: "some-space-guid"}}, 108 ccv2.Warnings{"warning-3", "warning-4"}, 109 nil, 110 ) 111 }) 112 113 Context("when the delete returns an error", func() { 114 var expectedErr error 115 116 BeforeEach(func() { 117 expectedErr = errors.New("some delete space error") 118 fakeCloudControllerClient.DeleteSpaceReturns( 119 ccv2.Job{}, 120 ccv2.Warnings{"warning-5", "warning-6"}, 121 expectedErr, 122 ) 123 }) 124 125 It("returns the error", func() { 126 Expect(err).To(Equal(expectedErr)) 127 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-3", "warning-4", "warning-5", "warning-6")) 128 }) 129 }) 130 131 Context("when the delete returns a job", func() { 132 BeforeEach(func() { 133 fakeCloudControllerClient.DeleteSpaceReturns( 134 ccv2.Job{GUID: "some-job-guid"}, 135 ccv2.Warnings{"warning-5", "warning-6"}, 136 nil, 137 ) 138 }) 139 140 Context("when polling errors", func() { 141 var expectedErr error 142 143 BeforeEach(func() { 144 expectedErr = errors.New("Never expected, by anyone") 145 fakeCloudControllerClient.PollJobReturns(ccv2.Warnings{"warning-7", "warning-8"}, expectedErr) 146 }) 147 148 It("returns the error", func() { 149 Expect(err).To(Equal(expectedErr)) 150 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-3", "warning-4", "warning-5", "warning-6", "warning-7", "warning-8")) 151 }) 152 }) 153 154 Context("when the job is successful", func() { 155 BeforeEach(func() { 156 fakeCloudControllerClient.PollJobReturns(ccv2.Warnings{"warning-7", "warning-8"}, nil) 157 }) 158 159 It("returns warnings and no error", func() { 160 Expect(err).ToNot(HaveOccurred()) 161 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-3", "warning-4", "warning-5", "warning-6", "warning-7", "warning-8")) 162 163 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 164 Expect(fakeCloudControllerClient.GetOrganizationsArgsForCall(0)).To(Equal([]ccv2.Query{{ 165 Filter: ccv2.NameFilter, 166 Operator: ccv2.EqualOperator, 167 Value: "some-org", 168 }})) 169 170 Expect(fakeCloudControllerClient.GetSpacesCallCount()).To(Equal(1)) 171 Expect(fakeCloudControllerClient.GetSpacesArgsForCall(0)).To(Equal([]ccv2.Query{{ 172 Filter: ccv2.NameFilter, 173 Operator: ccv2.EqualOperator, 174 Value: "some-space", 175 }, 176 { 177 Filter: ccv2.OrganizationGUIDFilter, 178 Operator: ccv2.EqualOperator, 179 Value: "some-org-guid", 180 }, 181 })) 182 183 Expect(fakeCloudControllerClient.DeleteSpaceCallCount()).To(Equal(1)) 184 Expect(fakeCloudControllerClient.DeleteSpaceArgsForCall(0)).To(Equal("some-space-guid")) 185 186 Expect(fakeCloudControllerClient.PollJobCallCount()).To(Equal(1)) 187 Expect(fakeCloudControllerClient.PollJobArgsForCall(0)).To(Equal(ccv2.Job{GUID: "some-job-guid"})) 188 }) 189 }) 190 }) 191 }) 192 }) 193 }) 194 195 Describe("GetOrganizationSpaces", func() { 196 Context("when there are spaces in the org", func() { 197 BeforeEach(func() { 198 fakeCloudControllerClient.GetSpacesReturns( 199 []ccv2.Space{ 200 { 201 GUID: "space-1-guid", 202 Name: "space-1", 203 AllowSSH: true, 204 SpaceQuotaDefinitionGUID: "some-space-quota-guid", 205 }, 206 { 207 GUID: "space-2-guid", 208 Name: "space-2", 209 AllowSSH: false, 210 }, 211 }, 212 ccv2.Warnings{"warning-1", "warning-2"}, 213 nil) 214 }) 215 216 It("returns all spaces and all warnings", func() { 217 spaces, warnings, err := actor.GetOrganizationSpaces("some-org-guid") 218 219 Expect(err).ToNot(HaveOccurred()) 220 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 221 Expect(spaces).To(Equal( 222 []Space{ 223 { 224 GUID: "space-1-guid", 225 Name: "space-1", 226 AllowSSH: true, 227 SpaceQuotaDefinitionGUID: "some-space-quota-guid", 228 }, 229 { 230 GUID: "space-2-guid", 231 Name: "space-2", 232 AllowSSH: false, 233 }, 234 })) 235 236 Expect(fakeCloudControllerClient.GetSpacesCallCount()).To(Equal(1)) 237 Expect(fakeCloudControllerClient.GetSpacesArgsForCall(0)).To(Equal( 238 []ccv2.Query{ 239 { 240 Filter: ccv2.OrganizationGUIDFilter, 241 Operator: ccv2.EqualOperator, 242 Value: "some-org-guid", 243 }, 244 })) 245 }) 246 }) 247 248 Context("when an error is encountered", func() { 249 var returnedErr error 250 251 BeforeEach(func() { 252 returnedErr = errors.New("cc-get-spaces-error") 253 fakeCloudControllerClient.GetSpacesReturns( 254 []ccv2.Space{}, 255 ccv2.Warnings{"warning-1", "warning-2"}, 256 returnedErr, 257 ) 258 }) 259 260 It("returns the error and all warnings", func() { 261 _, warnings, err := actor.GetOrganizationSpaces("some-org-guid") 262 263 Expect(err).To(MatchError(returnedErr)) 264 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 265 }) 266 }) 267 }) 268 269 Describe("GetSpaceByOrganizationAndName", func() { 270 Context("when the space exists", func() { 271 BeforeEach(func() { 272 fakeCloudControllerClient.GetSpacesReturns( 273 []ccv2.Space{ 274 { 275 GUID: "some-space-guid", 276 Name: "some-space", 277 AllowSSH: true, 278 SpaceQuotaDefinitionGUID: "some-space-quota-guid", 279 }, 280 }, 281 ccv2.Warnings{"warning-1", "warning-2"}, 282 nil) 283 }) 284 285 It("returns the space and all warnings", func() { 286 space, warnings, err := actor.GetSpaceByOrganizationAndName("some-org-guid", "some-space") 287 288 Expect(err).ToNot(HaveOccurred()) 289 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 290 Expect(space).To(Equal(Space{ 291 GUID: "some-space-guid", 292 Name: "some-space", 293 AllowSSH: true, 294 SpaceQuotaDefinitionGUID: "some-space-quota-guid", 295 })) 296 297 Expect(fakeCloudControllerClient.GetSpacesCallCount()).To(Equal(1)) 298 Expect(fakeCloudControllerClient.GetSpacesArgsForCall(0)).To(ConsistOf( 299 []ccv2.Query{ 300 { 301 Filter: ccv2.OrganizationGUIDFilter, 302 Operator: ccv2.EqualOperator, 303 Value: "some-org-guid", 304 }, 305 { 306 Filter: ccv2.NameFilter, 307 Operator: ccv2.EqualOperator, 308 Value: "some-space", 309 }, 310 })) 311 }) 312 }) 313 314 Context("when an error is encountered", func() { 315 var returnedErr error 316 317 BeforeEach(func() { 318 returnedErr = errors.New("cc-get-spaces-error") 319 fakeCloudControllerClient.GetSpacesReturns( 320 []ccv2.Space{}, 321 ccv2.Warnings{"warning-1", "warning-2"}, 322 returnedErr, 323 ) 324 }) 325 326 It("return the error and all warnings", func() { 327 _, warnings, err := actor.GetSpaceByOrganizationAndName("some-org-guid", "some-space") 328 329 Expect(err).To(MatchError(returnedErr)) 330 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 331 }) 332 }) 333 334 Context("when the space does not exist", func() { 335 BeforeEach(func() { 336 fakeCloudControllerClient.GetSpacesReturns( 337 []ccv2.Space{}, 338 nil, 339 nil, 340 ) 341 }) 342 343 It("returns SpaceNotFoundError", func() { 344 _, _, err := actor.GetSpaceByOrganizationAndName("some-org-guid", "some-space") 345 346 Expect(err).To(MatchError(SpaceNotFoundError{ 347 Name: "some-space", 348 })) 349 }) 350 }) 351 352 Context("when multiple spaces exists", func() { 353 BeforeEach(func() { 354 fakeCloudControllerClient.GetSpacesReturns( 355 []ccv2.Space{ 356 { 357 GUID: "some-space-guid", 358 Name: "some-space", 359 AllowSSH: true, 360 }, 361 { 362 GUID: "another-space-guid", 363 Name: "another-space", 364 AllowSSH: true, 365 }, 366 }, 367 nil, 368 nil, 369 ) 370 }) 371 372 It("returns MultipleSpacesFoundError", func() { 373 _, _, err := actor.GetSpaceByOrganizationAndName("some-org-guid", "some-space") 374 375 Expect(err).To(MatchError(MultipleSpacesFoundError{ 376 OrgGUID: "some-org-guid", 377 Name: "some-space", 378 })) 379 }) 380 }) 381 }) 382 }) 383 })