github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/map_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  	. "code.cloudfoundry.org/cli/command/v7"
    11  	"code.cloudfoundry.org/cli/command/v7/v7fakes"
    12  	"code.cloudfoundry.org/cli/util/configv3"
    13  	"code.cloudfoundry.org/cli/util/ui"
    14  
    15  	. "github.com/onsi/ginkgo"
    16  	. "github.com/onsi/gomega"
    17  	. "github.com/onsi/gomega/gbytes"
    18  )
    19  
    20  var _ = Describe("map-route Command", func() {
    21  	var (
    22  		cmd             MapRouteCommand
    23  		testUI          *ui.UI
    24  		fakeConfig      *commandfakes.FakeConfig
    25  		fakeSharedActor *commandfakes.FakeSharedActor
    26  		fakeActor       *v7fakes.FakeMapRouteActor
    27  		input           *Buffer
    28  		binaryName      string
    29  		executeErr      error
    30  		domain          string
    31  		appName         string
    32  		hostname        string
    33  		path            string
    34  		orgGUID         string
    35  		spaceGUID       string
    36  	)
    37  
    38  	BeforeEach(func() {
    39  		input = NewBuffer()
    40  		testUI = ui.NewTestUI(input, NewBuffer(), NewBuffer())
    41  		fakeConfig = new(commandfakes.FakeConfig)
    42  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    43  		fakeActor = new(v7fakes.FakeMapRouteActor)
    44  
    45  		binaryName = "faceman"
    46  		fakeConfig.BinaryNameReturns(binaryName)
    47  		appName = "my-app"
    48  		domain = "some-domain.com"
    49  		hostname = "host"
    50  		path = `path`
    51  		orgGUID = "some-org-guid"
    52  		spaceGUID = "some-space-guid"
    53  
    54  		cmd = MapRouteCommand{
    55  			RequiredArgs: flag.AppDomain{App: appName, Domain: domain},
    56  			Hostname:     hostname,
    57  			Path:         flag.V7RoutePath{Path: path},
    58  			UI:           testUI,
    59  			Config:       fakeConfig,
    60  			SharedActor:  fakeSharedActor,
    61  			Actor:        fakeActor,
    62  		}
    63  
    64  		fakeConfig.TargetedOrganizationReturns(configv3.Organization{
    65  			Name: "some-org",
    66  			GUID: orgGUID,
    67  		})
    68  
    69  		fakeConfig.TargetedSpaceReturns(configv3.Space{
    70  			Name: "some-space",
    71  			GUID: spaceGUID,
    72  		})
    73  
    74  		fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil)
    75  	})
    76  
    77  	JustBeforeEach(func() {
    78  		executeErr = cmd.Execute(nil)
    79  	})
    80  
    81  	When("checking target fails", func() {
    82  		BeforeEach(func() {
    83  			fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{BinaryName: binaryName})
    84  		})
    85  
    86  		It("returns an error", func() {
    87  			Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{BinaryName: binaryName}))
    88  
    89  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    90  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    91  			Expect(checkTargetedOrg).To(BeTrue())
    92  			Expect(checkTargetedSpace).To(BeTrue())
    93  		})
    94  	})
    95  
    96  	When("the user is not logged in", func() {
    97  		var expectedErr error
    98  
    99  		BeforeEach(func() {
   100  			expectedErr = errors.New("some current user error")
   101  			fakeConfig.CurrentUserReturns(configv3.User{}, expectedErr)
   102  		})
   103  
   104  		It("return an error", func() {
   105  			Expect(executeErr).To(Equal(expectedErr))
   106  		})
   107  	})
   108  
   109  	When("the user is logged in and targeted", func() {
   110  		When("getting the domain errors", func() {
   111  			BeforeEach(func() {
   112  				fakeActor.GetDomainByNameReturns(v7action.Domain{}, v7action.Warnings{"get-domain-warnings"}, errors.New("get-domain-error"))
   113  			})
   114  
   115  			It("returns the error and displays warnings", func() {
   116  				Expect(testUI.Err).To(Say("get-domain-warnings"))
   117  				Expect(executeErr).To(MatchError(errors.New("get-domain-error")))
   118  
   119  				Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   120  				Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domain))
   121  
   122  				Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(0))
   123  
   124  				Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(0))
   125  
   126  				Expect(fakeActor.CreateRouteCallCount()).To(Equal(0))
   127  
   128  				Expect(fakeActor.MapRouteCallCount()).To(Equal(0))
   129  			})
   130  		})
   131  
   132  		When("getting the domain succeeds", func() {
   133  			BeforeEach(func() {
   134  				fakeActor.GetDomainByNameReturns(
   135  					v7action.Domain{Name: "some-domain.com", GUID: "domain-guid"},
   136  					v7action.Warnings{"get-domain-warnings"},
   137  					nil,
   138  				)
   139  			})
   140  
   141  			When("getting the app errors", func() {
   142  				BeforeEach(func() {
   143  					fakeActor.GetApplicationByNameAndSpaceReturns(
   144  						v7action.Application{},
   145  						v7action.Warnings{"get-app-warnings"},
   146  						errors.New("get-app-error"),
   147  					)
   148  				})
   149  
   150  				It("returns the error and displays warnings", func() {
   151  					Expect(testUI.Err).To(Say("get-domain-warnings"))
   152  					Expect(testUI.Err).To(Say("get-app-warnings"))
   153  					Expect(executeErr).To(MatchError(errors.New("get-app-error")))
   154  
   155  					Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   156  					Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domain))
   157  
   158  					Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1))
   159  					actualAppName, actualSpaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0)
   160  					Expect(actualAppName).To(Equal(appName))
   161  					Expect(actualSpaceGUID).To(Equal(spaceGUID))
   162  
   163  					Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(0))
   164  
   165  					Expect(fakeActor.CreateRouteCallCount()).To(Equal(0))
   166  
   167  					Expect(fakeActor.MapRouteCallCount()).To(Equal(0))
   168  				})
   169  			})
   170  
   171  			When("getting the app succeeds", func() {
   172  				BeforeEach(func() {
   173  					fakeActor.GetApplicationByNameAndSpaceReturns(
   174  						v7action.Application{Name: "app", GUID: "app-guid"},
   175  						v7action.Warnings{"get-app-warnings"},
   176  						nil,
   177  					)
   178  				})
   179  
   180  				When("getting the route errors", func() {
   181  					BeforeEach(func() {
   182  						fakeActor.GetRouteByAttributesReturns(
   183  							v7action.Route{},
   184  							v7action.Warnings{"get-route-warnings"},
   185  							errors.New("get-route-error"),
   186  						)
   187  					})
   188  
   189  					It("returns the error and displays warnings", func() {
   190  						Expect(testUI.Err).To(Say("get-domain-warnings"))
   191  						Expect(testUI.Err).To(Say("get-app-warnings"))
   192  						Expect(testUI.Err).To(Say("get-route-warnings"))
   193  						Expect(executeErr).To(MatchError(errors.New("get-route-error")))
   194  
   195  						Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   196  						Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domain))
   197  
   198  						Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1))
   199  						actualAppName, actualSpaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0)
   200  						Expect(actualAppName).To(Equal(appName))
   201  						Expect(actualSpaceGUID).To(Equal(spaceGUID))
   202  
   203  						Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(1))
   204  						actualDomainName, actualDomainGUID, actualHostname, actualPath := fakeActor.GetRouteByAttributesArgsForCall(0)
   205  						Expect(actualDomainName).To(Equal("some-domain.com"))
   206  						Expect(actualDomainGUID).To(Equal("domain-guid"))
   207  						Expect(actualHostname).To(Equal(hostname))
   208  						Expect(actualPath).To(Equal(path))
   209  
   210  						Expect(fakeActor.CreateRouteCallCount()).To(Equal(0))
   211  
   212  						Expect(fakeActor.MapRouteCallCount()).To(Equal(0))
   213  					})
   214  				})
   215  
   216  				When("the route does not exist", func() {
   217  					BeforeEach(func() {
   218  						fakeActor.GetRouteByAttributesReturns(
   219  							v7action.Route{},
   220  							v7action.Warnings{"get-route-warnings"},
   221  							actionerror.RouteNotFoundError{},
   222  						)
   223  					})
   224  
   225  					It("creates the route", func() {
   226  						Expect(testUI.Err).To(Say("get-domain-warnings"))
   227  						Expect(testUI.Err).To(Say("get-app-warnings"))
   228  						Expect(testUI.Err).To(Say("get-route-warnings"))
   229  						Expect(executeErr).ToNot(HaveOccurred())
   230  
   231  						Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   232  						Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domain))
   233  
   234  						Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1))
   235  						actualAppName, actualSpaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0)
   236  						Expect(actualAppName).To(Equal(appName))
   237  						Expect(actualSpaceGUID).To(Equal(spaceGUID))
   238  
   239  						Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(1))
   240  						actualDomainName, actualDomainGUID, actualHostname, actualPath := fakeActor.GetRouteByAttributesArgsForCall(0)
   241  						Expect(actualDomainName).To(Equal("some-domain.com"))
   242  						Expect(actualDomainGUID).To(Equal("domain-guid"))
   243  						Expect(actualHostname).To(Equal(hostname))
   244  						Expect(actualPath).To(Equal(path))
   245  
   246  						Expect(fakeActor.CreateRouteCallCount()).To(Equal(1))
   247  						actualSpaceGUID, actualDomainName, actualHostname, actualPath = fakeActor.CreateRouteArgsForCall(0)
   248  						Expect(actualSpaceGUID).To(Equal(spaceGUID))
   249  						Expect(actualDomainName).To(Equal("some-domain.com"))
   250  						Expect(actualHostname).To(Equal(hostname))
   251  						Expect(actualPath).To(Equal(path))
   252  					})
   253  				})
   254  
   255  				When("getting the route succeeds", func() {
   256  					BeforeEach(func() {
   257  						fakeActor.GetRouteByAttributesReturns(
   258  							v7action.Route{GUID: "route-guid"},
   259  							v7action.Warnings{"get-route-warnings"},
   260  							nil,
   261  						)
   262  					})
   263  
   264  					When("getting the destination errors", func() {
   265  						BeforeEach(func() {
   266  							fakeActor.GetRouteDestinationByAppGUIDReturns(
   267  								v7action.RouteDestination{},
   268  								v7action.Warnings{"get-destination-warning"},
   269  								errors.New("get-destination-error"),
   270  							)
   271  						})
   272  						It("returns the error and warnings", func() {
   273  							Expect(executeErr).To(MatchError(errors.New("get-destination-error")))
   274  							Expect(testUI.Err).To(Say("get-destination-warning"))
   275  
   276  							Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   277  							Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domain))
   278  
   279  							Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1))
   280  							actualAppName, actualSpaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0)
   281  							Expect(actualAppName).To(Equal(appName))
   282  							Expect(actualSpaceGUID).To(Equal(spaceGUID))
   283  
   284  							Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(1))
   285  							actualDomainName, actualDomainGUID, actualHostname, actualPath := fakeActor.GetRouteByAttributesArgsForCall(0)
   286  							Expect(actualDomainName).To(Equal("some-domain.com"))
   287  							Expect(actualDomainGUID).To(Equal("domain-guid"))
   288  							Expect(actualHostname).To(Equal(hostname))
   289  							Expect(actualPath).To(Equal(path))
   290  
   291  							Expect(fakeActor.GetRouteDestinationByAppGUIDCallCount()).To(Equal(1))
   292  							actualRouteGUID, actualAppGUID := fakeActor.GetRouteDestinationByAppGUIDArgsForCall(0)
   293  							Expect(actualRouteGUID).To(Equal("route-guid"))
   294  							Expect(actualAppGUID).To(Equal("app-guid"))
   295  
   296  							Expect(fakeActor.MapRouteCallCount()).To(Equal(0))
   297  						})
   298  					})
   299  
   300  					When("the destination already exists", func() {
   301  						BeforeEach(func() {
   302  							fakeActor.GetRouteDestinationByAppGUIDReturns(
   303  								v7action.RouteDestination{
   304  									GUID: "route-dst-guid",
   305  									App: v7action.RouteDestinationApp{
   306  										GUID: "existing-app-guid",
   307  									},
   308  								},
   309  								v7action.Warnings{"get-destination-warning"},
   310  								nil,
   311  							)
   312  						})
   313  						It("exits 0 with a helpful message that the route is already mapped to the app", func() {
   314  							Expect(executeErr).ShouldNot(HaveOccurred())
   315  							Expect(testUI.Err).To(Say("get-destination-warning"))
   316  
   317  							Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   318  							Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domain))
   319  
   320  							Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1))
   321  							actualAppName, actualSpaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0)
   322  							Expect(actualAppName).To(Equal(appName))
   323  							Expect(actualSpaceGUID).To(Equal(spaceGUID))
   324  
   325  							Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(1))
   326  							actualDomainName, actualDomainGUID, actualHostname, actualPath := fakeActor.GetRouteByAttributesArgsForCall(0)
   327  							Expect(actualDomainName).To(Equal("some-domain.com"))
   328  							Expect(actualDomainGUID).To(Equal("domain-guid"))
   329  							Expect(actualHostname).To(Equal(hostname))
   330  							Expect(actualPath).To(Equal(path))
   331  
   332  							Expect(fakeActor.GetRouteDestinationByAppGUIDCallCount()).To(Equal(1))
   333  							actualRouteGUID, actualAppGUID := fakeActor.GetRouteDestinationByAppGUIDArgsForCall(0)
   334  							Expect(actualRouteGUID).To(Equal("route-guid"))
   335  							Expect(actualAppGUID).To(Equal("app-guid"))
   336  							Expect(fakeActor.MapRouteCallCount()).To(Equal(0))
   337  						})
   338  
   339  					})
   340  					When("the destination is not found", func() {
   341  						When("mapping the route errors", func() {
   342  							BeforeEach(func() {
   343  								fakeActor.MapRouteReturns(v7action.Warnings{"map-route-warnings"}, errors.New("map-route-error"))
   344  							})
   345  
   346  							It("returns the error and displays warnings", func() {
   347  								Expect(testUI.Err).To(Say("get-domain-warnings"))
   348  								Expect(testUI.Err).To(Say("get-app-warnings"))
   349  								Expect(testUI.Err).To(Say("get-route-warnings"))
   350  								Expect(testUI.Err).To(Say("map-route-warnings"))
   351  								Expect(executeErr).To(MatchError(errors.New("map-route-error")))
   352  
   353  								Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   354  								Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domain))
   355  
   356  								Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1))
   357  								actualAppName, actualSpaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0)
   358  								Expect(actualAppName).To(Equal(appName))
   359  								Expect(actualSpaceGUID).To(Equal(spaceGUID))
   360  
   361  								Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(1))
   362  								actualDomainName, actualDomainGUID, actualHostname, actualPath := fakeActor.GetRouteByAttributesArgsForCall(0)
   363  								Expect(actualDomainName).To(Equal("some-domain.com"))
   364  								Expect(actualDomainGUID).To(Equal("domain-guid"))
   365  								Expect(actualHostname).To(Equal(hostname))
   366  								Expect(actualPath).To(Equal(path))
   367  
   368  								Expect(fakeActor.MapRouteCallCount()).To(Equal(1))
   369  								actualRouteGUID, actualAppGUID := fakeActor.MapRouteArgsForCall(0)
   370  								Expect(actualRouteGUID).To(Equal("route-guid"))
   371  								Expect(actualAppGUID).To(Equal("app-guid"))
   372  							})
   373  						})
   374  
   375  						When("mapping the route succeeds", func() {
   376  							BeforeEach(func() {
   377  								fakeActor.MapRouteReturns(v7action.Warnings{"map-route-warnings"}, nil)
   378  							})
   379  
   380  							It("returns the error and displays warnings", func() {
   381  								Expect(testUI.Err).To(Say("get-domain-warnings"))
   382  								Expect(testUI.Err).To(Say("get-app-warnings"))
   383  								Expect(testUI.Err).To(Say("get-route-warnings"))
   384  								Expect(testUI.Err).To(Say("map-route-warnings"))
   385  								Expect(executeErr).ToNot(HaveOccurred())
   386  
   387  								Expect(fakeActor.GetDomainByNameCallCount()).To(Equal(1))
   388  								Expect(fakeActor.GetDomainByNameArgsForCall(0)).To(Equal(domain))
   389  
   390  								Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1))
   391  								actualAppName, actualSpaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0)
   392  								Expect(actualAppName).To(Equal(appName))
   393  								Expect(actualSpaceGUID).To(Equal(spaceGUID))
   394  
   395  								Expect(fakeActor.GetRouteByAttributesCallCount()).To(Equal(1))
   396  								actualDomainName, actualDomainGUID, actualHostname, actualPath := fakeActor.GetRouteByAttributesArgsForCall(0)
   397  								Expect(actualDomainName).To(Equal("some-domain.com"))
   398  								Expect(actualDomainGUID).To(Equal("domain-guid"))
   399  								Expect(actualHostname).To(Equal(hostname))
   400  								Expect(actualPath).To(Equal(path))
   401  
   402  								Expect(fakeActor.MapRouteCallCount()).To(Equal(1))
   403  								actualRouteGUID, actualAppGUID := fakeActor.MapRouteArgsForCall(0)
   404  								Expect(actualRouteGUID).To(Equal("route-guid"))
   405  								Expect(actualAppGUID).To(Equal("app-guid"))
   406  							})
   407  						})
   408  					})
   409  				})
   410  			})
   411  		})
   412  	})
   413  })