It("gets the UAA endpoint and saves it to the config file", func() { requirementsFactory.ApiEndpointSuccess = true testcmd.RunCommand(cmd, testcmd.NewContext("auth", []string{"*****@*****.**", "password"}), requirementsFactory) Expect(repo.GetLoginPromptsWasCalled).To(BeTrue()) }) Describe("when authentication fails", func() { BeforeEach(func() { repo.AuthError = true testcmd.RunCommand(cmd, testcmd.NewContext("auth", []string{"username", "password"}), requirementsFactory) }) It("does not prompt the user when provided username and password", func() { testassert.SliceContains(ui.Outputs, testassert.Lines{ {config.ApiEndpoint()}, {"Authenticating..."}, {"FAILED"}, {"Error authenticating"}, }) }) It("clears the user's session", func() { Expect(config.AccessToken()).To(BeEmpty()) Expect(config.RefreshToken()).To(BeEmpty()) Expect(config.SpaceFields()).To(Equal(models.SpaceFields{})) Expect(config.OrganizationFields()).To(Equal(models.OrganizationFields{})) }) }) }) })
It("fails with usage", func() { callRenameSpace([]string{"foo"}) Expect(ui.FailedWithUsage).To(BeTrue()) }) }) Describe("when the user is logged in and has provided an old and new space name", func() { BeforeEach(func() { space := models.Space{} space.Name = "the-old-space-name" space.Guid = "the-old-space-guid" reqFactory.Space = space }) It("renames a space", func() { originalSpaceName := configRepo.SpaceFields().Name callRenameSpace([]string{"the-old-space-name", "my-new-space"}) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"Renaming space", "the-old-space-name", "my-new-space", "my-org", "my-user"}, {"OK"}, }) Expect(spaceRepo.RenameSpaceGuid).To(Equal("the-old-space-guid")) Expect(spaceRepo.RenameNewName).To(Equal("my-new-space")) Expect(configRepo.SpaceFields().Name).To(Equal(originalSpaceName)) }) Describe("renaming the space the user has targeted", func() { BeforeEach(func() { configRepo.SetSpaceFields(reqFactory.Space.SpaceFields)
}) Expect(config.OrganizationFields().Guid).To(Equal("")) }) It("TestTargetSpaceWhenUserHasAccess", func() { space := models.Space{} space.Name = "my-space" space.Guid = "my-space-guid" spaceRepo.Spaces = []models.Space{space} spaceRepo.FindByNameSpace = space ui := callTarget([]string{"-s", "my-space"}, reqFactory, config, orgRepo, spaceRepo) Expect(spaceRepo.FindByNameName).To(Equal("my-space")) Expect(config.SpaceFields().Guid).To(Equal("my-space-guid")) Expect(ui.ShowConfigurationCalled).To(BeTrue()) }) It("TestTargetSpaceWhenUserDoesNotHaveAccess", func() { config.SetSpaceFields(models.SpaceFields{}) spaceRepo.FindByNameErr = true ui := callTarget([]string{"-s", "my-space"}, reqFactory, config, orgRepo, spaceRepo) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"FAILED"}, {"Unable to access space", "my-space"}, }) Expect(config.SpaceFields().Guid).To(Equal(""))
ui.Inputs = []string{"api.example.com", "*****@*****.**", "password", OUT_OF_RANGE_CHOICE, "2", OUT_OF_RANGE_CHOICE, "1"} l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) testcmd.RunCommand(l, testcmd.NewContext("login", Flags), nil) testassert.SliceContains(ui.Outputs, testassert.Lines{ {"Select an org"}, {"1. some-org"}, {"2. my-new-org"}, {"Select a space"}, {"1. my-space"}, {"2. some-space"}, }) Expect(Config.OrganizationFields().Guid).To(Equal("my-new-org-guid")) Expect(Config.SpaceFields().Guid).To(Equal("my-space-guid")) Expect(Config.AccessToken()).To(Equal("my_access_token")) Expect(Config.RefreshToken()).To(Equal("my_refresh_token")) Expect(endpointRepo.UpdateEndpointReceived).To(Equal("api.example.com")) Expect(orgRepo.FindByNameName).To(Equal("my-new-org")) Expect(spaceRepo.FindByNameName).To(Equal("my-space")) Expect(ui.ShowConfigurationCalled).To(BeTrue()) }) It("lets the user select an org and space by name", func() { ui.Inputs = []string{"api.example.com", "*****@*****.**", "password", "my-new-org", "my-space"} l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo)
org.Guid = "my-org-guid" space := models.SpaceFields{} space.Name = "my-space" space.Guid = "my-space-guid" config.SetApiEndpoint(testServer.URL) config.SetAccessToken("some access token") config.SetRefreshToken("some refresh token") config.SetOrganizationFields(org) config.SetSpaceFields(space) repo.UpdateEndpoint(testServer.URL) Expect(config.OrganizationFields()).To(Equal(org)) Expect(config.SpaceFields()).To(Equal(space)) Expect(config.AccessToken()).To(Equal("some access token")) Expect(config.RefreshToken()).To(Equal("some refresh token")) }) It("returns a failure response when the API request fails", func() { testServerFn = func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) } _, apiResponse := repo.UpdateEndpoint(testServer.URL) Expect(apiResponse.IsNotSuccessful()).To(BeTrue()) }) It("returns a failure response when the API returns invalid JSON", func() {
runCommand() Expect(ui.FailedWithUsage).To(BeTrue()) }) Context("when logged in", func() { BeforeEach(func() { requirementsFactory.LoginSuccess = true }) Context("when deleting the currently targeted org", func() { It("untargets the deleted org", func() { config.SetOrganizationFields(orgRepo.Organizations[0].OrganizationFields) runCommand("org-to-delete") Expect(config.OrganizationFields()).To(Equal(models.OrganizationFields{})) Expect(config.SpaceFields()).To(Equal(models.SpaceFields{})) }) }) Context("when deleting an org that is not targeted", func() { BeforeEach(func() { otherOrgFields := models.OrganizationFields{} otherOrgFields.Guid = "some-other-org-guid" otherOrgFields.Name = "some-other-org" config.SetOrganizationFields(otherOrgFields) spaceFields := models.SpaceFields{} spaceFields.Name = "some-other-space" config.SetSpaceFields(spaceFields) })