func TestGithubHandler_ErrorGettingUser(t *testing.T) { proxyClient, server := testutils.NewErrorServer("Github Service Down", http.StatusInternalServerError) defer server.Close() // oauth2 Client will use the proxy client's base Transport ctx := context.WithValue(context.Background(), oauth2.HTTPClient, proxyClient) anyToken := &oauth2.Token{AccessToken: "any-token"} ctx = oauth2Login.WithToken(ctx, anyToken) config := &oauth2.Config{} success := testutils.AssertSuccessNotCalled(t) failure := func(ctx context.Context, w http.ResponseWriter, req *http.Request) { err := gologin.ErrorFromContext(ctx) if assert.NotNil(t, err) { assert.Equal(t, ErrUnableToGetGithubUser, err) } fmt.Fprintf(w, "failure handler called") } // GithubHandler cannot get Github User, assert that: // - failure handler is called // - error cannot get Github User added to the failure handler ctx githubHandler := githubHandler(config, success, ctxh.ContextHandlerFunc(failure)) w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/", nil) githubHandler.ServeHTTP(ctx, w, req) assert.Equal(t, "failure handler called", w.Body.String()) }
func TestBitbucketHandler(t *testing.T) { jsonData := `{"username": "******", "display_name": "Atlas Ian"}` expectedUser := &User{Username: "******", DisplayName: "Atlas Ian"} proxyClient, server := newBitbucketTestServer(jsonData) defer server.Close() // oauth2 Client will use the proxy client's base Transport ctx := context.WithValue(context.Background(), oauth2.HTTPClient, proxyClient) anyToken := &oauth2.Token{AccessToken: "any-token"} ctx = oauth2Login.WithToken(ctx, anyToken) config := &oauth2.Config{} success := func(ctx context.Context, w http.ResponseWriter, req *http.Request) { bitbucketUser, err := UserFromContext(ctx) assert.Nil(t, err) assert.Equal(t, expectedUser, bitbucketUser) fmt.Fprintf(w, "success handler called") } failure := testutils.AssertFailureNotCalled(t) // BitbucketHandler assert that: // - Token is read from the ctx and passed to the Bitbucket API // - bitbucket User is obtained from the Bitbucket API // - success handler is called // - bitbucket User is added to the ctx of the success handler bitbucketHandler := bitbucketHandler(config, ctxh.ContextHandlerFunc(success), failure) w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/", nil) bitbucketHandler.ServeHTTP(ctx, w, req) assert.Equal(t, "success handler called", w.Body.String()) }
func TestGithubHandler(t *testing.T) { jsonData := `{"id": 917408, "name": "Alyssa Hacker"}` expectedUser := &github.User{ID: github.Int(917408), Name: github.String("Alyssa Hacker")} proxyClient, server := newGithubTestServer(jsonData) defer server.Close() // oauth2 Client will use the proxy client's base Transport ctx := context.WithValue(context.Background(), oauth2.HTTPClient, proxyClient) anyToken := &oauth2.Token{AccessToken: "any-token"} ctx = oauth2Login.WithToken(ctx, anyToken) config := &oauth2.Config{} success := func(ctx context.Context, w http.ResponseWriter, req *http.Request) { githubUser, err := UserFromContext(ctx) assert.Nil(t, err) assert.Equal(t, expectedUser, githubUser) fmt.Fprintf(w, "success handler called") } failure := testutils.AssertFailureNotCalled(t) // GithubHandler assert that: // - Token is read from the ctx and passed to the Github API // - github User is obtained from the Github API // - success handler is called // - github User is added to the ctx of the success handler githubHandler := githubHandler(config, ctxh.ContextHandlerFunc(success), failure) w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/", nil) githubHandler.ServeHTTP(ctx, w, req) assert.Equal(t, "success handler called", w.Body.String()) }
func TestGoogleHandler(t *testing.T) { jsonData := `{"id": "900913", "name": "Ben Bitdiddle"}` expectedUser := &google.Userinfoplus{Id: "900913", Name: "Ben Bitdiddle"} proxyClient, server := newGoogleTestServer(jsonData) defer server.Close() // oauth2 Client will use the proxy client's base Transport ctx := context.WithValue(context.Background(), oauth2.HTTPClient, proxyClient) anyToken := &oauth2.Token{AccessToken: "any-token"} ctx = oauth2Login.WithToken(ctx, anyToken) config := &oauth2.Config{} success := func(ctx context.Context, w http.ResponseWriter, req *http.Request) { googleUser, err := UserFromContext(ctx) assert.Nil(t, err) // assert required fields; Userinfoplus contains other raw response info assert.Equal(t, expectedUser.Id, googleUser.Id) assert.Equal(t, expectedUser.Id, googleUser.Id) fmt.Fprintf(w, "success handler called") } failure := testutils.AssertFailureNotCalled(t) // GoogleHandler assert that: // - Token is read from the ctx and passed to the Google API // - google Userinfoplus is obtained from the Google API // - success handler is called // - google Userinfoplus is added to the ctx of the success handler googleHandler := googleHandler(config, ctxh.ContextHandlerFunc(success), failure) w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/", nil) googleHandler.ServeHTTP(ctx, w, req) assert.Equal(t, "success handler called", w.Body.String()) }