github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+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"
     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, cloudcontroller.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, cloudcontroller.ResourceNotFoundError{})
    77  				fakeCloudControllerClient.GetPrivateDomainReturns(ccv2.Domain{}, nil, cloudcontroller.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"}, cloudcontroller.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  		})
   154  
   155  		Context("when the API returns a not found error", func() {
   156  			var expectedErr DomainNotFoundError
   157  
   158  			BeforeEach(func() {
   159  				fakeCloudControllerClient.GetSharedDomainReturns(ccv2.Domain{}, ccv2.Warnings{"shared domain warning"}, cloudcontroller.ResourceNotFoundError{})
   160  			})
   161  
   162  			It("returns a DomainNotFoundError and all warnings", func() {
   163  				domain, warnings, err := actor.GetSharedDomain("shared-domain-guid")
   164  				Expect(err).To(MatchError(expectedErr))
   165  				Expect(domain).To(Equal(Domain{}))
   166  				Expect(warnings).To(ConsistOf("shared domain warning"))
   167  			})
   168  		})
   169  
   170  		Context("when the API returns any other error", func() {
   171  			var expectedErr error
   172  
   173  			BeforeEach(func() {
   174  				expectedErr = errors.New("shared domain error")
   175  				fakeCloudControllerClient.GetSharedDomainReturns(ccv2.Domain{}, ccv2.Warnings{"shared domain warning"}, expectedErr)
   176  			})
   177  
   178  			It("returns the same error and all warnings", func() {
   179  				domain, warnings, err := actor.GetSharedDomain("shared-domain-guid")
   180  				Expect(err).To(MatchError(expectedErr))
   181  				Expect(domain).To(Equal(Domain{}))
   182  				Expect(warnings).To(ConsistOf("shared domain warning"))
   183  			})
   184  		})
   185  	})
   186  
   187  	Describe("GetPrivateDomain", func() {
   188  		Context("when the private domain exists", func() {
   189  			var expectedDomain ccv2.Domain
   190  
   191  			BeforeEach(func() {
   192  				expectedDomain = ccv2.Domain{
   193  					GUID: "private-domain-guid",
   194  					Name: "private-domain",
   195  				}
   196  				fakeCloudControllerClient.GetPrivateDomainReturns(expectedDomain, ccv2.Warnings{"private domain warning"}, nil)
   197  			})
   198  
   199  			It("returns the private domain and all warnings", func() {
   200  				domain, warnings, err := actor.GetPrivateDomain("private-domain-guid")
   201  				Expect(err).NotTo(HaveOccurred())
   202  				Expect(domain).To(Equal(Domain(expectedDomain)))
   203  				Expect(warnings).To(ConsistOf("private domain warning"))
   204  			})
   205  		})
   206  
   207  		Context("when the API returns a not found error", func() {
   208  			var expectedErr DomainNotFoundError
   209  
   210  			BeforeEach(func() {
   211  				fakeCloudControllerClient.GetPrivateDomainReturns(ccv2.Domain{}, ccv2.Warnings{"private domain warning"}, cloudcontroller.ResourceNotFoundError{})
   212  			})
   213  
   214  			It("returns a DomainNotFoundError and all warnings", func() {
   215  				domain, warnings, err := actor.GetPrivateDomain("private-domain-guid")
   216  				Expect(err).To(MatchError(expectedErr))
   217  				Expect(domain).To(Equal(Domain{}))
   218  				Expect(warnings).To(ConsistOf("private domain warning"))
   219  			})
   220  		})
   221  
   222  		Context("when the API returns any other error", func() {
   223  			var expectedErr error
   224  
   225  			BeforeEach(func() {
   226  				expectedErr = errors.New("private domain error")
   227  				fakeCloudControllerClient.GetPrivateDomainReturns(ccv2.Domain{}, ccv2.Warnings{"private domain warning"}, expectedErr)
   228  			})
   229  
   230  			It("returns the same error and all warnings", func() {
   231  				domain, warnings, err := actor.GetPrivateDomain("private-domain-guid")
   232  				Expect(err).To(MatchError(expectedErr))
   233  				Expect(domain).To(Equal(Domain{}))
   234  				Expect(warnings).To(ConsistOf("private domain warning"))
   235  			})
   236  		})
   237  	})
   238  })