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()) }) }) }) }) }
It("fails with usage when provided too many or two few args", func() { runCommand("org") Expect(ui.FailedWithUsage).To(BeTrue()) runCommand("org", "quota", "extra-stuff") Expect(ui.FailedWithUsage).To(BeTrue()) }) It("fails requirements when not logged in", func() { runCommand("my-org", "my-quota") Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) Context("when logged in", func() { BeforeEach(func() { requirementsFactory.LoginSuccess = true }) It("passes requirements when provided two args", func() { runCommand("my-org", "my-quota") Expect(testcmd.CommandDidPassRequirements).To(BeTrue()) Expect(requirementsFactory.OrganizationName).To(Equal("my-org")) }) It("assigns a quota to an org", func() { org := models.Organization{} org.Name = "my-org" org.Guid = "my-org-guid" quota := models.QuotaFields{Name: "my-quota", Guid: "my-quota-guid"}
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"}) testcmd.RunCommand(cmd, context, requirementsFactory) Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) It("fails with usage when given fewer than three arguments", func() { context := testcmd.NewContext("create-buildpack", []string{}) testcmd.RunCommand(cmd, context, requirementsFactory) Expect(ui.FailedWithUsage).To(BeTrue()) }) It("creates and uploads buildpacks", func() { context := testcmd.NewContext("create-buildpack", []string{"my-buildpack", "my.war", "5"})
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) } Describe("when the user is not logged in", func() { It("does not pass requirements", func() { reqFactory.LoginSuccess = false callRenameSpace([]string{"my-space", "my-new-space"}) Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) }) Describe("when the user has not targeted an org", func() { It("does not pass requirements", func() { reqFactory.TargetedOrgSuccess = false callRenameSpace([]string{"my-space", "my-new-space"}) Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) }) Describe("when the user provides fewer than two args", func() { It("fails with usage", func() {
}) It("fails requirements when not logged in", func() { callRenameOrg([]string{"my-org", "my-new-org"}, reqFactory, orgRepo) Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) Context("when logged in and given an org to rename", func() { var ui *testterm.FakeUI BeforeEach(func() { org := models.Organization{} org.Name = "my-org" org.Guid = "my-org-guid" reqFactory.Organization = org reqFactory.LoginSuccess = true ui = callRenameOrg([]string{"my-org", "my-new-org"}, reqFactory, orgRepo) }) It("pass requirements", func() { Expect(testcmd.CommandDidPassRequirements).To(BeTrue()) }) It("renames an organization", func() { Expect(reqFactory.OrganizationName).To(Equal("my-org")) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"Renaming org", "my-org", "my-new-org", "my-user"}, {"OK"}, }) Expect(orgRepo.RenameOrganizationGuid).To(Equal("my-org-guid"))
) 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() { args := []string{"-m", "1G", "my-app"} reqFactory.LoginSuccess = false reqFactory.TargetedSpaceSuccess = true testcmd.RunCommand(cmd, testcmd.NewContext("scale", args), reqFactory) Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) reqFactory.LoginSuccess = true reqFactory.TargetedSpaceSuccess = false testcmd.RunCommand(cmd, testcmd.NewContext("scale", args), reqFactory) Expect(testcmd.CommandDidPassRequirements).To(BeFalse()) }) It("requires an app to be specified", func() { testcmd.RunCommand(cmd, testcmd.NewContext("scale", []string{"-m", "1G"}), reqFactory)