github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/actor/v7action/domain_test.go (about) 1 package v7action_test 2 3 import ( 4 "code.cloudfoundry.org/cli/resources" 5 "errors" 6 7 . "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/actor/v7action/v7actionfakes" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 10 "code.cloudfoundry.org/cli/types" 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 ) 14 15 var _ = Describe("Domain Actions", func() { 16 var ( 17 actor *Actor 18 fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient 19 ) 20 21 BeforeEach(func() { 22 actor, fakeCloudControllerClient, _, _, _ = NewTestActor() 23 }) 24 25 Describe("create shared domain", func() { 26 It("delegates to the cloud controller client", func() { 27 fakeCloudControllerClient.CreateDomainReturns(resources.Domain{}, ccv3.Warnings{"create-warning-1", "create-warning-2"}, errors.New("create-error")) 28 29 warnings, executeErr := actor.CreateSharedDomain("the-domain-name", true) 30 Expect(executeErr).To(MatchError("create-error")) 31 Expect(warnings).To(ConsistOf("create-warning-1", "create-warning-2")) 32 33 Expect(fakeCloudControllerClient.CreateDomainCallCount()).To(Equal(1)) 34 passedDomain := fakeCloudControllerClient.CreateDomainArgsForCall(0) 35 36 Expect(passedDomain).To(Equal( 37 resources.Domain{ 38 Name: "the-domain-name", 39 Internal: types.NullBool{IsSet: true, Value: true}, 40 }, 41 )) 42 }) 43 }) 44 45 Describe("create private domain", func() { 46 47 BeforeEach(func() { 48 fakeCloudControllerClient.GetOrganizationsReturns( 49 []resources.Organization{ 50 {GUID: "org-guid"}, 51 }, 52 ccv3.Warnings{"get-orgs-warning"}, 53 nil, 54 ) 55 56 fakeCloudControllerClient.CreateDomainReturns( 57 resources.Domain{}, 58 ccv3.Warnings{"create-warning-1", "create-warning-2"}, 59 errors.New("create-error"), 60 ) 61 }) 62 63 It("delegates to the cloud controller client", func() { 64 warnings, executeErr := actor.CreatePrivateDomain("private-domain-name", "org-name") 65 Expect(executeErr).To(MatchError("create-error")) 66 Expect(warnings).To(ConsistOf("get-orgs-warning", "create-warning-1", "create-warning-2")) 67 68 Expect(fakeCloudControllerClient.CreateDomainCallCount()).To(Equal(1)) 69 passedDomain := fakeCloudControllerClient.CreateDomainArgsForCall(0) 70 71 Expect(passedDomain).To(Equal( 72 resources.Domain{ 73 Name: "private-domain-name", 74 OrganizationGUID: "org-guid", 75 }, 76 )) 77 }) 78 }) 79 80 Describe("check if shared domain", func() { 81 When("attempting to delete a shared domain", func() { 82 BeforeEach(func() { 83 fakeCloudControllerClient.GetDomainsReturns( 84 []resources.Domain{ 85 {Name: "the-domain.com", GUID: "shared-domain-guid"}, 86 }, 87 ccv3.Warnings{"get-domains-warning"}, 88 nil, 89 ) 90 }) 91 92 It("delegates to the cloud controller client", func() { 93 warnings, executeErr := actor.CheckSharedDomain("the-domain.com") 94 Expect(executeErr).To(MatchError("Domain 'the-domain.com' is a shared domain, not a private domain.")) 95 Expect(warnings).To(ConsistOf("get-domains-warning")) 96 }) 97 }) 98 }) 99 100 Describe("delete shared domain", func() { 101 BeforeEach(func() { 102 fakeCloudControllerClient.GetDomainsReturns( 103 []resources.Domain{ 104 {Name: "the-domain.com", GUID: "domain-guid"}, 105 }, 106 ccv3.Warnings{"get-domains-warning"}, 107 nil, 108 ) 109 }) 110 111 It("delegates to the cloud controller client", func() { 112 fakeCloudControllerClient.DeleteDomainReturns(ccv3.JobURL("https://job.com"), ccv3.Warnings{"delete-warning"}, errors.New("delete-error")) 113 114 warnings, executeErr := actor.DeleteSharedDomain("the-domain.com") 115 Expect(executeErr).To(MatchError("delete-error")) 116 Expect(warnings).To(ConsistOf("get-domains-warning", "delete-warning")) 117 118 Expect(fakeCloudControllerClient.DeleteDomainCallCount()).To(Equal(1)) 119 passedDomainGuid := fakeCloudControllerClient.DeleteDomainArgsForCall(0) 120 121 Expect(passedDomainGuid).To(Equal("domain-guid")) 122 }) 123 }) 124 125 Describe("delete private domain", func() { 126 When("deleting a private domain", func() { 127 BeforeEach(func() { 128 fakeCloudControllerClient.GetDomainsReturns( 129 []resources.Domain{ 130 {Name: "the-domain.com", OrganizationGUID: "org-guid", GUID: "private-domain-guid"}, 131 }, 132 ccv3.Warnings{"get-domains-warning"}, 133 nil, 134 ) 135 }) 136 137 It("delegates to the cloud controller client", func() { 138 fakeCloudControllerClient.DeleteDomainReturns(ccv3.JobURL("https://job.com"), ccv3.Warnings{"delete-warning"}, errors.New("delete-error")) 139 140 warnings, executeErr := actor.DeletePrivateDomain("the-domain.com") 141 Expect(executeErr).To(MatchError("delete-error")) 142 Expect(warnings).To(ConsistOf("get-domains-warning", "delete-warning")) 143 144 Expect(fakeCloudControllerClient.DeleteDomainCallCount()).To(Equal(1)) 145 passedDomainGuid := fakeCloudControllerClient.DeleteDomainArgsForCall(0) 146 147 Expect(passedDomainGuid).To(Equal("private-domain-guid")) 148 }) 149 }) 150 151 }) 152 153 Describe("list domains for org", func() { 154 var ( 155 ccv3Domains []resources.Domain 156 domains []Domain 157 158 domain1Name string 159 domain1Guid string 160 161 domain2Name string 162 domain2Guid string 163 164 domain3Name string 165 domain3Guid string 166 167 org1Guid = "some-org-guid" 168 sharedFromOrgGuid = "another-org-guid" 169 warnings Warnings 170 executeErr error 171 ) 172 173 BeforeEach(func() { 174 ccv3Domains = []resources.Domain{ 175 {Name: domain1Name, GUID: domain1Guid, OrganizationGUID: org1Guid}, 176 {Name: domain2Name, GUID: domain2Guid, OrganizationGUID: org1Guid}, 177 {Name: domain3Name, GUID: domain3Guid, OrganizationGUID: sharedFromOrgGuid}, 178 } 179 }) 180 181 JustBeforeEach(func() { 182 domains, warnings, executeErr = actor.GetOrganizationDomains(org1Guid) 183 }) 184 185 When("the API layer call is successful", func() { 186 expectedOrgGUID := "some-org-guid" 187 188 BeforeEach(func() { 189 fakeCloudControllerClient.GetOrganizationDomainsReturns( 190 ccv3Domains, 191 ccv3.Warnings{"some-domain-warning"}, 192 nil, 193 ) 194 }) 195 196 It("returns back the domains and warnings", func() { 197 Expect(executeErr).ToNot(HaveOccurred()) 198 199 Expect(fakeCloudControllerClient.GetOrganizationDomainsCallCount()).To(Equal(1)) 200 actualOrgGuid, actualQuery := fakeCloudControllerClient.GetOrganizationDomainsArgsForCall(0) 201 Expect(actualOrgGuid).To(Equal(expectedOrgGUID)) 202 Expect(actualQuery).To(BeNil()) 203 204 Expect(domains).To(ConsistOf( 205 Domain{Name: domain1Name, GUID: domain1Guid, OrganizationGUID: org1Guid}, 206 Domain{Name: domain2Name, GUID: domain2Guid, OrganizationGUID: org1Guid}, 207 Domain{Name: domain3Name, GUID: domain3Guid, OrganizationGUID: sharedFromOrgGuid}, 208 )) 209 Expect(warnings).To(ConsistOf("some-domain-warning")) 210 211 }) 212 }) 213 214 When("when the API layer call returns an error", func() { 215 BeforeEach(func() { 216 fakeCloudControllerClient.GetOrganizationDomainsReturns( 217 []resources.Domain{}, 218 ccv3.Warnings{"some-domain-warning"}, 219 errors.New("list-error"), 220 ) 221 }) 222 223 It("returns the error and prints warnings", func() { 224 Expect(executeErr).To(MatchError("list-error")) 225 Expect(warnings).To(ConsistOf("some-domain-warning")) 226 Expect(domains).To(ConsistOf([]Domain{})) 227 228 Expect(fakeCloudControllerClient.GetOrganizationDomainsCallCount()).To(Equal(1)) 229 }) 230 231 }) 232 }) 233 234 Describe("get domain by name", func() { 235 var ( 236 ccv3Domains []resources.Domain 237 domain Domain 238 239 domain1Name string 240 domain1Guid string 241 242 warnings Warnings 243 executeErr error 244 ) 245 246 BeforeEach(func() { 247 ccv3Domains = []resources.Domain{ 248 {Name: domain1Name, GUID: domain1Guid}, 249 } 250 }) 251 252 JustBeforeEach(func() { 253 domain, warnings, executeErr = actor.GetDomainByName(domain1Name) 254 }) 255 256 When("the API layer call is successful", func() { 257 expectedQuery := []ccv3.Query{{Key: ccv3.NameFilter, Values: []string{domain1Name}}} 258 BeforeEach(func() { 259 fakeCloudControllerClient.GetDomainsReturns( 260 ccv3Domains, 261 ccv3.Warnings{"some-domain-warning"}, 262 nil, 263 ) 264 }) 265 266 It("returns back the domains and warnings", func() { 267 Expect(executeErr).ToNot(HaveOccurred()) 268 269 Expect(fakeCloudControllerClient.GetDomainsCallCount()).To(Equal(1)) 270 actualQuery := fakeCloudControllerClient.GetDomainsArgsForCall(0) 271 Expect(actualQuery).To(Equal(expectedQuery)) 272 273 Expect(domain).To(Equal( 274 Domain{Name: domain1Name, GUID: domain1Guid}, 275 )) 276 Expect(warnings).To(ConsistOf("some-domain-warning")) 277 278 }) 279 }) 280 281 When("when the API layer call returns an error", func() { 282 BeforeEach(func() { 283 fakeCloudControllerClient.GetDomainsReturns( 284 []resources.Domain{}, 285 ccv3.Warnings{"some-domain-warning"}, 286 errors.New("list-error"), 287 ) 288 }) 289 290 It("returns the error and prints warnings", func() { 291 Expect(executeErr).To(MatchError("list-error")) 292 Expect(warnings).To(ConsistOf("some-domain-warning")) 293 Expect(domain).To(Equal(Domain{})) 294 295 Expect(fakeCloudControllerClient.GetDomainsCallCount()).To(Equal(1)) 296 }) 297 }) 298 }) 299 300 Describe("share private domain to org", func() { 301 BeforeEach(func() { 302 fakeCloudControllerClient.GetOrganizationsReturns( 303 []resources.Organization{ 304 {GUID: "org-guid"}, 305 }, 306 ccv3.Warnings{"get-orgs-warning"}, 307 nil, 308 ) 309 310 fakeCloudControllerClient.GetDomainsReturns( 311 []resources.Domain{ 312 {Name: "private-domain.com", GUID: "private-domain-guid"}, 313 }, 314 ccv3.Warnings{"get-domains-warning"}, 315 nil, 316 ) 317 318 fakeCloudControllerClient.SharePrivateDomainToOrgsReturns( 319 ccv3.Warnings{"share-domain-warning"}, 320 nil, 321 ) 322 }) 323 324 It("delegates to the cloud controller client", func() { 325 warnings, executeErr := actor.SharePrivateDomain("private-domain.com", "org-name") 326 Expect(executeErr).To(BeNil()) 327 Expect(warnings).To(ConsistOf("share-domain-warning", "get-orgs-warning", "get-domains-warning")) 328 329 Expect(fakeCloudControllerClient.GetDomainsCallCount()).To(Equal(1)) 330 actualQuery := fakeCloudControllerClient.GetDomainsArgsForCall(0) 331 Expect(actualQuery).To(Equal([]ccv3.Query{{Key: ccv3.NameFilter, Values: []string{"private-domain.com"}}})) 332 333 Expect(fakeCloudControllerClient.SharePrivateDomainToOrgsCallCount()).To(Equal(1)) 334 domainGuid, sharedOrgs := fakeCloudControllerClient.SharePrivateDomainToOrgsArgsForCall(0) 335 Expect(domainGuid).To(Equal("private-domain-guid")) 336 Expect(sharedOrgs).To(Equal(ccv3.SharedOrgs{GUIDs: []string{"org-guid"}})) 337 }) 338 }) 339 340 Describe("unshare private domain from org", func() { 341 var ( 342 domainName string 343 orgName string 344 executeErr error 345 warnings Warnings 346 ) 347 348 JustBeforeEach(func() { 349 warnings, executeErr = actor.UnsharePrivateDomain(domainName, orgName) 350 }) 351 352 When("getting the org or domain errors", func() { 353 BeforeEach(func() { 354 fakeCloudControllerClient.GetOrganizationsReturns( 355 nil, 356 ccv3.Warnings{"get-orgs-warning"}, 357 errors.New("get-orgs-error"), 358 ) 359 }) 360 It("returns an error and the warnings", func() { 361 Expect(fakeCloudControllerClient.UnsharePrivateDomainFromOrgCallCount()).To(Equal(0)) 362 363 Expect(executeErr).To(MatchError(errors.New("get-orgs-error"))) 364 Expect(warnings).To(ConsistOf("get-orgs-warning")) 365 }) 366 }) 367 368 When("getting the guids succeeds", func() { 369 BeforeEach(func() { 370 fakeCloudControllerClient.GetDomainsReturns( 371 []resources.Domain{ 372 {Name: domainName, GUID: "private-domain-guid"}, 373 }, 374 ccv3.Warnings{"get-domains-warning"}, 375 nil, 376 ) 377 378 fakeCloudControllerClient.GetOrganizationsReturns( 379 []resources.Organization{ 380 {Name: orgName, GUID: "org-guid"}, 381 }, 382 ccv3.Warnings{"get-orgs-warning"}, 383 nil, 384 ) 385 }) 386 387 When("Unsharing the domain errors", func() { 388 BeforeEach(func() { 389 fakeCloudControllerClient.UnsharePrivateDomainFromOrgReturns( 390 ccv3.Warnings{"unshare-domain-warning"}, 391 errors.New("unsahre-domain-error"), 392 ) 393 }) 394 395 It("returns any warnings and errors", func() { 396 Expect(fakeCloudControllerClient.UnsharePrivateDomainFromOrgCallCount()).To(Equal(1)) 397 actualDomainGUID, actualOrgGUID := fakeCloudControllerClient.UnsharePrivateDomainFromOrgArgsForCall(0) 398 Expect(actualDomainGUID).To(Equal("private-domain-guid")) 399 Expect(actualOrgGUID).To(Equal("org-guid")) 400 401 Expect(executeErr).To(MatchError(errors.New("unsahre-domain-error"))) 402 Expect(warnings).To(ConsistOf("get-orgs-warning", "get-domains-warning", "unshare-domain-warning")) 403 }) 404 }) 405 406 When("everything succeeds", func() { 407 BeforeEach(func() { 408 fakeCloudControllerClient.UnsharePrivateDomainFromOrgReturns( 409 ccv3.Warnings{"unshare-domain-warning"}, 410 nil, 411 ) 412 }) 413 414 It("returns any warnings and no error", func() { 415 Expect(fakeCloudControllerClient.UnsharePrivateDomainFromOrgCallCount()).To(Equal(1)) 416 actualDomainGUID, actualOrgGUID := fakeCloudControllerClient.UnsharePrivateDomainFromOrgArgsForCall(0) 417 Expect(actualDomainGUID).To(Equal("private-domain-guid")) 418 Expect(actualOrgGUID).To(Equal("org-guid")) 419 420 Expect(executeErr).ToNot(HaveOccurred()) 421 Expect(warnings).To(ConsistOf("get-orgs-warning", "get-domains-warning", "unshare-domain-warning")) 422 }) 423 }) 424 }) 425 }) 426 427 Describe("GetDomainAndOrgByNames", func() { 428 var ( 429 orgName = "my-org" 430 domainName = "domain.com" 431 432 orgGUID string 433 domainGUID string 434 warnings Warnings 435 executeErr error 436 ) 437 JustBeforeEach(func() { 438 orgGUID, domainGUID, warnings, executeErr = actor.GetDomainAndOrgGUIDsByName(domainName, orgName) 439 }) 440 441 When("Getting the organization is not successful", func() { 442 BeforeEach(func() { 443 fakeCloudControllerClient.GetOrganizationsReturns( 444 nil, 445 ccv3.Warnings{"get-orgs-warning"}, 446 errors.New("get-orgs-error"), 447 ) 448 }) 449 450 It("returns the error and doesnt get the domain", func() { 451 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 452 actualQuery := fakeCloudControllerClient.GetOrganizationsArgsForCall(0) 453 Expect(actualQuery).To(Equal([]ccv3.Query{{Key: ccv3.NameFilter, Values: []string{orgName}}})) 454 455 Expect(fakeCloudControllerClient.GetDomainsCallCount()).To(Equal(0)) 456 457 Expect(executeErr).To(MatchError(errors.New("get-orgs-error"))) 458 Expect(warnings).To(ConsistOf("get-orgs-warning")) 459 }) 460 }) 461 462 When("getting the orgs succeeds", func() { 463 BeforeEach(func() { 464 fakeCloudControllerClient.GetOrganizationsReturns( 465 []resources.Organization{ 466 {Name: orgName, GUID: "org-guid"}, 467 }, 468 ccv3.Warnings{"get-orgs-warning"}, 469 nil, 470 ) 471 }) 472 When("Getting the domain is not successful", func() { 473 BeforeEach(func() { 474 fakeCloudControllerClient.GetDomainsReturns( 475 nil, 476 ccv3.Warnings{"get-domains-warning"}, 477 errors.New("get-domains-error"), 478 ) 479 }) 480 481 It("returns the error and doesnt get the domain", func() { 482 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 483 actualQuery := fakeCloudControllerClient.GetOrganizationsArgsForCall(0) 484 Expect(actualQuery).To(Equal([]ccv3.Query{{Key: ccv3.NameFilter, Values: []string{orgName}}})) 485 486 Expect(fakeCloudControllerClient.GetDomainsCallCount()).To(Equal(1)) 487 actualQuery = fakeCloudControllerClient.GetDomainsArgsForCall(0) 488 Expect(actualQuery).To(Equal([]ccv3.Query{{Key: ccv3.NameFilter, Values: []string{domainName}}})) 489 490 Expect(executeErr).To(MatchError(errors.New("get-domains-error"))) 491 Expect(warnings).To(ConsistOf("get-orgs-warning", "get-domains-warning")) 492 }) 493 }) 494 495 When("the api call are successful", func() { 496 BeforeEach(func() { 497 fakeCloudControllerClient.GetDomainsReturns( 498 []resources.Domain{ 499 {Name: domainName, GUID: "private-domain-guid"}, 500 }, 501 ccv3.Warnings{"get-domains-warning"}, 502 nil, 503 ) 504 }) 505 506 It("returns the GUIDs", func() { 507 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 508 actualQuery := fakeCloudControllerClient.GetOrganizationsArgsForCall(0) 509 Expect(actualQuery).To(Equal([]ccv3.Query{{Key: ccv3.NameFilter, Values: []string{orgName}}})) 510 511 Expect(fakeCloudControllerClient.GetDomainsCallCount()).To(Equal(1)) 512 actualQuery = fakeCloudControllerClient.GetDomainsArgsForCall(0) 513 Expect(actualQuery).To(Equal([]ccv3.Query{{Key: ccv3.NameFilter, Values: []string{domainName}}})) 514 515 Expect(executeErr).ToNot(HaveOccurred()) 516 Expect(warnings).To(ConsistOf("get-orgs-warning", "get-domains-warning")) 517 Expect(orgGUID).To(Equal("org-guid")) 518 Expect(domainGUID).To(Equal("private-domain-guid")) 519 }) 520 }) 521 }) 522 }) 523 })