Context("when exchanging the token succeeds", func() { var token *oauth2.Token var httpClient *http.Client BeforeEach(func() { token = &oauth2.Token{AccessToken: "some-access-token"} httpClient = &http.Client{} fakeProviderB.ExchangeReturns(token, nil) fakeProviderB.ClientReturns(httpClient) }) It("generated the OAuth token using the request's code", func() { Expect(fakeProviderB.ExchangeCallCount()).To(Equal(1)) _, code := fakeProviderB.ExchangeArgsForCall(0) Expect(code).To(Equal("some-code")) }) Context("when the token is verified", func() { BeforeEach(func() { fakeProviderB.VerifyReturns(true, nil) }) It("responds OK", func() { Expect(response.StatusCode).To(Equal(http.StatusOK)) }) It("verifies using the provider's HTTP client", func() { Expect(fakeProviderB.ClientCallCount()).To(Equal(1)) _, clientToken := fakeProviderB.ClientArgsForCall(0)