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  })