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