func makeAppWithOptions(appName string) models.Application { application := models.Application{} application.Name = appName application.Guid = "app-guid" application.Command = "run main.go" application.BuildpackUrl = "go-buildpack" 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.HealthCheckTimeout = 100 application.Routes = []models.RouteSummary{route, secondRoute} application.PackageUpdatedAt = &packgeUpdatedAt envMap := make(map[string]interface{}) envMap["foo"] = "bar" application.EnvironmentVars = envMap application.Services = append(application.Services, models.ServicePlanSummary{ Guid: "", Name: "server1", }) return application }
func makeAppWithRoute(appName string) models.Application { application := models.Application{} application.Name = appName application.Guid = "app-guid" application.BuildpackUrl = "http://123.com" application.Command = "command1" application.Diego = false application.DetectedStartCommand = "detected_command" application.DiskQuota = 100 application.EnvironmentVars = map[string]interface{}{"test": 123} application.RunningInstances = 2 application.HealthCheckTimeout = 100 application.SpaceGuid = "guids_in_spaaace" application.PackageState = "STAGED" application.StagingFailedReason = "no reason" application.State = "started" application.InstanceCount = 2 application.RunningInstances = 2 application.Memory = 256 t := time.Date(2009, time.November, 10, 15, 0, 0, 0, time.UTC) application.PackageUpdatedAt = &t services := models.ServicePlanSummary{ Guid: "s1-guid", Name: "s1-service", } application.Services = []models.ServicePlanSummary{services} domain := models.DomainFields{Guid: "domain1-guid", Name: "example.com", OwningOrganizationGuid: "org-123", Shared: true} route := models.RouteSummary{Host: "foo", Guid: "foo-guid", Domain: domain} secondRoute := models.RouteSummary{Host: appName, Domain: domain} application.Stack = &models.Stack{ Name: "fake_stack", Guid: "123-123-123", } application.Routes = []models.RouteSummary{route, secondRoute} return application }
func makeAppWithMultipleEnvVars(appName string) models.Application { application := models.Application{} application.Name = appName application.Guid = "app-guid" 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.PackageUpdatedAt = &packgeUpdatedAt envMap := make(map[string]interface{}) envMap["foo"] = bool(true) envMap["abc"] = "abc" envMap["xyz"] = bool(false) envMap["bar"] = float64(10) application.EnvironmentVars = envMap return application }
Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) It("fails with usage when not provided with exactly three args", func() { requirementsFactory.Application = app requirementsFactory.LoginSuccess = true requirementsFactory.TargetedSpaceSuccess = true runCommand("zomg", "too", "many", "args") Expect(ui.FailedWithUsage).To(BeTrue()) }) }) Context("when logged in, a space is targeted and given enough args", func() { BeforeEach(func() { app.EnvironmentVars = map[string]string{"foo": "bar"} requirementsFactory.Application = app requirementsFactory.LoginSuccess = true requirementsFactory.TargetedSpaceSuccess = true }) Context("when it is new", func() { It("is created", func() { runCommand("my-app", "DATABASE_URL", "mysql://new-example.com/my-db") Expect(ui.Outputs).To(ContainSubstrings( []string{ "Setting env variable", "DATABASE_URL", "mysql://new-example.com/my-db", "my-app",
It("fails with usage when not provided with exactly three args", func() { requirementsFactory.Application = app requirementsFactory.LoginSuccess = true requirementsFactory.TargetedSpaceSuccess = true runCommand("zomg", "too", "many", "args") Expect(ui.Outputs).To(ContainSubstrings( []string{"Incorrect Usage", "Requires", "arguments"}, )) }) }) Context("when logged in, a space is targeted and given enough args", func() { BeforeEach(func() { app.EnvironmentVars = map[string]interface{}{"foo": "bar"} requirementsFactory.Application = app requirementsFactory.LoginSuccess = true requirementsFactory.TargetedSpaceSuccess = true }) Context("when it is new", func() { It("is created", func() { runCommand("my-app", "DATABASE_URL", "mysql://new-example.com/my-db") Expect(ui.Outputs).To(ContainSubstrings( []string{ "Setting env variable", "DATABASE_URL", "mysql://new-example.com/my-db", "my-app",
}) It("sets the health check timeout", func() { Expect(runCLIErr).NotTo(HaveOccurred()) Expect(fakeManifest.HealthCheckTimeoutCallCount()).To(Equal(1)) name, timeout := fakeManifest.HealthCheckTimeoutArgsForCall(0) Expect(name).To(Equal("app-name")) Expect(timeout).To(Equal(5)) }) }) Context("when the app has environment vars", func() { BeforeEach(func() { application.EnvironmentVars = map[string]interface{}{ "float64-key": float64(5), "bool-key": true, "string-key": "string", } appSummaryRepo.GetSummaryReturns(application, nil) }) It("sets the env vars", func() { Expect(runCLIErr).NotTo(HaveOccurred()) Expect(fakeManifest.EnvironmentVarsCallCount()).To(Equal(3)) actuals := map[string]interface{}{} for i := 0; i < 3; i++ { name, k, v := fakeManifest.EnvironmentVarsArgsForCall(i) Expect(name).To(Equal("app-name")) actuals[k] = v }
}) }) }) }) 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 }) It("resets the app's buildpack when the -b flag is provided as 'default'", func() { callPush("-b", "default", "existing-app") Expect(*appRepo.UpdateParams.BuildpackUrl).To(Equal("")) }) It("resets the app's command when the -c flag is provided as 'default'", func() { callPush("-c", "default", "existing-app") Expect(*appRepo.UpdateParams.Command).To(Equal(""))
Expect(runCommand("foo", "bar")).To(BeFalse()) }) It("fails with usage when not provided with exactly 2 args", func() { requirementsFactory.LoginSuccess = true requirementsFactory.TargetedSpaceSuccess = true requirementsFactory.Application = app Expect(runCommand("too", "many", "args")).To(BeFalse()) }) }) Context("when logged in, a space is targeted and provided enough args", func() { BeforeEach(func() { app.EnvironmentVars = map[string]interface{}{"foo": "bar", "DATABASE_URL": "mysql://example.com/my-db"} requirementsFactory.Application = app requirementsFactory.LoginSuccess = true requirementsFactory.TargetedSpaceSuccess = true }) It("updates the app and tells the user what happened", func() { runCommand("my-app", "DATABASE_URL") Expect(ui.Outputs).To(ContainSubstrings( []string{"Removing env variable", "DATABASE_URL", "my-app", "my-org", "my-space", "my-user"}, []string{"OK"}, )) Expect(requirementsFactory.ApplicationName).To(Equal("my-app"))