func startAppWithInstancesAndErrors(displayApp ApplicationDisplayer, app models.Application, instances [][]models.AppInstanceFields, errorCodes []string, requirementsFactory *testreq.FakeReqFactory) (ui *testterm.FakeUI, appRepo *testapi.FakeApplicationRepository, appInstancesRepo *testapi.FakeAppInstancesRepo) { configRepo := testconfig.NewRepositoryWithDefaults() appRepo = &testapi.FakeApplicationRepository{ UpdateAppResult: app, } appRepo.ReadReturns.App = app appInstancesRepo = &testapi.FakeAppInstancesRepo{ GetInstancesResponses: instances, GetInstancesErrorCodes: errorCodes, } logRepo := &testapi.FakeLogsRepository{ TailLogMessages: []*logmessage.LogMessage{ testlogs.NewLogMessage("Log Line 1", app.Guid, LogMessageTypeStaging, time.Now()), testlogs.NewLogMessage("Log Line 2", app.Guid, LogMessageTypeStaging, time.Now()), }, } args := []string{"my-app"} requirementsFactory.Application = app ui = callStart(args, configRepo, requirementsFactory, displayApp, appRepo, appInstancesRepo, logRepo) return }
DiskUsage: 32 * formatters.MEGABYTE, MemQuota: 64 * formatters.MEGABYTE, MemUsage: 13 * formatters.MEGABYTE, } appInstance2 := models.AppInstanceFields{ State: models.InstanceDown, Details: "failure", Since: testtime.MustParse("Mon Jan 2 15:04:05 -0700 MST 2006", "Mon Apr 1 15:04:05 -0700 MST 2012"), } instances := []models.AppInstanceFields{appInstance, appInstance2} appInstancesRepo.GetInstancesReturns(instances, nil) appSummaryRepo.GetSummarySummary = app requirementsFactory.Application = app pluginAppModel = &plugin_models.GetAppModel{} deps.PluginModels.Application = pluginAppModel updateCommandDependency(true) }) It("populates the plugin model upon execution", func() { runCommand("my-app") Ω(pluginAppModel.Name).To(Equal("my-app")) Ω(pluginAppModel.State).To(Equal("started")) Ω(pluginAppModel.Guid).To(Equal("app-guid")) Ω(pluginAppModel.BuildpackUrl).To(Equal("http://123.com")) Ω(pluginAppModel.Command).To(Equal("command1")) Ω(pluginAppModel.Diego).To(BeFalse()) Ω(pluginAppModel.DetectedStartCommand).To(Equal("detected_command"))
testcmd.RunCliCommandWithoutDependency("start", args, requirementsFactory) return } startAppWithInstancesAndErrors := func(displayApp ApplicationDisplayer, app models.Application, requirementsFactory *testreq.FakeReqFactory) (*testterm.FakeUI, *testApplication.FakeApplicationRepository, *testAppInstanaces.FakeAppInstancesRepository) { appRepo = &testApplication.FakeApplicationRepository{} appRepo.UpdateReturns(app, nil) appRepo.ReadReturns(app, nil) appRepo.GetAppReturns(app, nil) appInstancesRepo = &testAppInstanaces.FakeAppInstancesRepository{} appInstancesRepo.GetInstancesStub = getInstance args := []string{"my-app"} requirementsFactory.Application = app callStart(args) return ui, appRepo, appInstancesRepo } It("fails requirements when not logged in", func() { requirementsFactory.LoginSuccess = false Expect(callStart([]string{"some-app-name"})).To(BeFalse()) }) It("fails requirements when a space is not targeted", func() { requirementsFactory.LoginSuccess = true requirementsFactory.TargetedSpaceSuccess = false Expect(callStart([]string{"some-app-name"})).To(BeFalse())
Describe("ssh", func() { var ( currentApp models.Application ) BeforeEach(func() { requirementsFactory.LoginSuccess = true requirementsFactory.TargetedSpaceSuccess = true currentApp = models.Application{} currentApp.Name = "my-app" currentApp.State = "started" currentApp.Guid = "my-app-guid" currentApp.EnableSsh = true currentApp.Diego = true requirementsFactory.Application = currentApp }) Describe("Error getting required info to run ssh", func() { var ( testServer *httptest.Server handler *testnet.TestHandler ) AfterEach(func() { testServer.Close() }) Context("error when getting SSH info from /v2/info", func() { BeforeEach(func() { getRequest := testapi.NewCloudControllerTestRequest(testnet.TestRequest{
It("fails with usage", func() { runCommand() Expect(ui.Outputs).To(ContainSubstrings( []string{"Incorrect Usage", "Requires", "arguments"}, )) }) }) Context("when the user provides an app and a domain", func() { BeforeEach(func() { requirementsFactory.Application = models.Application{ ApplicationFields: models.ApplicationFields{ Guid: "my-app-guid", Name: "my-app", }, Routes: []models.RouteSummary{ models.RouteSummary{ Guid: "my-route-guid", }, }, } requirementsFactory.Domain = models.DomainFields{ Guid: "my-domain-guid", Name: "example.com", } routeRepo.FindByHostAndDomainReturns(models.Route{ Domain: requirementsFactory.Domain, Guid: "my-route-guid", Host: "foo", Apps: []models.ApplicationFields{
Context("when the user is logged in", func() { BeforeEach(func() { requirementsFactory.LoginSuccess = true }) Context("when the user does not provide two args", func() { It("fails with usage", func() { runCommand() Expect(ui.FailedWithUsage).To(BeTrue()) }) }) Context("when the user provides an app and a domain", func() { BeforeEach(func() { requirementsFactory.Application = models.Application{ApplicationFields: models.ApplicationFields{ Guid: "my-app-guid", Name: "my-app", }} requirementsFactory.Domain = models.DomainFields{ Guid: "my-domain-guid", Name: "example.com", } routeRepo.FindByHostAndDomainReturns.Route = models.Route{ Domain: requirementsFactory.Domain, Guid: "my-route-guid", Host: "foo", } runCommand("-n", "my-host", "my-app", "my-domain.com") }) It("passes requirements", func() { Expect(testcmd.CommandDidPassRequirements).To(BeTrue())