It("refreshes the token when UAA requests fail", func() { apiServer := httptest.NewTLSServer(refreshTokenApiEndPoint( `{ "error": "invalid_token", "error_description": "Auth token is invalid" }`, testnet.TestResponse{Status: http.StatusOK}, )) defer apiServer.Close() ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) config, auth := createAuthenticationRepository(apiServer, authServer) uaaGateway.SetTokenRefresher(auth) request, apiErr := uaaGateway.NewRequest("POST", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), strings.NewReader("expected body")) _, apiErr = uaaGateway.PerformRequest(request) Expect(apiErr).NotTo(HaveOccurred()) Expect(config.AccessToken()).To(Equal("bearer new-access-token")) Expect(config.RefreshToken()).To(Equal("new-refresh-token")) }) It("refreshes the token when CC requests fail", func() { apiServer := httptest.NewTLSServer(refreshTokenApiEndPoint( `{ "code": 1000, "description": "Auth token is invalid" }`, testnet.TestResponse{Status: http.StatusOK})) defer apiServer.Close() ccGateway.SetTrustedCerts(apiServer.TLS.Certificates) config, auth := createAuthenticationRepository(apiServer, authServer) ccGateway.SetTokenRefresher(auth) request, apiErr := ccGateway.NewRequest("POST", config.ApiEndpoint()+"/v2/foo", config.AccessToken(), strings.NewReader("expected body")) _, apiErr = ccGateway.PerformRequest(request) Expect(apiErr).NotTo(HaveOccurred())
}) 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("does not clear the session if the api endpoint does not change", func() { 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")) }) }) }) Context("when the API request fails", func() { ItClearsTheConfig := func() { Expect(config.ApiEndpoint()).To(BeEmpty()) } BeforeEach(func() { config.SetApiEndpoint("example.com") }) It("returns a failure response when the server has a bad certificate", func() { testServer.TLS.Certificates = []tls.Certificate{testnet.MakeExpiredTLSCert()}
"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()) })
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{})) }) }) }) })