Context("when not logged in", func() { BeforeEach(func() { requirementsFactory.LoginSuccess = false }) It("does not pass requirements", func() { runCommand("-n", "my-host", "example.com") Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) }) Context("when logged in successfully", func() { BeforeEach(func() { requirementsFactory.LoginSuccess = true route := models.Route{Guid: "route-guid"} route.Domain = models.DomainFields{ Guid: "domain-guid", Name: "example.com", } routeRepo.FindByHostAndDomainReturns.Route = route }) It("fails with usage when given zero args", func() { runCommand() Expect(ui.FailedWithUsage).To(BeTrue()) }) It("does not fail with usage when provided with a domain", func() { runCommand("example.com") Expect(ui.FailedWithUsage).To(BeFalse())
func (routeActor RouteActor) BindRoute(app models.Application, route models.Route) { if !app.HasRoute(route) { routeActor.ui.Say(T("Binding {{.URL}} to {{.AppName}}...", map[string]interface{}{"URL": terminal.EntityNameColor(route.URL()), "AppName": terminal.EntityNameColor(app.Name)})) apiErr := routeActor.routeRepo.Bind(route.Guid, app.Guid) switch apiErr := apiErr.(type) { case nil: routeActor.ui.Ok() routeActor.ui.Say("") return case errors.HttpError: if apiErr.ErrorCode() == errors.INVALID_RELATION { routeActor.ui.Failed(T("The route {{.URL}} is already in use.\nTIP: Change the hostname with -n HOSTNAME or use --random-route to generate a new route and then push again.", map[string]interface{}{"URL": route.URL()})) } } routeActor.ui.Failed(apiErr.Error()) } }
}) }) Describe("when pushing a new app", func() { BeforeEach(func() { appRepo.ReadReturns.Error = errors.NewModelNotFoundError("App", "the-app") zipper.ZipReturns(nil) zipper.GetZipSizeReturns(9001, nil) actor.GatherFilesReturns(nil, nil) actor.UploadAppReturns(nil) }) Context("when the default route for the app already exists", func() { BeforeEach(func() { route := models.Route{} route.Guid = "my-route-guid" route.Host = "my-new-app" route.Domain = domainRepo.ListDomainsForOrgDomains[0] routeRepo.FindByHostAndDomainReturns.Route = route }) It("binds to existing routes", func() { callPush("my-new-app") Expect(routeRepo.CreatedHost).To(BeEmpty()) Expect(routeRepo.CreatedDomainGuid).To(BeEmpty()) Expect(routeRepo.FindByHostAndDomainCalledWith.Host).To(Equal("my-new-app")) Expect(routeRepo.BoundAppGuid).To(Equal("my-new-app-guid")) Expect(routeRepo.BoundRouteGuid).To(Equal("my-route-guid"))
runCommand("-n", "host", "my-space", "example.com") Expect(ui.Outputs).To(ContainSubstrings( []string{"Creating route"}, []string{"OK"}, []string{"host.example.com", "already exists"}, )) Expect(routeRepo.CreateInSpaceHost).To(Equal("host")) Expect(routeRepo.CreateInSpaceDomainGuid).To(Equal("domain-guid")) Expect(routeRepo.CreateInSpaceSpaceGuid).To(Equal("my-space-guid")) }) Describe("RouteCreator interface", func() { It("creates a route, given a domain and space", func() { createdRoute := models.Route{} createdRoute.Host = "my-host" createdRoute.Guid = "my-route-guid" routeRepo := &testapi.FakeRouteRepository{ CreateInSpaceCreatedRoute: createdRoute, } cmd := NewCreateRoute(ui, config, routeRepo) route, apiErr := cmd.CreateRoute("my-host", requirementsFactory.Domain, requirementsFactory.Space.SpaceFields) Expect(apiErr).NotTo(HaveOccurred()) Expect(route.Guid).To(Equal(createdRoute.Guid)) Expect(ui.Outputs).To(ContainSubstrings( []string{"Creating route", "my-host.example.com", "my-org", "my-space", "my-user"}, []string{"OK"}, ))
It("fails when an org and space is not targeted", func() { requirementsFactory.TargetedSpaceSuccess = false runCommand() Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) }) Context("when there are routes", func() { BeforeEach(func() { domain := models.DomainFields{Name: "example.com"} domain2 := models.DomainFields{Name: "cookieclicker.co"} app1 := models.ApplicationFields{Name: "dora"} app2 := models.ApplicationFields{Name: "bora"} route := models.Route{} route.Host = "hostname-1" route.Domain = domain route.Apps = []models.ApplicationFields{app1} route2 := models.Route{} route2.Host = "hostname-2" route2.Domain = domain2 route2.Apps = []models.ApplicationFields{app1, app2} routeRepo.Routes = []models.Route{route, route2} }) It("lists routes", func() { runCommand() Expect(ui.Outputs).To(ContainSubstrings(