github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/actor/v2action/domain_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/ccerror"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/ginkgo/extensions/table"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Domain Actions", func() {
    16  	var (
    17  		actor                     *Actor
    18  		fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient
    19  	)
    20  
    21  	BeforeEach(func() {
    22  		fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient)
    23  		actor = NewActor(fakeCloudControllerClient, nil)
    24  	})
    25  
    26  	Describe("GetDomain", func() {
    27  		Context("when the domain exists and is a shared domain", func() {
    28  			var expectedDomain ccv2.Domain
    29  
    30  			BeforeEach(func() {
    31  				expectedDomain = ccv2.Domain{
    32  					GUID: "shared-domain-guid",
    33  					Name: "shared-domain",
    34  				}
    35  				fakeCloudControllerClient.GetSharedDomainReturns(expectedDomain, nil, nil)
    36  			})
    37  
    38  			It("returns the shared domain", func() {
    39  				domain, _, err := actor.GetDomain("shared-domain-guid")
    40  				Expect(err).NotTo(HaveOccurred())
    41  				Expect(domain).To(Equal(Domain(expectedDomain)))
    42  
    43  				Expect(fakeCloudControllerClient.GetSharedDomainCallCount()).To(Equal(1))
    44  				Expect(fakeCloudControllerClient.GetSharedDomainArgsForCall(0)).To(Equal("shared-domain-guid"))
    45  			})
    46  		})
    47  
    48  		Context("when the domain exists and is a private domain", func() {
    49  			var expectedDomain ccv2.Domain
    50  
    51  			BeforeEach(func() {
    52  				expectedDomain = ccv2.Domain{
    53  					GUID: "private-domain-guid",
    54  					Name: "private-domain",
    55  				}
    56  				fakeCloudControllerClient.GetSharedDomainReturns(ccv2.Domain{}, nil, ccerror.ResourceNotFoundError{})
    57  				fakeCloudControllerClient.GetPrivateDomainReturns(expectedDomain, nil, nil)
    58  			})
    59  
    60  			It("returns the private domain", func() {
    61  				domain, _, err := actor.GetDomain("private-domain-guid")
    62  				Expect(err).NotTo(HaveOccurred())
    63  				Expect(domain).To(Equal(Domain(expectedDomain)))
    64  
    65  				Expect(fakeCloudControllerClient.GetSharedDomainCallCount()).To(Equal(1))
    66  				Expect(fakeCloudControllerClient.GetSharedDomainArgsForCall(0)).To(Equal("private-domain-guid"))
    67  				Expect(fakeCloudControllerClient.GetPrivateDomainCallCount()).To(Equal(1))
    68  				Expect(fakeCloudControllerClient.GetPrivateDomainArgsForCall(0)).To(Equal("private-domain-guid"))
    69  			})
    70  		})
    71  
    72  		Context("when the domain does not exist", func() {
    73  			var expectedErr DomainNotFoundError
    74  
    75  			BeforeEach(func() {
    76  				fakeCloudControllerClient.GetSharedDomainReturns(ccv2.Domain{}, nil, ccerror.ResourceNotFoundError{})
    77  				fakeCloudControllerClient.GetPrivateDomainReturns(ccv2.Domain{}, nil, ccerror.ResourceNotFoundError{})
    78  			})
    79  
    80  			It("returns a DomainNotFoundError", func() {
    81  				domain, _, err := actor.GetDomain("private-domain-guid")
    82  				Expect(err).To(MatchError(expectedErr))
    83  				Expect(domain).To(Equal(Domain(ccv2.Domain{})))
    84  			})
    85  		})
    86  
    87  		DescribeTable("when there are warnings and errors", func(
    88  			stubGetSharedDomain func(),
    89  			stubGetPrivateDomain func(),
    90  			expectedDomain Domain,
    91  			expectedWarnings Warnings,
    92  			expectingError bool,
    93  			expectedErr error,
    94  		) {
    95  			stubGetSharedDomain()
    96  			stubGetPrivateDomain()
    97  			domain, warnings, err := actor.GetDomain("some-domain-guid")
    98  			Expect(domain).To(Equal(expectedDomain))
    99  			Expect(warnings).To(ConsistOf(expectedWarnings))
   100  			if expectingError {
   101  				Expect(err).To(MatchError(expectedErr))
   102  			} else {
   103  				Expect(err).To(Not(HaveOccurred()))
   104  			}
   105  		},
   106  
   107  			Entry(
   108  				"shared domain warning and error",
   109  				func() {
   110  					fakeCloudControllerClient.GetSharedDomainReturns(ccv2.Domain{}, []string{"shared-domain-warning"}, errors.New("shared domain error"))
   111  				},
   112  				func() { fakeCloudControllerClient.GetPrivateDomainReturns(ccv2.Domain{}, nil, nil) },
   113  				Domain{},
   114  				Warnings{"shared-domain-warning"},
   115  				true,
   116  				errors.New("shared domain error"),
   117  			),
   118  
   119  			Entry(
   120  				"shared domain warning and resource not found; private domain warning & error",
   121  				func() {
   122  					fakeCloudControllerClient.GetSharedDomainReturns(ccv2.Domain{}, []string{"shared-domain-warning"}, ccerror.ResourceNotFoundError{})
   123  				},
   124  				func() {
   125  					fakeCloudControllerClient.GetPrivateDomainReturns(ccv2.Domain{}, []string{"private-domain-warning"}, errors.New("private domain error"))
   126  				},
   127  				Domain{},
   128  				Warnings{"shared-domain-warning", "private-domain-warning"},
   129  				true,
   130  				errors.New("private domain error"),
   131  			),
   132  		)
   133  	})
   134  
   135  	Describe("GetSharedDomain", func() {
   136  		Context("when the shared domain exists", func() {
   137  			var expectedDomain ccv2.Domain
   138  
   139  			BeforeEach(func() {
   140  				expectedDomain = ccv2.Domain{
   141  					GUID: "shared-domain-guid",
   142  					Name: "shared-domain",
   143  				}
   144  				fakeCloudControllerClient.GetSharedDomainReturns(expectedDomain, ccv2.Warnings{"shared domain warning"}, nil)
   145  			})
   146  
   147  			It("returns the shared domain and all warnings", func() {
   148  				domain, warnings, err := actor.GetSharedDomain("shared-domain-guid")
   149  				Expect(err).NotTo(HaveOccurred())
   150  				Expect(domain).To(Equal(Domain(expectedDomain)))
   151  				Expect(warnings).To(ConsistOf("shared domain warning"))
   152  
   153  				Expect(fakeCloudControllerClient.GetSharedDomainCallCount()).To(Equal(1))
   154  				Expect(fakeCloudControllerClient.GetSharedDomainArgsForCall(0)).To(Equal("shared-domain-guid"))
   155  			})
   156  
   157  			Context("when the domain has been looked up multiple times", func() {
   158  				It("caches the domain", func() {
   159  					domain, warnings, err := actor.GetSharedDomain("shared-domain-guid")
   160  					Expect(err).NotTo(HaveOccurred())
   161  					Expect(domain).To(Equal(Domain(expectedDomain)))
   162  					Expect(warnings).To(ConsistOf("shared domain warning"))
   163  
   164  					domain, warnings, err = actor.GetSharedDomain("shared-domain-guid")
   165  					Expect(err).NotTo(HaveOccurred())
   166  					Expect(domain).To(Equal(Domain(expectedDomain)))
   167  					Expect(warnings).To(BeEmpty())
   168  
   169  					Expect(fakeCloudControllerClient.GetSharedDomainCallCount()).To(Equal(1))
   170  				})
   171  			})
   172  		})
   173  
   174  		Context("when the API returns a not found error", func() {
   175  			var expectedErr DomainNotFoundError
   176  
   177  			BeforeEach(func() {
   178  				fakeCloudControllerClient.GetSharedDomainReturns(ccv2.Domain{}, ccv2.Warnings{"shared domain warning"}, ccerror.ResourceNotFoundError{})
   179  			})
   180  
   181  			It("returns a DomainNotFoundError and all warnings", func() {
   182  				domain, warnings, err := actor.GetSharedDomain("shared-domain-guid")
   183  				Expect(err).To(MatchError(expectedErr))
   184  				Expect(domain).To(Equal(Domain{}))
   185  				Expect(warnings).To(ConsistOf("shared domain warning"))
   186  			})
   187  		})
   188  
   189  		Context("when the API returns any other error", func() {
   190  			var expectedErr error
   191  
   192  			BeforeEach(func() {
   193  				expectedErr = errors.New("shared domain error")
   194  				fakeCloudControllerClient.GetSharedDomainReturns(ccv2.Domain{}, ccv2.Warnings{"shared domain warning"}, expectedErr)
   195  			})
   196  
   197  			It("returns the same error and all warnings", func() {
   198  				domain, warnings, err := actor.GetSharedDomain("shared-domain-guid")
   199  				Expect(err).To(MatchError(expectedErr))
   200  				Expect(domain).To(Equal(Domain{}))
   201  				Expect(warnings).To(ConsistOf("shared domain warning"))
   202  			})
   203  		})
   204  	})
   205  
   206  	Describe("GetPrivateDomain", func() {
   207  		Context("when the private domain exists", func() {
   208  			var expectedDomain ccv2.Domain
   209  
   210  			BeforeEach(func() {
   211  				expectedDomain = ccv2.Domain{
   212  					GUID: "private-domain-guid",
   213  					Name: "private-domain",
   214  				}
   215  				fakeCloudControllerClient.GetPrivateDomainReturns(expectedDomain, ccv2.Warnings{"private domain warning"}, nil)
   216  			})
   217  
   218  			It("returns the private domain and all warnings", func() {
   219  				domain, warnings, err := actor.GetPrivateDomain("private-domain-guid")
   220  				Expect(err).NotTo(HaveOccurred())
   221  				Expect(domain).To(Equal(Domain(expectedDomain)))
   222  				Expect(warnings).To(ConsistOf("private domain warning"))
   223  
   224  				Expect(fakeCloudControllerClient.GetPrivateDomainCallCount()).To(Equal(1))
   225  				Expect(fakeCloudControllerClient.GetPrivateDomainArgsForCall(0)).To(Equal("private-domain-guid"))
   226  			})
   227  
   228  			Context("when the domain has been looked up multiple times", func() {
   229  				It("caches the domain", func() {
   230  					domain, warnings, err := actor.GetPrivateDomain("private-domain-guid")
   231  					Expect(err).NotTo(HaveOccurred())
   232  					Expect(domain).To(Equal(Domain(expectedDomain)))
   233  					Expect(warnings).To(ConsistOf("private domain warning"))
   234  
   235  					domain, warnings, err = actor.GetPrivateDomain("private-domain-guid")
   236  					Expect(err).NotTo(HaveOccurred())
   237  					Expect(domain).To(Equal(Domain(expectedDomain)))
   238  					Expect(warnings).To(BeEmpty())
   239  
   240  					Expect(fakeCloudControllerClient.GetPrivateDomainCallCount()).To(Equal(1))
   241  				})
   242  			})
   243  		})
   244  
   245  		Context("when the API returns a not found error", func() {
   246  			var expectedErr DomainNotFoundError
   247  
   248  			BeforeEach(func() {
   249  				fakeCloudControllerClient.GetPrivateDomainReturns(ccv2.Domain{}, ccv2.Warnings{"private domain warning"}, ccerror.ResourceNotFoundError{})
   250  			})
   251  
   252  			It("returns a DomainNotFoundError and all warnings", func() {
   253  				domain, warnings, err := actor.GetPrivateDomain("private-domain-guid")
   254  				Expect(err).To(MatchError(expectedErr))
   255  				Expect(domain).To(Equal(Domain{}))
   256  				Expect(warnings).To(ConsistOf("private domain warning"))
   257  			})
   258  		})
   259  
   260  		Context("when the API returns any other error", func() {
   261  			var expectedErr error
   262  
   263  			BeforeEach(func() {
   264  				expectedErr = errors.New("private domain error")
   265  				fakeCloudControllerClient.GetPrivateDomainReturns(ccv2.Domain{}, ccv2.Warnings{"private domain warning"}, expectedErr)
   266  			})
   267  
   268  			It("returns the same error and all warnings", func() {
   269  				domain, warnings, err := actor.GetPrivateDomain("private-domain-guid")
   270  				Expect(err).To(MatchError(expectedErr))
   271  				Expect(domain).To(Equal(Domain{}))
   272  				Expect(warnings).To(ConsistOf("private domain warning"))
   273  			})
   274  		})
   275  	})
   276  
   277  	Describe("GetOrganizationDomains", func() {
   278  		Context("when the organization has both shared and private domains", func() {
   279  			BeforeEach(func() {
   280  				sharedDomain := ccv2.Domain{
   281  					Name: "some-shared-domain",
   282  				}
   283  				privateDomain := ccv2.Domain{
   284  					Name: "some-private-domain",
   285  				}
   286  				otherPrivateDomain := ccv2.Domain{
   287  					Name: "some-other-private-domain",
   288  				}
   289  
   290  				fakeCloudControllerClient.GetSharedDomainsReturns([]ccv2.Domain{sharedDomain}, ccv2.Warnings{"shared domains warning"}, nil)
   291  				fakeCloudControllerClient.GetOrganizationPrivateDomainsReturns([]ccv2.Domain{privateDomain, otherPrivateDomain}, ccv2.Warnings{"private domains warning"}, nil)
   292  			})
   293  
   294  			It("returns a concatenated slice with private then shared domains", func() {
   295  				domains, warnings, err := actor.GetOrganizationDomains("some-org-guid")
   296  				Expect(err).NotTo(HaveOccurred())
   297  				Expect(domains).To(Equal([]Domain{
   298  					{Name: "some-shared-domain"},
   299  					{Name: "some-private-domain"},
   300  					{Name: "some-other-private-domain"},
   301  				}))
   302  				Expect(warnings).To(ConsistOf("shared domains warning", "private domains warning"))
   303  
   304  				Expect(fakeCloudControllerClient.GetSharedDomainsCallCount()).To(Equal(1))
   305  
   306  				Expect(fakeCloudControllerClient.GetOrganizationPrivateDomainsCallCount()).To(Equal(1))
   307  				orgGUID, query := fakeCloudControllerClient.GetOrganizationPrivateDomainsArgsForCall(0)
   308  				Expect(orgGUID).To(Equal("some-org-guid"))
   309  				Expect(query).To(BeEmpty())
   310  			})
   311  		})
   312  
   313  		Context("when get shared domains returns an error", func() {
   314  			var expectedErr error
   315  
   316  			BeforeEach(func() {
   317  				expectedErr = errors.New("shared domains error")
   318  				fakeCloudControllerClient.GetSharedDomainsReturns([]ccv2.Domain{}, ccv2.Warnings{"shared domains warning"}, expectedErr)
   319  			})
   320  
   321  			It("returns that error", func() {
   322  				domains, warnings, err := actor.GetOrganizationDomains("some-org-guid")
   323  				Expect(err).To(MatchError(expectedErr))
   324  				Expect(domains).To(Equal([]Domain{}))
   325  				Expect(warnings).To(ConsistOf("shared domains warning"))
   326  			})
   327  		})
   328  
   329  		Context("when get organization private domains returns an error", func() {
   330  			var expectedErr error
   331  
   332  			BeforeEach(func() {
   333  				expectedErr = errors.New("private domains error")
   334  				fakeCloudControllerClient.GetOrganizationPrivateDomainsReturns([]ccv2.Domain{}, ccv2.Warnings{"private domains warning"}, expectedErr)
   335  			})
   336  
   337  			It("returns that error", func() {
   338  				domains, warnings, err := actor.GetOrganizationDomains("some-org-guid")
   339  				Expect(err).To(MatchError(expectedErr))
   340  				Expect(domains).To(Equal([]Domain{}))
   341  				Expect(warnings).To(ConsistOf("private domains warning"))
   342  			})
   343  		})
   344  	})
   345  })