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