github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/actor/v2action/organization_test.go (about)

     1  package v2action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	. "code.cloudfoundry.org/cli/actor/v2action"
     8  	"code.cloudfoundry.org/cli/actor/v2action/v2actionfakes"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
    11  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("Org Actions", func() {
    17  	var (
    18  		actor                     *Actor
    19  		fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient
    20  	)
    21  
    22  	BeforeEach(func() {
    23  		fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient)
    24  		actor = NewActor(fakeCloudControllerClient, nil, nil)
    25  	})
    26  
    27  	Describe("GetOrganization", func() {
    28  		var (
    29  			org      Organization
    30  			warnings Warnings
    31  			err      error
    32  		)
    33  
    34  		JustBeforeEach(func() {
    35  			org, warnings, err = actor.GetOrganization("some-org-guid")
    36  		})
    37  
    38  		Context("when the org exists", func() {
    39  			BeforeEach(func() {
    40  				fakeCloudControllerClient.GetOrganizationReturns(
    41  					ccv2.Organization{
    42  						GUID:                "some-org-guid",
    43  						Name:                "some-org",
    44  						QuotaDefinitionGUID: "some-quota-definition-guid",
    45  					},
    46  					ccv2.Warnings{"warning-1", "warning-2"},
    47  					nil)
    48  			})
    49  
    50  			It("returns the org and all warnings", func() {
    51  				Expect(err).ToNot(HaveOccurred())
    52  
    53  				Expect(org.GUID).To(Equal("some-org-guid"))
    54  				Expect(org.Name).To(Equal("some-org"))
    55  				Expect(org.QuotaDefinitionGUID).To(Equal("some-quota-definition-guid"))
    56  
    57  				Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
    58  
    59  				Expect(fakeCloudControllerClient.GetOrganizationCallCount()).To(Equal(1))
    60  				guid := fakeCloudControllerClient.GetOrganizationArgsForCall(0)
    61  				Expect(guid).To(Equal("some-org-guid"))
    62  			})
    63  		})
    64  
    65  		Context("when the org does not exist", func() {
    66  			BeforeEach(func() {
    67  				fakeCloudControllerClient.GetOrganizationReturns(
    68  					ccv2.Organization{},
    69  					ccv2.Warnings{"warning-1", "warning-2"},
    70  					ccerror.ResourceNotFoundError{},
    71  				)
    72  			})
    73  
    74  			It("returns warnings and OrganizationNotFoundError", func() {
    75  				Expect(err).To(MatchError(actionerror.OrganizationNotFoundError{GUID: "some-org-guid"}))
    76  				Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
    77  			})
    78  		})
    79  
    80  		Context("when client returns an error", func() {
    81  			var expectedErr error
    82  
    83  			BeforeEach(func() {
    84  				expectedErr = errors.New("some get org error")
    85  				fakeCloudControllerClient.GetOrganizationReturns(
    86  					ccv2.Organization{},
    87  					ccv2.Warnings{"warning-1", "warning-2"},
    88  					expectedErr,
    89  				)
    90  			})
    91  
    92  			It("returns warnings and the error", func() {
    93  				Expect(err).To(MatchError(expectedErr))
    94  				Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
    95  			})
    96  		})
    97  	})
    98  
    99  	Describe("GetOrganizationByName", func() {
   100  		var (
   101  			org      Organization
   102  			warnings Warnings
   103  			err      error
   104  		)
   105  
   106  		JustBeforeEach(func() {
   107  			org, warnings, err = actor.GetOrganizationByName("some-org")
   108  		})
   109  
   110  		Context("when the org exists", func() {
   111  			BeforeEach(func() {
   112  				fakeCloudControllerClient.GetOrganizationsReturns(
   113  					[]ccv2.Organization{
   114  						{GUID: "some-org-guid"},
   115  					},
   116  					ccv2.Warnings{"warning-1", "warning-2"},
   117  					nil)
   118  			})
   119  
   120  			It("returns the org and all warnings", func() {
   121  				Expect(org.GUID).To(Equal("some-org-guid"))
   122  				Expect(err).ToNot(HaveOccurred())
   123  				Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   124  
   125  				Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1))
   126  				filters := fakeCloudControllerClient.GetOrganizationsArgsForCall(0)
   127  				Expect(filters).To(Equal(
   128  					[]ccv2.Filter{{
   129  						Type:     constant.NameFilter,
   130  						Operator: constant.EqualOperator,
   131  						Values:   []string{"some-org"},
   132  					}}))
   133  			})
   134  		})
   135  
   136  		Context("when the org does not exist", func() {
   137  			BeforeEach(func() {
   138  				fakeCloudControllerClient.GetOrganizationsReturns(
   139  					[]ccv2.Organization{},
   140  					nil,
   141  					nil,
   142  				)
   143  			})
   144  
   145  			It("returns OrganizationNotFoundError", func() {
   146  				Expect(err).To(MatchError(actionerror.OrganizationNotFoundError{Name: "some-org"}))
   147  			})
   148  		})
   149  
   150  		Context("when multiple orgs exist with the same name", func() {
   151  			BeforeEach(func() {
   152  				fakeCloudControllerClient.GetOrganizationsReturns(
   153  					[]ccv2.Organization{
   154  						{GUID: "org-1-guid"},
   155  						{GUID: "org-2-guid"},
   156  					},
   157  					nil,
   158  					nil,
   159  				)
   160  			})
   161  
   162  			It("returns MultipleOrganizationsFoundError", func() {
   163  				Expect(err).To(MatchError("Organization name 'some-org' matches multiple GUIDs: org-1-guid, org-2-guid"))
   164  			})
   165  		})
   166  
   167  		Context("when an error is encountered", func() {
   168  			var returnedErr error
   169  
   170  			BeforeEach(func() {
   171  				returnedErr = errors.New("get-orgs-error")
   172  				fakeCloudControllerClient.GetOrganizationsReturns(
   173  					[]ccv2.Organization{},
   174  					ccv2.Warnings{
   175  						"warning-1",
   176  						"warning-2",
   177  					},
   178  					returnedErr,
   179  				)
   180  			})
   181  
   182  			It("returns the error and all warnings", func() {
   183  				Expect(err).To(MatchError(returnedErr))
   184  				Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   185  			})
   186  		})
   187  	})
   188  
   189  	Describe("DeleteOrganization", func() {
   190  		var (
   191  			warnings     Warnings
   192  			deleteOrgErr error
   193  			job          ccv2.Job
   194  		)
   195  
   196  		JustBeforeEach(func() {
   197  			warnings, deleteOrgErr = actor.DeleteOrganization("some-org")
   198  		})
   199  
   200  		Context("the organization is deleted successfully", func() {
   201  			BeforeEach(func() {
   202  				fakeCloudControllerClient.GetOrganizationsReturns([]ccv2.Organization{
   203  					{GUID: "some-org-guid"},
   204  				}, ccv2.Warnings{"get-org-warning"}, nil)
   205  
   206  				job = ccv2.Job{
   207  					GUID:   "some-job-guid",
   208  					Status: constant.JobStatusFinished,
   209  				}
   210  
   211  				fakeCloudControllerClient.DeleteOrganizationJobReturns(
   212  					job, ccv2.Warnings{"delete-org-warning"}, nil)
   213  
   214  				fakeCloudControllerClient.PollJobReturns(ccv2.Warnings{"polling-warnings"}, nil)
   215  			})
   216  
   217  			It("returns warnings and deletes the org", func() {
   218  				Expect(warnings).To(ConsistOf("get-org-warning", "delete-org-warning", "polling-warnings"))
   219  				Expect(deleteOrgErr).ToNot(HaveOccurred())
   220  
   221  				Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1))
   222  				filters := fakeCloudControllerClient.GetOrganizationsArgsForCall(0)
   223  				Expect(filters).To(Equal(
   224  					[]ccv2.Filter{{
   225  						Type:     constant.NameFilter,
   226  						Operator: constant.EqualOperator,
   227  						Values:   []string{"some-org"},
   228  					}}))
   229  
   230  				Expect(fakeCloudControllerClient.DeleteOrganizationJobCallCount()).To(Equal(1))
   231  				orgGuid := fakeCloudControllerClient.DeleteOrganizationJobArgsForCall(0)
   232  				Expect(orgGuid).To(Equal("some-org-guid"))
   233  
   234  				Expect(fakeCloudControllerClient.PollJobCallCount()).To(Equal(1))
   235  				job := fakeCloudControllerClient.PollJobArgsForCall(0)
   236  				Expect(job.GUID).To(Equal("some-job-guid"))
   237  			})
   238  		})
   239  
   240  		Context("when getting the org returns an error", func() {
   241  			BeforeEach(func() {
   242  				fakeCloudControllerClient.GetOrganizationsReturns(
   243  					[]ccv2.Organization{},
   244  					ccv2.Warnings{
   245  						"get-org-warning",
   246  					},
   247  					nil,
   248  				)
   249  			})
   250  
   251  			It("returns an error and all warnings", func() {
   252  				Expect(warnings).To(ConsistOf("get-org-warning"))
   253  				Expect(deleteOrgErr).To(MatchError(actionerror.OrganizationNotFoundError{
   254  					Name: "some-org",
   255  				}))
   256  			})
   257  		})
   258  
   259  		Context("when the delete returns an error", func() {
   260  			var returnedErr error
   261  
   262  			BeforeEach(func() {
   263  				returnedErr = errors.New("delete-org-error")
   264  
   265  				fakeCloudControllerClient.GetOrganizationsReturns(
   266  					[]ccv2.Organization{{GUID: "org-1-guid"}},
   267  					ccv2.Warnings{
   268  						"get-org-warning",
   269  					},
   270  					nil,
   271  				)
   272  
   273  				fakeCloudControllerClient.DeleteOrganizationJobReturns(
   274  					ccv2.Job{},
   275  					ccv2.Warnings{"delete-org-warning"},
   276  					returnedErr)
   277  			})
   278  
   279  			It("returns the error and all warnings", func() {
   280  				Expect(deleteOrgErr).To(MatchError(returnedErr))
   281  				Expect(warnings).To(ConsistOf("get-org-warning", "delete-org-warning"))
   282  			})
   283  		})
   284  
   285  		Context("when the job polling has an error", func() {
   286  			var expectedErr error
   287  			BeforeEach(func() {
   288  				fakeCloudControllerClient.GetOrganizationsReturns([]ccv2.Organization{
   289  					{GUID: "some-org-guid"},
   290  				}, ccv2.Warnings{"get-org-warning"}, nil)
   291  
   292  				fakeCloudControllerClient.DeleteOrganizationJobReturns(
   293  					ccv2.Job{}, ccv2.Warnings{"delete-org-warning"}, nil)
   294  
   295  				expectedErr = errors.New("Never expected, by anyone")
   296  				fakeCloudControllerClient.PollJobReturns(ccv2.Warnings{"polling-warnings"}, expectedErr)
   297  			})
   298  
   299  			It("returns the error from job polling", func() {
   300  				Expect(warnings).To(ConsistOf("get-org-warning", "delete-org-warning", "polling-warnings"))
   301  				Expect(deleteOrgErr).To(MatchError(expectedErr))
   302  			})
   303  		})
   304  	})
   305  
   306  	Describe("GetOrganizations", func() {
   307  		var (
   308  			orgs     []Organization
   309  			warnings Warnings
   310  			err      error
   311  		)
   312  
   313  		JustBeforeEach(func() {
   314  			orgs, warnings, err = actor.GetOrganizations()
   315  		})
   316  
   317  		Context("when there are multiple organizations", func() {
   318  			BeforeEach(func() {
   319  				fakeCloudControllerClient.GetOrganizationsReturns(
   320  					[]ccv2.Organization{
   321  						{
   322  							Name: "some-org-1",
   323  						},
   324  						{
   325  							Name: "some-org-2",
   326  						},
   327  					},
   328  					ccv2.Warnings{"warning-1", "warning-2"},
   329  					nil)
   330  			})
   331  
   332  			It("returns the org and all warnings", func() {
   333  				Expect(err).ToNot(HaveOccurred())
   334  
   335  				Expect(orgs).To(HaveLen(2))
   336  				Expect(orgs[0].Name).To(Equal("some-org-1"))
   337  				Expect(orgs[1].Name).To(Equal("some-org-2"))
   338  
   339  				Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   340  
   341  				Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1))
   342  				queriesArg := fakeCloudControllerClient.GetOrganizationsArgsForCall(0)
   343  				Expect(queriesArg).To(BeNil())
   344  			})
   345  		})
   346  
   347  		Context("when there are no orgs", func() {
   348  			BeforeEach(func() {
   349  				fakeCloudControllerClient.GetOrganizationsReturns(
   350  					[]ccv2.Organization{},
   351  					ccv2.Warnings{"warning-1", "warning-2"},
   352  					nil,
   353  				)
   354  			})
   355  
   356  			It("returns warnings and an empty list of orgs", func() {
   357  				Expect(err).ToNot(HaveOccurred())
   358  
   359  				Expect(orgs).To(HaveLen(0))
   360  				Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   361  			})
   362  		})
   363  
   364  		Context("when client returns an error", func() {
   365  			var expectedErr error
   366  
   367  			BeforeEach(func() {
   368  				expectedErr = errors.New("some get org error")
   369  				fakeCloudControllerClient.GetOrganizationsReturns(
   370  					[]ccv2.Organization{},
   371  					ccv2.Warnings{"warning-1", "warning-2"},
   372  					expectedErr,
   373  				)
   374  			})
   375  
   376  			It("returns warnings and the error", func() {
   377  				Expect(err).To(MatchError(expectedErr))
   378  				Expect(warnings).To(ConsistOf("warning-1", "warning-2"))
   379  			})
   380  		})
   381  	})
   382  })