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()) } }
func makeAppWithRoute(appName string) models.Application { application := models.Application{} application.Name = appName application.Guid = "app-guid" domain := models.DomainFields{} domain.Name = "example.com" route := models.RouteSummary{Host: "foo", Domain: domain} secondRoute := models.RouteSummary{Host: appName, Domain: domain} packgeUpdatedAt, _ := time.Parse("2006-01-02T15:04:05Z07:00", "2012-10-24T19:54:00Z") application.State = "started" application.InstanceCount = 2 application.RunningInstances = 2 application.Memory = 256 application.Routes = []models.RouteSummary{route, secondRoute} application.PackageUpdatedAt = &packgeUpdatedAt return application }
testcmd "github.com/nttlabs/cli/testhelpers/commands" testconfig "github.com/nttlabs/cli/testhelpers/configuration" testreq "github.com/nttlabs/cli/testhelpers/requirements" testterm "github.com/nttlabs/cli/testhelpers/terminal" . "github.com/nttlabs/cli/cf/commands/application" . "github.com/nttlabs/cli/testhelpers/matchers" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("env command", func() { var ( ui *testterm.FakeUI app models.Application appRepo *testApplication.FakeApplicationRepository configRepo core_config.ReadWriter requirementsFactory *testreq.FakeReqFactory ) BeforeEach(func() { ui = &testterm.FakeUI{} app = models.Application{} app.Name = "my-app" appRepo = &testApplication.FakeApplicationRepository{} appRepo.ReadReturns.App = app configRepo = testconfig.NewRepositoryWithDefaults() requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} })
testcmd "github.com/nttlabs/cli/testhelpers/commands" testconfig "github.com/nttlabs/cli/testhelpers/configuration" testreq "github.com/nttlabs/cli/testhelpers/requirements" testterm "github.com/nttlabs/cli/testhelpers/terminal" . "github.com/nttlabs/cli/cf/commands/application" . "github.com/nttlabs/cli/testhelpers/matchers" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("stop command", func() { var ( ui *testterm.FakeUI app models.Application appRepo *testApplication.FakeApplicationRepository requirementsFactory *testreq.FakeReqFactory config core_config.ReadWriter ) BeforeEach(func() { ui = &testterm.FakeUI{} config = testconfig.NewRepositoryWithDefaults() appRepo = &testApplication.FakeApplicationRepository{} requirementsFactory = &testreq.FakeReqFactory{} }) runCommand := func(args ...string) { testcmd.RunCommand(NewStop(ui, config, appRepo), args, requirementsFactory) }
testconfig "github.com/nttlabs/cli/testhelpers/configuration" "github.com/nttlabs/cli/testhelpers/maker" testreq "github.com/nttlabs/cli/testhelpers/requirements" testterm "github.com/nttlabs/cli/testhelpers/terminal" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "github.com/nttlabs/cli/testhelpers/matchers" ) var _ = Describe("scale command", func() { var ( requirementsFactory *testreq.FakeReqFactory restarter *testcmd.FakeApplicationRestarter appRepo *testApplication.FakeApplicationRepository ui *testterm.FakeUI config core_config.ReadWriter cmd *Scale app models.Application ) BeforeEach(func() { requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} restarter = &testcmd.FakeApplicationRestarter{} appRepo = &testApplication.FakeApplicationRepository{} ui = new(testterm.FakeUI) config = testconfig.NewRepositoryWithDefaults() cmd = NewScale(ui, config, restarter, appRepo) }) Describe("requirements", func() {
}, }, models.RouteSummary{ Host: "app1", Domain: models.DomainFields{ Name: "example.com", }, }} app2Routes := []models.RouteSummary{ models.RouteSummary{ Host: "app2", Domain: models.DomainFields{Name: "cfapps.io"}, }} app := models.Application{} app.Name = "Application-1" app.State = "started" app.RunningInstances = 1 app.InstanceCount = 1 app.Memory = 512 app.DiskQuota = 1024 app.Routes = app1Routes app.ZoneName = "tokyo" app2 := models.Application{} app2.Name = "Application-2" app2.State = "started" app2.RunningInstances = 1 app2.InstanceCount = 2 app2.Memory = 256
testcmd "github.com/nttlabs/cli/testhelpers/commands" testconfig "github.com/nttlabs/cli/testhelpers/configuration" testreq "github.com/nttlabs/cli/testhelpers/requirements" testterm "github.com/nttlabs/cli/testhelpers/terminal" . "github.com/nttlabs/cli/cf/commands/application" . "github.com/nttlabs/cli/testhelpers/matchers" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("unset-env command", func() { var ( ui *testterm.FakeUI app models.Application appRepo *testApplication.FakeApplicationRepository configRepo core_config.ReadWriter requirementsFactory *testreq.FakeReqFactory ) BeforeEach(func() { ui = &testterm.FakeUI{} app = models.Application{} app.Name = "my-app" app.Guid = "my-app-guid" appRepo = &testApplication.FakeApplicationRepository{} requirementsFactory = &testreq.FakeReqFactory{} configRepo = testconfig.NewRepositoryWithDefaults() }) runCommand := func(args ...string) {
Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) It("fails with usage when not provided an app name", func() { requirementsFactory.LoginSuccess = true requirementsFactory.TargetedSpaceSuccess = true runCommand() Expect(ui.FailedWithUsage).To(BeTrue()) Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) }) Context("when logged in, a space is targeted and a valid app name is provided", func() { BeforeEach(func() { app := models.Application{} app.Name = "my-found-app" app.Guid = "my-app-guid" requirementsFactory.Application = app requirementsFactory.LoginSuccess = true requirementsFactory.TargetedSpaceSuccess = true appFilesRepo.ListFilesReturns("file 1\nfile 2", nil) }) It("it lists files in a directory", func() { runCommand("my-app", "/foo") Expect(ui.Outputs).To(ContainSubstrings( []string{"Getting files for app", "my-found-app", "my-org", "my-space", "my-user"}, []string{"OK"},
Expect(app.Name).To(Equal("My App")) }) }) Describe("creating applications", func() { It("makes the right request", func() { ts, handler, repo := createAppRepo([]testnet.TestRequest{createApplicationRequest}) defer ts.Close() params := defaultAppParams() createdApp, apiErr := repo.Create(params) Expect(handler).To(HaveAllRequestsCalled()) Expect(apiErr).NotTo(HaveOccurred()) app := models.Application{} app.Name = "my-cool-app" app.Guid = "my-cool-app-guid" Expect(createdApp).To(Equal(app)) }) It("makes the right request with empty zone", func() { createApplicationRequest_withEmptyZone := createApplicationRequest createApplicationRequest_withEmptyZone.Matcher = testnet.RequestBodyMatcher(`{ "name":"my-cool-app", "instances":3, "buildpack":"buildpack-url", "memory":2048, "disk_quota": 512, "space_guid":"some-space-guid", "stack_guid":"some-stack-guid",
BeforeEach(func() { appSummaryRepo.GetSummarySummary.PackageUpdatedAt = nil }) It("should output whatever greg sez", func() { runCommand("my-app") Expect(ui.Outputs).To(ContainSubstrings( []string{"last uploaded", "unknown"}, )) }) }) }) Describe("when the app is not running", func() { BeforeEach(func() { application := models.Application{} application.Name = "my-app" application.Guid = "my-app-guid" application.State = "stopped" application.InstanceCount = 2 application.RunningInstances = 0 application.Memory = 256 now := time.Now() application.PackageUpdatedAt = &now appSummaryRepo.GetSummarySummary = application requirementsFactory.Application = application }) It("displays nice output when the app is stopped", func() { appSummaryRepo.GetSummaryErrorCode = errors.APP_STOPPED
Expect(len(appRepo.CreateAppParams)).To(Equal(1)) Expect(*appRepo.CreateAppParams[0].Name).To(Equal("app2")) }) It("fails when given the name of an app that is not in the manifest", func() { callPush("non-existant-app") Expect(ui.Outputs).To(ContainSubstrings([]string{"FAILED"})) Expect(len(appRepo.CreateAppParams)).To(Equal(0)) }) }) }) }) Describe("re-pushing an existing app", func() { var existingApp models.Application BeforeEach(func() { existingApp = models.Application{} existingApp.Name = "existing-app" existingApp.Guid = "existing-app-guid" existingApp.Command = "unicorn -c config/unicorn.rb -D" existingApp.EnvironmentVars = map[string]string{ "crazy": "pants", "FOO": "NotYoBaz", "foo": "manchu", } appRepo.ReadReturns.App = existingApp appRepo.UpdateAppResult = existingApp })
testcmd "github.com/nttlabs/cli/testhelpers/commands" testconfig "github.com/nttlabs/cli/testhelpers/configuration" testreq "github.com/nttlabs/cli/testhelpers/requirements" testterm "github.com/nttlabs/cli/testhelpers/terminal" . "github.com/nttlabs/cli/cf/commands/application" . "github.com/nttlabs/cli/testhelpers/matchers" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("set-env command", func() { var ( ui *testterm.FakeUI configRepo core_config.ReadWriter app models.Application appRepo *testApplication.FakeApplicationRepository requirementsFactory *testreq.FakeReqFactory ) BeforeEach(func() { ui = &testterm.FakeUI{} app = models.Application{} app.Name = "my-app" app.Guid = "my-app-guid" appRepo = &testApplication.FakeApplicationRepository{} requirementsFactory = &testreq.FakeReqFactory{} configRepo = testconfig.NewRepositoryWithDefaults() }) runCommand := func(args ...string) {
testcmd "github.com/nttlabs/cli/testhelpers/commands" testconfig "github.com/nttlabs/cli/testhelpers/configuration" testreq "github.com/nttlabs/cli/testhelpers/requirements" testterm "github.com/nttlabs/cli/testhelpers/terminal" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "github.com/nttlabs/cli/testhelpers/matchers" ) var _ = Describe("delete app command", func() { var ( cmd *DeleteApp ui *testterm.FakeUI app models.Application configRepo core_config.ReadWriter appRepo *testApplication.FakeApplicationRepository routeRepo *testapi.FakeRouteRepository requirementsFactory *testreq.FakeReqFactory ) BeforeEach(func() { app = models.Application{} app.Name = "app-to-delete" app.Guid = "app-to-delete-guid" ui = &testterm.FakeUI{} appRepo = &testApplication.FakeApplicationRepository{} routeRepo = &testapi.FakeRouteRepository{} requirementsFactory = &testreq.FakeReqFactory{}
testconfig "github.com/nttlabs/cli/testhelpers/configuration" testlogs "github.com/nttlabs/cli/testhelpers/logs" testreq "github.com/nttlabs/cli/testhelpers/requirements" testterm "github.com/nttlabs/cli/testhelpers/terminal" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "github.com/nttlabs/cli/testhelpers/matchers" ) var _ = Describe("start command", func() { var ( ui *testterm.FakeUI defaultAppForStart = models.Application{} defaultInstanceResponses = [][]models.AppInstanceFields{} defaultInstanceErrorCodes = []string{"", ""} requirementsFactory *testreq.FakeReqFactory logsForTail []*logmessage.LogMessage logRepo *testapi.FakeLogsRepository ) getInstance := func(appGuid string) (instances []models.AppInstanceFields, apiErr error) { if len(defaultInstanceResponses) > 0 { instances = defaultInstanceResponses[0] if len(defaultInstanceResponses) > 1 { defaultInstanceResponses = defaultInstanceResponses[1:] } } if len(defaultInstanceErrorCodes) > 0 { errorCode := defaultInstanceErrorCodes[0] if len(defaultInstanceErrorCodes) > 1 {