github.com/wanddynosios/cli/v8@v8.7.9-0.20240221182337-1a92e3a7017f/command/v7/unshare_route_command_test.go (about)

     1  package v7_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/command/commandfakes"
     9  	"code.cloudfoundry.org/cli/command/flag"
    10  	v7 "code.cloudfoundry.org/cli/command/v7"
    11  	"code.cloudfoundry.org/cli/command/v7/v7fakes"
    12  	"code.cloudfoundry.org/cli/resources"
    13  	"code.cloudfoundry.org/cli/util/configv3"
    14  	"code.cloudfoundry.org/cli/util/ui"
    15  	. "github.com/onsi/ginkgo"
    16  	. "github.com/onsi/gomega"
    17  	. "github.com/onsi/gomega/gbytes"
    18  )
    19  
    20  var _ = Describe("unshare-route Command", func() {
    21  	var (
    22  		cmd             v7.UnshareRouteCommand
    23  		testUI          *ui.UI
    24  		fakeConfig      *commandfakes.FakeConfig
    25  		fakeSharedActor *commandfakes.FakeSharedActor
    26  		fakeActor       *v7fakes.FakeActor
    27  		binaryName      string
    28  		executeErr      error
    29  		domainName      string
    30  		orgName         string
    31  		spaceName       string
    32  		hostname        string
    33  		path            string
    34  	)
    35  
    36  	BeforeEach(func() {
    37  		testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer())
    38  		fakeConfig = new(commandfakes.FakeConfig)
    39  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    40  		fakeActor = new(v7fakes.FakeActor)
    41  
    42  		binaryName = "myBinaryBread"
    43  		fakeConfig.BinaryNameReturns(binaryName)
    44  
    45  		domainName = "some-domain.com"
    46  		orgName = "org-name-a"
    47  		spaceName = "space-name-a"
    48  		hostname = "myHostname"
    49  		path = "myPath"
    50  
    51  		cmd = v7.UnshareRouteCommand{
    52  			BaseCommand: v7.BaseCommand{
    53  				UI:          testUI,
    54  				Config:      fakeConfig,
    55  				SharedActor: fakeSharedActor,
    56  				Actor:       fakeActor,
    57  			},
    58  			RequireArgs:      flag.Domain{Domain: domainName},
    59  			Hostname:         hostname,
    60  			Path:             flag.V7RoutePath{Path: path},
    61  			DestinationOrg:   orgName,
    62  			DestinationSpace: spaceName,
    63  		}
    64  
    65  		fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space", GUID: "some-space-guid"})
    66  		fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"})
    67  		fakeConfig.CurrentUserReturns(configv3.User{Name: "some-user"}, nil)
    68  	})
    69  
    70  	JustBeforeEach(func() {
    71  		executeErr = cmd.Execute(nil)
    72  	})
    73  
    74  	It("checks that target", func() {
    75  		Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    76  		checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    77  		Expect(checkTargetedOrg).To(BeTrue())
    78  		Expect(checkTargetedSpace).To(BeTrue())
    79  	})
    80  
    81  	When("checking target fails", func() {
    82  		BeforeEach(func() {
    83  			fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{BinaryName: binaryName})
    84  		})
    85  		It("returns an error", func() {
    86  			Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{BinaryName: binaryName}))
    87  
    88  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    89  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    90  			Expect(checkTargetedOrg).To(BeTrue())
    91  			Expect(checkTargetedSpace).To(BeTrue())
    92  		})
    93  	})
    94  
    95  	When("the user is not logged in", func() {
    96  		var expectedErr error
    97  
    98  		BeforeEach(func() {
    99  			expectedErr = errors.New("some current user error")
   100  			fakeActor.GetCurrentUserReturns(configv3.User{}, expectedErr)
   101  		})
   102  
   103  		It("return an error", func() {
   104  			Expect(executeErr).To(Equal(expectedErr))
   105  		})
   106  	})
   107  
   108  	When("the user is logged in and targeted", func() {
   109  		When("getting the domain errors", func() {
   110  			BeforeEach(func() {
   111  				fakeActor.GetDomainByNameReturns(resources.Domain{}, v7action.Warnings{"get-domain-warnings"}, errors.New("get-domain-error"))
   112  			})
   113  
   114  			It("returns the error and displays warnings", func() {
   115  				Expect(testUI.Err).To(Say("get-domain-warnings"))
   116  				Expect(executeErr).To(MatchError(errors.New("get-domain-error")))
   117  
   118  				Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   119  				Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domainName))
   120  
   121  				Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(0))
   122  
   123  				Expect(fakeActor.GetSpaceByNameAndOrganizationCallCount()).To(Equal(0))
   124  
   125  				Expect(fakeActor.UnshareRouteCallCount()).To(Equal(0))
   126  			})
   127  		})
   128  
   129  		When("getting the domain succeeds", func() {
   130  			BeforeEach(func() {
   131  				fakeActor.GetDomainByNameReturns(
   132  					resources.Domain{Name: domainName, GUID: "domain-guid"},
   133  					v7action.Warnings{"get-domain-warnings"},
   134  					nil,
   135  				)
   136  			})
   137  
   138  			When("the requested route does not exist", func() {
   139  				BeforeEach(func() {
   140  					fakeActor.GetRouteByAttributesReturns(
   141  						resources.Route{},
   142  						v7action.Warnings{"get-route-warnings"},
   143  						actionerror.RouteNotFoundError{},
   144  					)
   145  				})
   146  
   147  				It("displays error message", func() {
   148  					Expect(testUI.Err).To(Say("get-domain-warnings"))
   149  					Expect(testUI.Err).To(Say("get-route-warnings"))
   150  					Expect(executeErr).To(HaveOccurred())
   151  
   152  					Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   153  					Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domainName))
   154  
   155  					Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(1))
   156  					actualDomain, actualHostname, actualPath, actualPort := fakeActor.GetRouteByAttributesArgsForCall(0)
   157  					Expect(actualDomain.Name).To(Equal(domainName))
   158  					Expect(actualDomain.GUID).To(Equal("domain-guid"))
   159  					Expect(actualHostname).To(Equal(hostname))
   160  					Expect(actualPath).To(Equal(path))
   161  					Expect(actualPort).To(Equal(0))
   162  				})
   163  			})
   164  
   165  			When("the requested route exists", func() {
   166  				BeforeEach(func() {
   167  					fakeActor.GetRouteByAttributesReturns(
   168  						resources.Route{GUID: "route-guid"},
   169  						v7action.Warnings{"get-route-warnings"},
   170  						nil,
   171  					)
   172  				})
   173  				When("getting the target space errors", func() {
   174  					BeforeEach(func() {
   175  						fakeActor.GetOrganizationByNameReturns(
   176  							resources.Organization{GUID: "org-guid-a"},
   177  							v7action.Warnings{"get-route-warnings"},
   178  							nil,
   179  						)
   180  						fakeActor.GetSpaceByNameAndOrganizationReturns(
   181  							resources.Space{},
   182  							v7action.Warnings{"get-route-warnings"},
   183  							actionerror.SpaceNotFoundError{},
   184  						)
   185  					})
   186  					It("returns the error and warnings", func() {
   187  						Expect(executeErr).To(HaveOccurred())
   188  
   189  						Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   190  						Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domainName))
   191  
   192  						Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(1))
   193  						actualDomain, actualHostname, actualPath, actualPort := fakeActor.GetRouteByAttributesArgsForCall(0)
   194  						Expect(actualDomain.Name).To(Equal(domainName))
   195  						Expect(actualDomain.GUID).To(Equal("domain-guid"))
   196  						Expect(actualHostname).To(Equal(hostname))
   197  						Expect(actualPath).To(Equal(path))
   198  						Expect(actualPort).To(Equal(0))
   199  
   200  						Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(1))
   201  						Expect(fakeActor.GetOrganizationByNameArgsForCall(0)).To(Equal(orgName))
   202  						Expect(fakeActor.GetSpaceByNameAndOrganizationCallCount()).To(Equal(1))
   203  						spaceName, orgGuid := fakeActor.GetSpaceByNameAndOrganizationArgsForCall(0)
   204  						Expect(spaceName).To(Equal("space-name-a"))
   205  						Expect(orgGuid).To(Equal("org-guid-a"))
   206  
   207  						Expect(fakeActor.UnshareRouteCallCount()).To(Equal(0))
   208  					})
   209  				})
   210  				When("getting the target org errors", func() {
   211  					BeforeEach(func() {
   212  						fakeActor.GetOrganizationByNameReturns(
   213  							resources.Organization{},
   214  							v7action.Warnings{"get-route-warnings"},
   215  							actionerror.OrganizationNotFoundError{},
   216  						)
   217  					})
   218  					It("returns the error and warnings", func() {
   219  						Expect(executeErr).To(HaveOccurred())
   220  
   221  						Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   222  						Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domainName))
   223  
   224  						Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(1))
   225  						actualDomain, actualHostname, actualPath, actualPort := fakeActor.GetRouteByAttributesArgsForCall(0)
   226  						Expect(actualDomain.Name).To(Equal(domainName))
   227  						Expect(actualDomain.GUID).To(Equal("domain-guid"))
   228  						Expect(actualHostname).To(Equal(hostname))
   229  						Expect(actualPath).To(Equal(path))
   230  						Expect(actualPort).To(Equal(0))
   231  
   232  						Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(1))
   233  						orgName := fakeActor.GetOrganizationByNameArgsForCall(0)
   234  						Expect(orgName).To(Equal("org-name-a"))
   235  
   236  						Expect(fakeActor.UnshareRouteCallCount()).To(Equal(0))
   237  					})
   238  				})
   239  				When("getting the target space succeeds", func() {
   240  					BeforeEach(func() {
   241  						fakeActor.GetOrganizationByNameReturns(
   242  							resources.Organization{GUID: "org-guid-a"},
   243  							v7action.Warnings{"get-route-warnings"},
   244  							nil,
   245  						)
   246  						fakeActor.GetSpaceByNameAndOrganizationReturns(
   247  							resources.Space{GUID: "space-guid-b"},
   248  							v7action.Warnings{"get-route-warnings"},
   249  							nil,
   250  						)
   251  					})
   252  					It("exits 0 with helpful message that the route is now being unshared", func() {
   253  						Expect(executeErr).ShouldNot(HaveOccurred())
   254  
   255  						Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   256  						Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domainName))
   257  
   258  						Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(1))
   259  						actualDomain, actualHostname, actualPath, actualPort := fakeActor.GetRouteByAttributesArgsForCall(0)
   260  						Expect(actualDomain.Name).To(Equal(domainName))
   261  						Expect(actualDomain.GUID).To(Equal("domain-guid"))
   262  						Expect(actualHostname).To(Equal(hostname))
   263  						Expect(actualPath).To(Equal(path))
   264  						Expect(actualPort).To(Equal(0))
   265  
   266  						Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(1))
   267  						orgName := fakeActor.GetOrganizationByNameArgsForCall(0)
   268  						Expect(orgName).To(Equal("org-name-a"))
   269  
   270  						Expect(fakeActor.GetSpaceByNameAndOrganizationCallCount()).To(Equal(1))
   271  						spaceName, orgGuid := fakeActor.GetSpaceByNameAndOrganizationArgsForCall(0)
   272  						Expect(spaceName).To(Equal("space-name-a"))
   273  						Expect(orgGuid).To(Equal("org-guid-a"))
   274  						Expect(fakeActor.UnshareRouteCallCount()).To(Equal(1))
   275  					})
   276  				})
   277  			})
   278  		})
   279  	})
   280  })