github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/actor/v7action/organization_test.go (about)

     1  package v7action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	. "code.cloudfoundry.org/cli/actor/v7action"
     8  	"code.cloudfoundry.org/cli/actor/v7action/v7actionfakes"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
    10  
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Organization Actions", func() {
    16  	var (
    17  		actor                     *Actor
    18  		fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient
    19  	)
    20  
    21  	BeforeEach(func() {
    22  		fakeCloudControllerClient = new(v7actionfakes.FakeCloudControllerClient)
    23  		actor = NewActor(fakeCloudControllerClient, nil, nil, nil, nil)
    24  	})
    25  
    26  	Describe("GetOrganizations", func() {
    27  		var (
    28  			ccv3Organizations []ccv3.Organization
    29  			organizations     []Organization
    30  
    31  			organization1Name string
    32  			organization1GUID string
    33  
    34  			organization2Name string
    35  			organization2GUID string
    36  
    37  			organization3Name string
    38  			organization3GUID string
    39  
    40  			warnings   Warnings
    41  			executeErr error
    42  		)
    43  
    44  		BeforeEach(func() {
    45  			ccv3Organizations = []ccv3.Organization{
    46  				{Name: organization1Name, GUID: organization1GUID},
    47  				{Name: organization2Name, GUID: organization2GUID},
    48  				{Name: organization3Name, GUID: organization3GUID},
    49  			}
    50  		})
    51  
    52  		When("the API layer call is successful", func() {
    53  
    54  			BeforeEach(func() {
    55  				fakeCloudControllerClient.GetOrganizationsReturns(
    56  					ccv3Organizations,
    57  					ccv3.Warnings{"some-organizations-warning"},
    58  					nil,
    59  				)
    60  			})
    61  
    62  			JustBeforeEach(func() {
    63  				organizations, warnings, executeErr = actor.GetOrganizations("")
    64  			})
    65  
    66  			It("does not error", func() {
    67  				Expect(executeErr).ToNot(HaveOccurred())
    68  			})
    69  
    70  			It("does not pass through the label selector", func() {
    71  				Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1))
    72  				expectedQuery := []ccv3.Query{
    73  					{Key: ccv3.OrderBy, Values: []string{ccv3.NameOrder}},
    74  				}
    75  				actualQuery := fakeCloudControllerClient.GetOrganizationsArgsForCall(0)
    76  				Expect(actualQuery).To(Equal(expectedQuery))
    77  			})
    78  
    79  			It("returns back the organizations and warnings", func() {
    80  				Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1))
    81  
    82  				Expect(organizations).To(ConsistOf(
    83  					Organization{Name: organization1Name, GUID: organization1GUID},
    84  					Organization{Name: organization2Name, GUID: organization2GUID},
    85  					Organization{Name: organization3Name, GUID: organization3GUID},
    86  				))
    87  				Expect(warnings).To(ConsistOf("some-organizations-warning"))
    88  			})
    89  		})
    90  
    91  		When("a label selector is provided", func() {
    92  			JustBeforeEach(func() {
    93  				organizations, warnings, executeErr = actor.GetOrganizations("some-label-selector")
    94  			})
    95  
    96  			It("passes the label selector through", func() {
    97  				Expect(executeErr).ToNot(HaveOccurred())
    98  
    99  				Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1))
   100  
   101  				expectedQuery := []ccv3.Query{
   102  					{Key: ccv3.OrderBy, Values: []string{ccv3.NameOrder}},
   103  					{Key: ccv3.LabelSelectorFilter, Values: []string{"some-label-selector"}},
   104  				}
   105  				actualQuery := fakeCloudControllerClient.GetOrganizationsArgsForCall(0)
   106  				Expect(actualQuery).To(Equal(expectedQuery))
   107  			})
   108  
   109  		})
   110  
   111  		When("when the API layer call returns an error", func() {
   112  			BeforeEach(func() {
   113  				fakeCloudControllerClient.GetOrganizationsReturns(
   114  					[]ccv3.Organization{},
   115  					ccv3.Warnings{"some-organizations-warning"},
   116  					errors.New("some-organizations-error"),
   117  				)
   118  			})
   119  
   120  			JustBeforeEach(func() {
   121  				organizations, warnings, executeErr = actor.GetOrganizations("")
   122  			})
   123  
   124  			It("returns the error and prints warnings", func() {
   125  				Expect(executeErr).To(MatchError("some-organizations-error"))
   126  				Expect(warnings).To(ConsistOf("some-organizations-warning"))
   127  				Expect(organizations).To(ConsistOf([]Organization{}))
   128  
   129  				Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1))
   130  			})
   131  
   132  		})
   133  	})
   134  
   135  	Describe("GetOrganizationByGUID", func() {
   136  		When("the org exists", func() {
   137  			BeforeEach(func() {
   138  				fakeCloudControllerClient.GetOrganizationReturns(
   139  					ccv3.Organization{
   140  						Name: "some-org-name",
   141  						GUID: "some-org-guid",
   142  					},
   143  					ccv3.Warnings{"some-warning"},
   144  					nil,
   145  				)
   146  			})
   147  
   148  			It("returns the organization and warnings", func() {
   149  				org, warnings, err := actor.GetOrganizationByGUID("some-org-guid")
   150  				Expect(err).ToNot(HaveOccurred())
   151  				Expect(org).To(Equal(Organization{
   152  					Name: "some-org-name",
   153  					GUID: "some-org-guid",
   154  				}))
   155  				Expect(warnings).To(ConsistOf("some-warning"))
   156  
   157  				Expect(fakeCloudControllerClient.GetOrganizationCallCount()).To(Equal(1))
   158  				Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(0)).To(Equal(
   159  					"some-org-guid",
   160  				))
   161  			})
   162  		})
   163  
   164  		When("the cloud controller client returns an error", func() {
   165  			var expectedError error
   166  
   167  			BeforeEach(func() {
   168  				expectedError = errors.New("I am a CloudControllerClient Error")
   169  				fakeCloudControllerClient.GetOrganizationReturns(
   170  					ccv3.Organization{},
   171  					ccv3.Warnings{"some-warning"},
   172  					expectedError)
   173  			})
   174  
   175  			It("returns the warnings and the error", func() {
   176  				_, warnings, err := actor.GetOrganizationByGUID("some-org-guid")
   177  				Expect(warnings).To(ConsistOf("some-warning"))
   178  				Expect(err).To(MatchError(expectedError))
   179  			})
   180  		})
   181  	})
   182  
   183  	Describe("GetOrganizationByName", func() {
   184  		When("the org exists", func() {
   185  			BeforeEach(func() {
   186  				fakeCloudControllerClient.GetOrganizationsReturns(
   187  					[]ccv3.Organization{
   188  						{
   189  							Name: "some-org-name",
   190  							GUID: "some-org-guid",
   191  						},
   192  					},
   193  					ccv3.Warnings{"some-warning"},
   194  					nil,
   195  				)
   196  			})
   197  
   198  			It("returns the organization and warnings", func() {
   199  				org, warnings, err := actor.GetOrganizationByName("some-org-name")
   200  				Expect(err).ToNot(HaveOccurred())
   201  				Expect(org).To(Equal(Organization{
   202  					Name: "some-org-name",
   203  					GUID: "some-org-guid",
   204  				}))
   205  				Expect(warnings).To(ConsistOf("some-warning"))
   206  
   207  				Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1))
   208  				Expect(fakeCloudControllerClient.GetOrganizationsArgsForCall(0)).To(ConsistOf(
   209  					ccv3.Query{Key: ccv3.NameFilter, Values: []string{"some-org-name"}},
   210  				))
   211  			})
   212  		})
   213  
   214  		When("the cloud controller client returns an error", func() {
   215  			var expectedError error
   216  
   217  			BeforeEach(func() {
   218  				expectedError = errors.New("I am a CloudControllerClient Error")
   219  				fakeCloudControllerClient.GetOrganizationsReturns(
   220  					[]ccv3.Organization{},
   221  					ccv3.Warnings{"some-warning"},
   222  					expectedError)
   223  			})
   224  
   225  			It("returns the warnings and the error", func() {
   226  				_, warnings, err := actor.GetOrganizationByName("some-org-name")
   227  				Expect(warnings).To(ConsistOf("some-warning"))
   228  				Expect(err).To(MatchError(expectedError))
   229  			})
   230  		})
   231  	})
   232  
   233  	Describe("GetDefaultDomain", func() {
   234  		var (
   235  			domain     Domain
   236  			warnings   Warnings
   237  			executeErr error
   238  
   239  			orgGUID = "org-guid"
   240  		)
   241  
   242  		JustBeforeEach(func() {
   243  			domain, warnings, executeErr = actor.GetDefaultDomain(orgGUID)
   244  		})
   245  
   246  		When("the api call is successful", func() {
   247  			BeforeEach(func() {
   248  				fakeCloudControllerClient.GetDefaultDomainReturns(
   249  					ccv3.Domain{
   250  						Name: "some-domain-name",
   251  						GUID: "some-domain-guid",
   252  					},
   253  					ccv3.Warnings{"some-warning"},
   254  					nil,
   255  				)
   256  			})
   257  
   258  			It("returns the domain and warnings", func() {
   259  				Expect(executeErr).ToNot(HaveOccurred())
   260  				Expect(domain).To(Equal(Domain{
   261  					Name: "some-domain-name",
   262  					GUID: "some-domain-guid",
   263  				}))
   264  				Expect(warnings).To(ConsistOf("some-warning"))
   265  
   266  				Expect(fakeCloudControllerClient.GetDefaultDomainCallCount()).To(Equal(1))
   267  				Expect(fakeCloudControllerClient.GetDefaultDomainArgsForCall(0)).To(Equal(orgGUID))
   268  			})
   269  		})
   270  
   271  		When("the cloud controller client returns an error", func() {
   272  			var expectedError error
   273  
   274  			BeforeEach(func() {
   275  				expectedError = errors.New("I am a CloudControllerClient Error")
   276  				fakeCloudControllerClient.GetDefaultDomainReturns(
   277  					ccv3.Domain{},
   278  					ccv3.Warnings{"some-warning"},
   279  					expectedError)
   280  			})
   281  
   282  			It("returns the warnings and the error", func() {
   283  				Expect(warnings).To(ConsistOf("some-warning"))
   284  				Expect(executeErr).To(MatchError(expectedError))
   285  			})
   286  		})
   287  	})
   288  
   289  	When("the org does not exist", func() {
   290  		BeforeEach(func() {
   291  			fakeCloudControllerClient.GetOrganizationsReturns(
   292  				[]ccv3.Organization{},
   293  				ccv3.Warnings{"some-warning"},
   294  				nil,
   295  			)
   296  		})
   297  
   298  		It("returns an OrganizationNotFoundError and the warnings", func() {
   299  			_, warnings, err := actor.GetOrganizationByName("some-org-name")
   300  			Expect(warnings).To(ConsistOf("some-warning"))
   301  			Expect(err).To(MatchError(actionerror.OrganizationNotFoundError{Name: "some-org-name"}))
   302  		})
   303  	})
   304  
   305  	Describe("CreateOrganization", func() {
   306  		var (
   307  			org      Organization
   308  			warnings Warnings
   309  			err      error
   310  		)
   311  
   312  		JustBeforeEach(func() {
   313  			org, warnings, err = actor.CreateOrganization("some-org-name")
   314  		})
   315  
   316  		When("the org is created successfully", func() {
   317  			BeforeEach(func() {
   318  				fakeCloudControllerClient.CreateOrganizationReturns(
   319  					ccv3.Organization{Name: "some-org-name", GUID: "some-org-guid"},
   320  					ccv3.Warnings{"warning-1", "warning-2"},
   321  					nil,
   322  				)
   323  			})
   324  
   325  			It("returns the org resource", func() {
   326  				Expect(err).NotTo(HaveOccurred())
   327  				Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   328  				Expect(org).To(Equal(Organization{Name: "some-org-name", GUID: "some-org-guid"}))
   329  			})
   330  		})
   331  
   332  		When("the request fails", func() {
   333  			BeforeEach(func() {
   334  				fakeCloudControllerClient.CreateOrganizationReturns(
   335  					ccv3.Organization{},
   336  					ccv3.Warnings{"warning-1", "warning-2"},
   337  					errors.New("create-org-failed"),
   338  				)
   339  			})
   340  
   341  			It("returns warnings and the client error", func() {
   342  				Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   343  				Expect(err).To(MatchError("create-org-failed"))
   344  			})
   345  		})
   346  	})
   347  
   348  	Describe("DeleteOrganization", func() {
   349  		var (
   350  			warnings Warnings
   351  			err      error
   352  		)
   353  
   354  		JustBeforeEach(func() {
   355  			warnings, err = actor.DeleteOrganization("some-org")
   356  		})
   357  
   358  		When("the org is not found", func() {
   359  			BeforeEach(func() {
   360  				fakeCloudControllerClient.GetOrganizationsReturns(
   361  					[]ccv3.Organization{},
   362  					ccv3.Warnings{
   363  						"warning-1",
   364  						"warning-2",
   365  					},
   366  					nil,
   367  				)
   368  			})
   369  
   370  			It("returns an OrganizationNotFoundError", func() {
   371  				Expect(err).To(MatchError(actionerror.OrganizationNotFoundError{Name: "some-org"}))
   372  				Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   373  			})
   374  		})
   375  
   376  		When("the org is found", func() {
   377  			BeforeEach(func() {
   378  				fakeCloudControllerClient.GetOrganizationsReturns(
   379  					[]ccv3.Organization{{Name: "some-org", GUID: "some-org-guid"}},
   380  					ccv3.Warnings{"warning-1", "warning-2"},
   381  					nil,
   382  				)
   383  			})
   384  
   385  			When("the delete returns an error", func() {
   386  				var expectedErr error
   387  
   388  				BeforeEach(func() {
   389  					expectedErr = errors.New("some delete space error")
   390  					fakeCloudControllerClient.DeleteOrganizationReturns(
   391  						ccv3.JobURL(""),
   392  						ccv3.Warnings{"warning-5", "warning-6"},
   393  						expectedErr,
   394  					)
   395  				})
   396  
   397  				It("returns the error", func() {
   398  					Expect(err).To(Equal(expectedErr))
   399  					Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-5", "warning-6"))
   400  				})
   401  			})
   402  
   403  			When("the delete returns a job", func() {
   404  				BeforeEach(func() {
   405  					fakeCloudControllerClient.DeleteOrganizationReturns(
   406  						ccv3.JobURL("some-url"),
   407  						ccv3.Warnings{"warning-5", "warning-6"},
   408  						nil,
   409  					)
   410  				})
   411  
   412  				When("polling errors", func() {
   413  					var expectedErr error
   414  
   415  					BeforeEach(func() {
   416  						expectedErr = errors.New("Never expected, by anyone")
   417  						fakeCloudControllerClient.PollJobReturns(ccv3.Warnings{"warning-7", "warning-8"}, expectedErr)
   418  					})
   419  
   420  					It("returns the error", func() {
   421  						Expect(err).To(Equal(expectedErr))
   422  						Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-5", "warning-6", "warning-7", "warning-8"))
   423  					})
   424  				})
   425  
   426  				When("the job is successful", func() {
   427  					BeforeEach(func() {
   428  						fakeCloudControllerClient.PollJobReturns(ccv3.Warnings{"warning-7", "warning-8"}, nil)
   429  					})
   430  
   431  					It("returns warnings and no error", func() {
   432  						Expect(err).ToNot(HaveOccurred())
   433  						Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-5", "warning-6", "warning-7", "warning-8"))
   434  
   435  						Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1))
   436  						Expect(fakeCloudControllerClient.GetOrganizationsArgsForCall(0)).To(Equal([]ccv3.Query{{
   437  							Key:    ccv3.NameFilter,
   438  							Values: []string{"some-org"},
   439  						}}))
   440  
   441  						Expect(fakeCloudControllerClient.DeleteOrganizationCallCount()).To(Equal(1))
   442  						Expect(fakeCloudControllerClient.DeleteOrganizationArgsForCall(0)).To(Equal("some-org-guid"))
   443  
   444  						Expect(fakeCloudControllerClient.PollJobCallCount()).To(Equal(1))
   445  						Expect(fakeCloudControllerClient.PollJobArgsForCall(0)).To(Equal(ccv3.JobURL("some-url")))
   446  					})
   447  				})
   448  			})
   449  		})
   450  	})
   451  
   452  	Describe("RenameOrganization", func() {
   453  		var (
   454  			oldOrgName = "old-and-stale-org-name"
   455  			newOrgName = "fresh-and-new-org-name"
   456  
   457  			org        Organization
   458  			warnings   Warnings
   459  			executeErr error
   460  		)
   461  
   462  		JustBeforeEach(func() {
   463  			org, warnings, executeErr = actor.RenameOrganization(
   464  				oldOrgName,
   465  				newOrgName,
   466  			)
   467  		})
   468  
   469  		It("delegate to the actor to get the org", func() {
   470  			// assert on the underlying client call because we dont have a fake actor
   471  			Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1))
   472  		})
   473  
   474  		When("getting the org fails", func() {
   475  			BeforeEach(func() {
   476  				fakeCloudControllerClient.GetOrganizationsReturns(
   477  					nil,
   478  					ccv3.Warnings{"get-org-warning"},
   479  					errors.New("get-org-error"),
   480  				)
   481  			})
   482  
   483  			It("returns the error and warnings", func() {
   484  				Expect(executeErr).To(MatchError("get-org-error"))
   485  				Expect(warnings).To(ConsistOf("get-org-warning"))
   486  			})
   487  		})
   488  
   489  		When("getting the org succeeds", func() {
   490  			BeforeEach(func() {
   491  				fakeCloudControllerClient.GetOrganizationsReturns(
   492  					[]ccv3.Organization{{Name: oldOrgName, GUID: "org-guid"}},
   493  					ccv3.Warnings{"get-org-warning"},
   494  					nil,
   495  				)
   496  			})
   497  
   498  			It("delegates to the client to update the org", func() {
   499  				Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1))
   500  				Expect(fakeCloudControllerClient.UpdateOrganizationCallCount()).To(Equal(1))
   501  				Expect(fakeCloudControllerClient.UpdateOrganizationArgsForCall(0)).To(Equal(ccv3.Organization{
   502  					GUID: "org-guid",
   503  					Name: newOrgName,
   504  				}))
   505  			})
   506  
   507  			When("updating the org fails", func() {
   508  				BeforeEach(func() {
   509  					fakeCloudControllerClient.UpdateOrganizationReturns(
   510  						ccv3.Organization{},
   511  						ccv3.Warnings{"update-org-warning"},
   512  						errors.New("update-org-error"),
   513  					)
   514  				})
   515  
   516  				It("returns an error and all warnings", func() {
   517  					Expect(executeErr).To(MatchError("update-org-error"))
   518  					Expect(warnings).To(ConsistOf("get-org-warning", "update-org-warning"))
   519  				})
   520  
   521  			})
   522  
   523  			When("updating the org succeeds", func() {
   524  				BeforeEach(func() {
   525  					fakeCloudControllerClient.UpdateOrganizationReturns(
   526  						ccv3.Organization{Name: newOrgName, GUID: "org-guid"},
   527  						ccv3.Warnings{"update-org-warning"},
   528  						nil,
   529  					)
   530  				})
   531  
   532  				It("returns warnings and no error", func() {
   533  					Expect(executeErr).ToNot(HaveOccurred())
   534  					Expect(warnings).To(ConsistOf("get-org-warning", "update-org-warning"))
   535  					Expect(org).To(Equal(Organization{Name: newOrgName, GUID: "org-guid"}))
   536  				})
   537  			})
   538  		})
   539  	})
   540  })