ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) }) AfterEach(func() { apiServer.Close() authServer.Close() }) It("returns the last response if the job completes before the timeout", func() { go func() { time.Sleep(25 * time.Millisecond) jobStatus = "finished" }() request, _ := ccGateway.NewRequest("GET", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), nil) _, apiErr := ccGateway.PerformPollingRequestForJSONResponse(request, new(struct{}), 500*time.Millisecond) Expect(apiErr).NotTo(HaveOccurred()) }) It("returns an error with the right message when the job fails", func() { go func() { time.Sleep(25 * time.Millisecond) jobStatus = "failed" }() request, _ := ccGateway.NewRequest("GET", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), nil) _, apiErr := ccGateway.PerformPollingRequestForJSONResponse(request, new(struct{}), 500*time.Millisecond) Expect(apiErr.Error()).To(ContainSubstring("he's dead, Jim")) })
err = auth.Authenticate(map[string]string{ "username": "******", "password": "******", }) }) Describe("when login succeeds", func() { BeforeEach(func() { setupTestServer(successfulLoginRequest) }) It("stores the access and refresh tokens in the config", func() { Expect(handler).To(HaveAllRequestsCalled()) Expect(err).NotTo(HaveOccurred()) Expect(config.AuthenticationEndpoint()).To(Equal(testServer.URL)) Expect(config.AccessToken()).To(Equal("BEARER my_access_token")) Expect(config.RefreshToken()).To(Equal("my_refresh_token")) }) }) Describe("when login fails", func() { BeforeEach(func() { setupTestServer(unsuccessfulLoginRequest) }) It("returns an error", func() { Expect(handler).To(HaveAllRequestsCalled()) Expect(err).NotTo(BeNil()) Expect(err.Error()).To(Equal("Credentials were rejected, please try again.")) Expect(config.AccessToken()).To(BeEmpty()) Expect(config.RefreshToken()).To(BeEmpty())
l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo) testcmd.RunCommand(l, Flags, nil) Expect(ui.Outputs).To(ContainSubstrings( []string{"Select an org"}, []string{"1. some-org"}, []string{"2. my-new-org"}, []string{"Select a space"}, []string{"1. my-space"}, []string{"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.FindByNameArgsForCall(0)).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"} orgRepo.FindByNameReturns(org2, nil) l := NewLogin(ui, Config, authRepo, endpointRepo, orgRepo, spaceRepo)
BeforeEach(func() { org.Name = "my-org" org.Guid = "my-org-guid" space.Name = "my-space" space.Guid = "my-space-guid" config.SetOrganizationFields(org) config.SetSpaceFields(space) testServerFn = validApiInfoEndpoint }) It("stores the data from the /info api in the config", func() { repo.UpdateEndpoint(testServer.URL) Expect(config.AccessToken()).To(Equal("")) Expect(config.AuthenticationEndpoint()).To(Equal("https://login.example.com")) Expect(config.LoggregatorEndpoint()).To(Equal("wss://loggregator.foo.example.org:4443")) Expect(config.ApiEndpoint()).To(Equal(testServer.URL)) Expect(config.ApiVersion()).To(Equal("42.0.0")) Expect(config.HasOrganization()).To(BeFalse()) Expect(config.HasSpace()).To(BeFalse()) }) Context("when the api endpoint does not change", func() { BeforeEach(func() { config.SetApiEndpoint(testServer.URL) config.SetAccessToken("some access token") config.SetRefreshToken("some refresh token") })
It("gets the UAA endpoint and saves it to the config file", func() { requirementsFactory.ApiEndpointSuccess = true testcmd.RunCommand(cmd, []string{"*****@*****.**", "password"}, requirementsFactory) Expect(repo.GetLoginPromptsWasCalled).To(BeTrue()) }) Describe("when authentication fails", func() { BeforeEach(func() { repo.AuthError = true testcmd.RunCommand(cmd, []string{"username", "password"}, requirementsFactory) }) It("does not prompt the user when provided username and password", func() { Expect(ui.Outputs).To(ContainSubstrings( []string{config.ApiEndpoint()}, []string{"Authenticating..."}, []string{"FAILED"}, []string{"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{})) }) }) }) })