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.Message{ NewLogMessage("Log Line 1", app.Guid, LogMessageTypeStaging, time.Now()), 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 }
"cf/configuration" "cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("target command", func() { var ( orgRepo *testapi.FakeOrgRepository spaceRepo *testapi.FakeSpaceRepository config configuration.ReadWriter reqFactory *testreq.FakeReqFactory ) BeforeEach(func() { orgRepo, spaceRepo, config, reqFactory = getTargetDependencies() }) It("fails with usage when called without -o or -s", func() { ui := callTarget([]string{"bad-foo"}, reqFactory, config, orgRepo, spaceRepo) Expect(ui.FailedWithUsage).To(BeTrue()) }) It("fails requirements when targeting a space or org", func() { callTarget([]string{"-o", "some-crazy-org-im-not-in"}, reqFactory, config, orgRepo, spaceRepo) Expect(testcmd.CommandDidPassRequirements).To(BeFalse())
"cf/configuration" "cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("delete-org command", func() { var ( config configuration.ReadWriter ui *testterm.FakeUI requirementsFactory *testreq.FakeReqFactory orgRepo *testapi.FakeOrgRepository ) BeforeEach(func() { ui = &testterm.FakeUI{ Inputs: []string{"y"}, } config = testconfig.NewRepositoryWithDefaults() requirementsFactory = &testreq.FakeReqFactory{} org := models.Organization{} org.Name = "org-to-delete" org.Guid = "org-to-delete-guid" orgRepo = &testapi.FakeOrgRepository{Organizations: []models.Organization{org}} })
. "cf/commands/service" "cf/configuration" "cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("Marketplace Services", func() { var ui *testterm.FakeUI var reqFactory *testreq.FakeReqFactory var config configuration.ReadWriter var serviceRepo *testapi.FakeServiceRepo var fakeServiceOfferings []models.ServiceOffering BeforeEach(func() { serviceRepo = &testapi.FakeServiceRepo{} ui = &testterm.FakeUI{} reqFactory = &testreq.FakeReqFactory{ApiEndpointSuccess: true} fakeServiceOfferings = []models.ServiceOffering{ models.ServiceOffering{ Plans: []models.ServicePlanFields{ models.ServicePlanFields{Name: "service-plan-a"}, models.ServicePlanFields{Name: "service-plan-b"}, },
"cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" "time" ) var _ = Describe("events command", func() { var ( requirementsFactory *testreq.FakeReqFactory eventsRepo *testapi.FakeAppEventsRepo ui *testterm.FakeUI ) const TIMESTAMP_FORMAT = "2006-01-02T15:04:05.00-0700" BeforeEach(func() { eventsRepo = &testapi.FakeAppEventsRepo{} requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} ui = new(testterm.FakeUI) }) runCommand := func(args ...string) { configRepo := testconfig.NewRepositoryWithDefaults() cmd := NewEvents(ui, configRepo, eventsRepo) testcmd.RunCommand(cmd, testcmd.NewContext("events", args), requirementsFactory)
. "cf/commands/organization" "cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("set-quota command", func() { var ( cmd *SetQuota ui *testterm.FakeUI quotaRepo *testapi.FakeQuotaRepository requirementsFactory *testreq.FakeReqFactory ) runCommand := func(args ...string) { testcmd.RunCommand(cmd, testcmd.NewContext("set-quota", args), requirementsFactory) } BeforeEach(func() { ui = new(testterm.FakeUI) quotaRepo = &testapi.FakeQuotaRepository{} requirementsFactory = &testreq.FakeReqFactory{} cmd = NewSetQuota(ui, testconfig.NewRepositoryWithDefaults(), quotaRepo) }) It("fails with usage when provided too many or two few args", func() {
import ( . "cf/commands/buildpack" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("create-buildpack command", func() { var ( requirementsFactory *testreq.FakeReqFactory repo *testapi.FakeBuildpackRepository bitsRepo *testapi.FakeBuildpackBitsRepository ui *testterm.FakeUI cmd CreateBuildpack ) BeforeEach(func() { requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true} repo = &testapi.FakeBuildpackRepository{} bitsRepo = &testapi.FakeBuildpackBitsRepository{} ui = &testterm.FakeUI{} cmd = NewCreateBuildpack(ui, repo, bitsRepo) }) It("fails requirements when the user is not logged in", func() { requirementsFactory.LoginSuccess = false context := testcmd.NewContext("create-buildpack", []string{"my-buildpack", "my-dir", "0"})
import ( "cf/commands/organization" "cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("rename-org command", func() { var reqFactory *testreq.FakeReqFactory var orgRepo *testapi.FakeOrgRepository BeforeEach(func() { reqFactory = &testreq.FakeReqFactory{} orgRepo = &testapi.FakeOrgRepository{} }) It("fails with usage when given less than two args", func() { ui := callRenameOrg([]string{}, reqFactory, orgRepo) Expect(ui.FailedWithUsage).To(BeTrue()) ui = callRenameOrg([]string{"foo"}, reqFactory, orgRepo) Expect(ui.FailedWithUsage).To(BeTrue()) })
"cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("delete-domain command", func() { var ( cmd *DeleteDomain ui *testterm.FakeUI configRepo configuration.ReadWriter domainRepo *testapi.FakeDomainRepository requirementsFactory *testreq.FakeReqFactory ) BeforeEach(func() { ui = &testterm.FakeUI{ Inputs: []string{"yes"}, } domainRepo = &testapi.FakeDomainRepository{} requirementsFactory = &testreq.FakeReqFactory{ LoginSuccess: true, TargetedOrgSuccess: true, } configRepo = testconfig.NewRepositoryWithDefaults()
"cf/api" . "cf/commands/application" "cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("stop command", func() { var ( requirementsFactory *testreq.FakeReqFactory ) BeforeEach(func() { requirementsFactory = &testreq.FakeReqFactory{} }) It("fails requirements when not logged in", func() { requirementsFactory.LoginSuccess = false appRepo := &testapi.FakeApplicationRepository{} cmd := NewStop(new(testterm.FakeUI), testconfig.NewRepository(), appRepo) testcmd.RunCommand(cmd, testcmd.NewContext("stop", []string{"some-app-name"}), requirementsFactory) Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) })
import ( . "cf/commands/buildpack" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("create-buildpack command", func() { var ( reqFactory *testreq.FakeReqFactory repo *testapi.FakeBuildpackRepository bitsRepo *testapi.FakeBuildpackBitsRepository ui *testterm.FakeUI cmd CreateBuildpack ) BeforeEach(func() { reqFactory = &testreq.FakeReqFactory{LoginSuccess: true} repo = &testapi.FakeBuildpackRepository{} bitsRepo = &testapi.FakeBuildpackBitsRepository{} ui = &testterm.FakeUI{} cmd = NewCreateBuildpack(ui, repo, bitsRepo) }) It("fails requirements when the user is not logged in", func() { reqFactory.LoginSuccess = false context := testcmd.NewContext("create-buildpack", []string{"my-buildpack", "my-dir", "0"})
"cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" "time" ) var _ = Describe("events command", func() { var ( reqFactory *testreq.FakeReqFactory eventsRepo *testapi.FakeAppEventsRepo ui *testterm.FakeUI ) BeforeEach(func() { eventsRepo = &testapi.FakeAppEventsRepo{} reqFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} ui = new(testterm.FakeUI) }) runCommand := func(args ...string) { configRepo := testconfig.NewRepositoryWithDefaults() cmd := NewEvents(ui, configRepo, eventsRepo) testcmd.RunCommand(cmd, testcmd.NewContext("events", args), reqFactory) }
"cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("auth command", func() { var ( ui *testterm.FakeUI cmd Authenticate config configuration.ReadWriter repo *testapi.FakeAuthenticationRepository reqFactory *testreq.FakeReqFactory ) BeforeEach(func() { ui = &testterm.FakeUI{} config = testconfig.NewRepositoryWithDefaults() reqFactory = &testreq.FakeReqFactory{} repo = &testapi.FakeAuthenticationRepository{ Config: config, AccessToken: "my-access-token", RefreshToken: "my-refresh-token", } cmd = NewAuthenticate(ui, config, repo) })
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" "testhelpers/maker" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("scale command", func() { var ( reqFactory *testreq.FakeReqFactory restarter *testcmd.FakeAppRestarter appRepo *testapi.FakeApplicationRepository ui *testterm.FakeUI configRepo configuration.Repository cmd *Scale ) BeforeEach(func() { reqFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} restarter = &testcmd.FakeAppRestarter{} appRepo = &testapi.FakeApplicationRepository{} ui = new(testterm.FakeUI) configRepo = testconfig.NewRepositoryWithDefaults() cmd = NewScale(ui, configRepo, restarter, appRepo) }) Describe("requirements", func() { It("requires the user to be logged in with a targed space", func() {
"cf/api" . "cf/commands/service" "cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("bind-service command", func() { var ( requirementsFactory *testreq.FakeReqFactory ) BeforeEach(func() { requirementsFactory = &testreq.FakeReqFactory{} }) It("fails requirements when not logged in", func() { context := testcmd.NewContext("bind-service", []string{"service", "app"}) cmd := NewBindService(&testterm.FakeUI{}, testconfig.NewRepository(), &testapi.FakeServiceBindingRepo{}) testcmd.RunCommand(cmd, context, requirementsFactory) Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) Context("when logged in", func() {
testreq "testhelpers/requirements" testterm "testhelpers/terminal" testwords "testhelpers/words" "words" ) var _ = Describe("Push Command", func() { var ( cmd *Push ui *testterm.FakeUI configRepo configuration.ReadWriter manifestRepo *testmanifest.FakeManifestRepository starter *testcmd.FakeAppStarter stopper *testcmd.FakeAppStopper serviceBinder *testcmd.FakeAppBinder appRepo *testapi.FakeApplicationRepository domainRepo *testapi.FakeDomainRepository routeRepo *testapi.FakeRouteRepository stackRepo *testapi.FakeStackRepository appBitsRepo *testapi.FakeApplicationBitsRepository serviceRepo *testapi.FakeServiceRepo wordGenerator words.WordGenerator requirementsFactory *testreq.FakeReqFactory authRepo *testapi.FakeAuthenticationRepository ) BeforeEach(func() { manifestRepo = &testmanifest.FakeManifestRepository{} starter = &testcmd.FakeAppStarter{} stopper = &testcmd.FakeAppStopper{} serviceBinder = &testcmd.FakeAppBinder{} appRepo = &testapi.FakeApplicationRepository{}
. "cf/commands/service" "cf/configuration" "cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("marketplace command", func() { var ui *testterm.FakeUI var requirementsFactory *testreq.FakeReqFactory var config configuration.ReadWriter var serviceRepo *testapi.FakeServiceRepo var fakeServiceOfferings []models.ServiceOffering BeforeEach(func() { serviceRepo = &testapi.FakeServiceRepo{} ui = &testterm.FakeUI{} requirementsFactory = &testreq.FakeReqFactory{ApiEndpointSuccess: true} fakeServiceOfferings = []models.ServiceOffering{ models.ServiceOffering{ Plans: []models.ServicePlanFields{ models.ServicePlanFields{Name: "service-plan-a"}, models.ServicePlanFields{Name: "service-plan-b"}, },
"cf/configuration" "cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("rename-space command", func() { var ( ui *testterm.FakeUI configRepo configuration.ReadWriter reqFactory *testreq.FakeReqFactory spaceRepo *testapi.FakeSpaceRepository ) BeforeEach(func() { ui = new(testterm.FakeUI) configRepo = testconfig.NewRepositoryWithDefaults() reqFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedOrgSuccess: true} spaceRepo = &testapi.FakeSpaceRepository{} }) var callRenameSpace = func(args []string) { cmd := NewRenameSpace(ui, configRepo, spaceRepo) testcmd.RunCommand(cmd, testcmd.NewContext("create-space", args), reqFactory) }
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "os" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" "time" ) var _ = Describe("start command", func() { var ( defaultAppForStart = models.Application{} defaultInstanceReponses = [][]models.AppInstanceFields{} defaultInstanceErrorCodes = []string{"", ""} requirementsFactory *testreq.FakeReqFactory ) BeforeEach(func() { requirementsFactory = &testreq.FakeReqFactory{} defaultAppForStart.Name = "my-app" defaultAppForStart.Guid = "my-app-guid" defaultAppForStart.InstanceCount = 2 domain := models.DomainFields{} domain.Name = "example.com" route := models.RouteSummary{} route.Host = "my-app"
"cf/models" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("auth command", func() { var ( ui *testterm.FakeUI cmd Authenticate config configuration.ReadWriter repo *testapi.FakeAuthenticationRepository requirementsFactory *testreq.FakeReqFactory ) BeforeEach(func() { ui = &testterm.FakeUI{} config = testconfig.NewRepositoryWithDefaults() requirementsFactory = &testreq.FakeReqFactory{} repo = &testapi.FakeAuthenticationRepository{ Config: config, AccessToken: "my-access-token", RefreshToken: "my-refresh-token", } cmd = NewAuthenticate(ui, config, repo) })
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" testapi "testhelpers/api" testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" ) var _ = Describe("create-service command", func() { var ( ui *testterm.FakeUI config configuration.Repository reqFactory *testreq.FakeReqFactory cmd CreateService serviceRepo *testapi.FakeServiceRepo offering1 models.ServiceOffering offering2 models.ServiceOffering ) BeforeEach(func() { ui = &testterm.FakeUI{} config = testconfig.NewRepositoryWithDefaults() reqFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true} serviceRepo = &testapi.FakeServiceRepo{} cmd = NewCreateService(ui, config, serviceRepo) offering1 = models.ServiceOffering{} offering1.Label = "cleardb" offering1.Plans = []models.ServicePlanFields{{
func init() { Describe("migrating service instances from v1 to v2", func() { var ( ui *testterm.FakeUI serviceRepo *testapi.FakeServiceRepo cmd *MigrateServiceInstances requirementsFactory *testreq.FakeReqFactory context *cli.Context args []string ) BeforeEach(func() { ui = &testterm.FakeUI{} config := testconfig.NewRepository() serviceRepo = &testapi.FakeServiceRepo{} cmd = NewMigrateServiceInstances(ui, config, serviceRepo) requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: false} args = []string{} }) Describe("requirements", func() { It("requires you to be logged in", func() { context = testcmd.NewContext("migrate-service-instances", args) testcmd.RunCommand(cmd, context, requirementsFactory) Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) It("requires five arguments to run", func() { requirementsFactory.LoginSuccess = true args = []string{"one", "two", "three"} context = testcmd.NewContext("migrate-service-instances", args) testcmd.RunCommand(cmd, context, requirementsFactory) Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) It("passes requirements if user is logged in and provided five args to run", func() { requirementsFactory.LoginSuccess = true args = []string{"one", "two", "three", "four", "five"} ui.Inputs = append(ui.Inputs, "no") context = testcmd.NewContext("migrate-service-instances", args) testcmd.RunCommand(cmd, context, requirementsFactory) Expect(testcmd.CommandDidPassRequirements).To(BeTrue()) }) }) Describe("migrating service instances", func() { BeforeEach(func() { requirementsFactory.LoginSuccess = true args = []string{"v1-service-name", "v1-provider-name", "v1-plan-name", "v2-service-name", "v2-plan-name"} context = testcmd.NewContext("migrate-service-instances", args) serviceRepo.ServiceInstanceCountForServicePlan = 1 }) It("displays the warning and the prompt including info about the instances and plan to migrate", func() { ui.Inputs = []string{""} testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"WARNING:", "this operation is to replace a service broker"}, }) testassert.SliceContains(ui.Prompts, testassert.Lines{ {"Really migrate", "1 service instance", "from plan", "v1-service-name", "v1-provider-name", "v1-plan-name", "to", "v2-service-name", "v2-plan-name"}, }) }) Context("when the user confirms", func() { BeforeEach(func() { ui.Inputs = []string{"yes"} }) Context("when the v1 and v2 service instances exists", func() { BeforeEach(func() { serviceRepo.FindServicePlanByDescriptionResultGuids = []string{"v1-guid", "v2-guid"} serviceRepo.MigrateServicePlanFromV1ToV2ReturnedCount = 1 }) It("makes a request to migrate the v1 service instance", func() { testcmd.RunCommand(cmd, context, requirementsFactory) Expect(serviceRepo.V1GuidToMigrate).To(Equal("v1-guid")) Expect(serviceRepo.V2GuidToMigrate).To(Equal("v2-guid")) }) It("finds the v1 service plan by its name, provider and service label", func() { testcmd.RunCommand(cmd, context, requirementsFactory) expectedV1 := api.ServicePlanDescription{ ServicePlanName: "v1-plan-name", ServiceProvider: "v1-provider-name", ServiceName: "v1-service-name", } Expect(serviceRepo.FindServicePlanByDescriptionArguments[0]).To(Equal(expectedV1)) }) It("finds the v2 service plan by its name and service label", func() { testcmd.RunCommand(cmd, context, requirementsFactory) expectedV2 := api.ServicePlanDescription{ ServicePlanName: "v2-plan-name", ServiceName: "v2-service-name", } Expect(serviceRepo.FindServicePlanByDescriptionArguments[1]).To(Equal(expectedV2)) }) It("notifies the user that the migration was successful", func() { serviceRepo.ServiceInstanceCountForServicePlan = 2 testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"Attempting to migrate", "2", "service instances"}, {"1", "service instance", "migrated"}, {"OK"}, }) }) }) Context("when finding the v1 plan fails", func() { Context("because the plan does not exist", func() { BeforeEach(func() { serviceRepo.FindServicePlanByDescriptionResponses = []net.ApiResponse{net.NewNotFoundApiResponse("not used")} }) It("notifies the user of the failure", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"FAILED"}, {"Plan", "v1-service-name", "v1-provider-name", "v1-plan-name", "cannot be found"}, }) }) It("does not display the warning", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceDoesNotContain(ui.Outputs, testassert.Lines{ {"WARNING:", "this operation is to replace a service broker"}, }) }) }) Context("because there was an http error", func() { BeforeEach(func() { serviceRepo.FindServicePlanByDescriptionResponses = []net.ApiResponse{net.NewApiResponseWithMessage("uh oh")} }) It("notifies the user of the failure", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"FAILED"}, {"uh oh"}, }) }) It("does not display the warning", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceDoesNotContain(ui.Outputs, testassert.Lines{ {"WARNING:", "this operation is to replace a service broker"}, }) }) }) }) Context("when finding the v2 plan fails", func() { Context("because the plan does not exist", func() { BeforeEach(func() { serviceRepo.FindServicePlanByDescriptionResponses = []net.ApiResponse{net.NewSuccessfulApiResponse(), net.NewNotFoundApiResponse("not used")} }) It("notifies the user of the failure", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"FAILED"}, {"Plan", "v2-service-name", "v2-plan-name", "cannot be found"}, }) }) It("does not display the warning", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceDoesNotContain(ui.Outputs, testassert.Lines{ {"WARNING:", "this operation is to replace a service broker"}, }) }) }) Context("because there was an http error", func() { BeforeEach(func() { serviceRepo.FindServicePlanByDescriptionResponses = []net.ApiResponse{net.NewSuccessfulApiResponse(), net.NewApiResponseWithMessage("uh oh")} }) It("notifies the user of the failure", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"FAILED"}, {"uh oh"}, }) }) It("does not display the warning", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceDoesNotContain(ui.Outputs, testassert.Lines{ {"WARNING:", "this operation is to replace a service broker"}, }) }) }) }) Context("when migrating the plans fails", func() { BeforeEach(func() { serviceRepo.MigrateServicePlanFromV1ToV2Response = net.NewApiResponseWithMessage("ruh roh") }) It("notifies the user of the failure", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"FAILED"}, {"ruh roh"}, }) }) }) Context("when there are no instances to migrate", func() { BeforeEach(func() { serviceRepo.FindServicePlanByDescriptionResultGuids = []string{"v1-guid", "v2-guid"} serviceRepo.ServiceInstanceCountForServicePlan = 0 }) It("returns a meaningful error", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"FAILED"}, {"no service instances to migrate"}, }) }) It("does not show the user the warning", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceDoesNotContain(ui.Outputs, testassert.Lines{ {"WARNING:", "this operation is to replace a service broker"}, }) }) }) Context("when it cannot fetch the number of instances", func() { BeforeEach(func() { serviceRepo.ServiceInstanceCountApiResponse = net.NewApiResponseWithMessage("service instance fetch is very bad") }) It("notifies the user of the failure", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"FAILED"}, {"service instance fetch is very bad"}, }) }) }) }) Context("when the user does not confirm", func() { BeforeEach(func() { ui.Inputs = append(ui.Inputs, "no") }) It("does not continue the migration", func() { testcmd.RunCommand(cmd, context, requirementsFactory) testassert.SliceDoesNotContain(ui.Outputs, testassert.Lines{{"Migrating"}}) Expect(serviceRepo.MigrateServicePlanFromV1ToV2Called).To(BeFalse()) }) }) }) }) }
testassert "testhelpers/assert" testcmd "testhelpers/commands" testconfig "testhelpers/configuration" testreq "testhelpers/requirements" testterm "testhelpers/terminal" testtime "testhelpers/time" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("app Command", func() { var ( ui *testterm.FakeUI configRepo configuration.ReadWriter appSummaryRepo *testapi.FakeAppSummaryRepo appInstancesRepo *testapi.FakeAppInstancesRepo requirementsFactory *testreq.FakeReqFactory ) BeforeEach(func() { ui = &testterm.FakeUI{} appSummaryRepo = &testapi.FakeAppSummaryRepo{} appInstancesRepo = &testapi.FakeAppInstancesRepo{} configRepo = testconfig.NewRepositoryWithDefaults() requirementsFactory = &testreq.FakeReqFactory{ LoginSuccess: true, TargetedSpaceSuccess: true, } })