github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/share_route_command_test.go (about)

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