func TestNewUser(t *testing.T) { testProvider := new(test.TestProvider) testProvider.On("Name").Return("providerName") data := objx.MSI( herokuKeyID, "123435467890", herokuKeyEmail, "*****@*****.**") creds := &common.Credentials{Map: objx.MSI(oauth2.OAuth2KeyAccessToken, "ABC123")} user := NewUser(data, creds, testProvider) if assert.NotNil(t, user) { assert.Equal(t, data, user.Data()) assert.Equal(t, "*****@*****.**", user.Email()) // check provider credentials creds := user.ProviderCredentials()[testProvider.Name()] if assert.NotNil(t, creds) { assert.Equal(t, "ABC123", creds.Get(oauth2.OAuth2KeyAccessToken).Str()) assert.Equal(t, "123435467890", creds.Get(common.CredentialsKeyID).Str()) } } mock.AssertExpectationsForObjects(t, testProvider.Mock) }
func TestNewOAuth2Tripper(t *testing.T) { testProvider := new(test.TestProvider) creds := &common.Credentials{Map: objx.MSI()} var tripper common.Tripper = NewOAuth2Tripper(creds, testProvider) if assert.NotNil(t, tripper) { assert.Equal(t, creds, tripper.Credentials()) assert.Equal(t, http.DefaultTransport, tripper.(*OAuth2Tripper).underlyingTransport) assert.Equal(t, testProvider, tripper.Provider()) } }
func TestIDForProvider(t *testing.T) { user := new(User) user.data = objx.MSI( common.UserKeyProviderCredentials, map[string]*common.Credentials{ "github": &common.Credentials{Map: objx.MSI(common.CredentialsKeyID, "githubid")}, "google": &common.Credentials{Map: objx.MSI(common.CredentialsKeyID, "googleid")}}) assert.Equal(t, "githubid", user.IDForProvider("github")) assert.Equal(t, "googleid", user.IDForProvider("google")) }
func TestProviders(t *testing.T) { prov1 := new(test.TestProvider) prov2 := new(test.TestProvider) list := WithProviders(prov1, prov2) if assert.Equal(t, 2, len(list.Providers())) { assert.Equal(t, prov1, list.Providers()[0]) assert.Equal(t, prov2, list.Providers()[1]) } }
func TestProviderPublicData(t *testing.T) { provider := new(test.TestProvider) provider.On("Name").Return("TestName") provider.On("DisplayName").Return("TestDisplayName") publicData, _ := ProviderPublicData(provider, objx.MSI("loginpathFormat", "~auth/%s/login")) publicDataMap := publicData.(map[string]interface{}) assert.Equal(t, publicDataMap["name"], "TestName") assert.Equal(t, publicDataMap["display"], "TestDisplayName") assert.Equal(t, publicDataMap["loginpath"], "~auth/TestName/login") }
func TestProviderListProvider(t *testing.T) { prov1 := new(test.TestProvider) prov2 := new(test.TestProvider) prov1.On("Name").Return("prov1") prov2.On("Name").Return("prov2") // build a list list := WithProviders(prov1, prov2) returnedProv, err := list.Provider("prov1") if assert.NoError(t, err) { assert.Equal(t, returnedProv, prov1) } // check nonsense name returnedProv, err = list.Provider("no such provider") if assert.Nil(t, returnedProv) { assert.IsType(t, &common.MissingProviderError{}, err, "MissingProviderError expected") } mock.AssertExpectationsForObjects(t, prov1.Mock, prov2.Mock) }
func TestRoundTrip(t *testing.T) { underlyingTripper := new(testifyhttp.TestRoundTripper) testProvider := new(test.TestProvider) creds := &common.Credentials{Map: objx.MSI()} creds.Set(OAuth2KeyAccessToken, "This is a real access token :)") tripper := new(OAuth2Tripper) tripper.underlyingTransport = underlyingTripper tripper.credentials = creds tripper.provider = testProvider request, _ := http.NewRequest("GET", "something", nil) underlyingTripper.On("RoundTrip", mock.Anything).Return(new(http.Response), nil) response, err := tripper.RoundTrip(request) if assert.NoError(t, err) { if assert.NotNil(t, response) { actualRequest := underlyingTripper.Calls[0].Arguments[0].(*http.Request) if assert.NotEqual(t, &actualRequest, &request, "Actual request should be different") { headerK, headerV := AuthorizationHeader(creds) assert.Equal(t, actualRequest.Header.Get(headerK), headerV) } } } mock.AssertExpectationsForObjects(t, testProvider.Mock, underlyingTripper.Mock) }
func TestAdd(t *testing.T) { prov1 := new(test.TestProvider) prov2 := new(test.TestProvider) prov3 := new(test.TestProvider) // build a list list := WithProviders(prov1, prov2) if assert.Equal(t, 2, len(list.providers)) { // add prov3 assert.Equal(t, list, list.Add(prov3), "Add should chain") assert.Equal(t, 3, len(list.providers), "Add should add the provider") assert.Equal(t, prov3, list.providers[2]) } }
func TestOAuth2Provider_CompleteAuth_JSON(t *testing.T) { config := &common.Config{ Map: objx.MSI( OAuth2KeyRedirectUrl, OAuth2KeyRedirectUrl, OAuth2KeyScope, OAuth2KeyScope, OAuth2KeyClientID, OAuth2KeyClientID, OAuth2KeySecret, OAuth2KeySecret, OAuth2KeyAuthURL, OAuth2KeyAuthURL, OAuth2KeyTokenURL, OAuth2KeyTokenURL)} testTripperFactory := new(test.TestTripperFactory) testTripper := new(test.TestTripper) testProvider := new(test.TestProvider) creds := new(common.Credentials) testResponse := new(http.Response) testResponse.Header = make(http.Header) testResponse.Header.Set("Content-Type", "application/json") testResponse.StatusCode = 200 testResponse.Body = ioutil.NopCloser(strings.NewReader(`{"expires_in":20,"access_token":"ACCESSTOKEN","refresh_token":"REFRESHTOKEN"}`)) testTripperFactory.On("NewTripper", common.EmptyCredentials, mock.Anything).Return(testTripper, nil) testTripper.On("RoundTrip", mock.Anything).Return(testResponse, nil) data := objx.MSI(OAuth2KeyCode, []string{"123"}) creds, err := CompleteAuth(testTripperFactory, data, config, testProvider) if assert.NoError(t, err) { if assert.NotNil(t, creds, "Creds should be returned") { assert.Equal(t, creds.Get(OAuth2KeyAccessToken).Str(), "ACCESSTOKEN") assert.Equal(t, creds.Get(OAuth2KeyRefreshToken).Str(), "REFRESHTOKEN") assert.Equal(t, creds.Get(OAuth2KeyExpiresIn).Data().(time.Duration), time.Duration(20)*time.Second) } } mock.AssertExpectationsForObjects(t, testTripperFactory.Mock, testTripper.Mock, testProvider.Mock) }
func TestspotifyTripperFactory(t *testing.T) { g := New("clientID", "secret", "http://myapp.com/") g.tripperFactory = nil f := g.TripperFactory() if assert.NotNil(t, f) { assert.Equal(t, f, g.tripperFactory) } }
func TestNewUser(t *testing.T) { testProvider := new(test.TestProvider) testProvider.On("Name").Return("providerName") data := objx.MSI( soundcloudKeyID, "123435467890", soundcloudKeyName, "Mathew", soundcloudKeyNickname, "mathew_testington", soundcloudKeyAvatarUrl, "http://myface.com/") creds := &common.Credentials{Map: objx.MSI(oauth2.OAuth2KeyAccessToken, "ABC123")} user := NewUser(data, creds, testProvider) if assert.NotNil(t, user) { assert.Equal(t, data, user.Data()) assert.Equal(t, "Mathew", user.Name()) assert.Equal(t, "mathew_testington", user.Nickname()) assert.Equal(t, "http://myface.com/", user.AvatarURL()) // check provider credentials creds := user.ProviderCredentials()[testProvider.Name()] if assert.NotNil(t, creds) { assert.Equal(t, "ABC123", creds.Get(oauth2.OAuth2KeyAccessToken).Str()) assert.Equal(t, "123435467890", creds.Get(common.CredentialsKeyID).Str()) } } mock.AssertExpectationsForObjects(t, testProvider.Mock) }
func TestGetUser(t *testing.T) { g := New("clientID", "secret", "http://myapp.com/") creds := &common.Credentials{Map: objx.MSI()} testTripperFactory := new(test.TestTripperFactory) testTripper := new(test.TestTripper) testTripperFactory.On("NewTripper", mock.Anything, g).Return(testTripper, nil) testResponse := new(http.Response) testResponse.Header = make(http.Header) testResponse.Header.Set("Content-Type", "application/json") testResponse.StatusCode = 200 testResponse.Body = ioutil.NopCloser(strings.NewReader(`{"full_name":"their-name","id":"uniqueid","username":"******","avatar_url":"http://myface.com/","online":true}`)) testTripper.On("RoundTrip", mock.Anything).Return(testResponse, nil) g.tripperFactory = testTripperFactory user, err := g.GetUser(creds) if assert.NoError(t, err) && assert.NotNil(t, user) { assert.Equal(t, user.Name(), "their-name") assert.Equal(t, user.AuthCode(), "") assert.Equal(t, user.Nickname(), "loginname") assert.Equal(t, user.Email(), "") // doesn't come from soundcloud assert.Equal(t, user.AvatarURL(), "http://myface.com/") assert.Equal(t, user.Data()["online"], true) } }
func TestGetUser(t *testing.T) { testProvider := new(test.TestProvider) creds := new(common.Credentials) testTripperFactory := new(test.TestTripperFactory) testTripper := new(test.TestTripper) testTripperFactory.On("NewTripper", creds, testProvider).Return(testTripper, nil) testResponse := new(http.Response) testResponse.Header = make(http.Header) testResponse.Header.Set("Content-Type", "application/json") testResponse.StatusCode = 200 testResponse.Body = ioutil.NopCloser(strings.NewReader(`{"name":"their-name","id":"uniqueid","login":"******","email":"*****@*****.**","avatar_url":"http://myface.com/","blog":"http://blog.com/"}`)) testTripper.On("RoundTrip", mock.Anything).Return(testResponse, nil) client := &http.Client{Transport: testTripper} testProvider.On("GetClient", creds).Return(client, nil) data, err := Get(testProvider, creds, "endpoint") if assert.NoError(t, err) && assert.NotNil(t, data) { assert.Equal(t, data["name"], "their-name") assert.Equal(t, data["id"], "uniqueid") assert.Equal(t, data["login"], "loginname") assert.Equal(t, data["email"], "*****@*****.**") assert.Equal(t, data["avatar_url"], "http://myface.com/") assert.Equal(t, data["blog"], "http://blog.com/") } }
func TestWithProviders(t *testing.T) { common.SetSecurityKey("ABC123") prov1 := new(test.TestProvider) prov2 := new(test.TestProvider) list := WithProviders(prov1, prov2) if assert.NotNil(t, list) { if assert.Equal(t, 2, len(list.providers)) { assert.Equal(t, prov1, list.providers[0]) assert.Equal(t, prov2, list.providers[1]) } // make sure the SharedProviderList was assigned too assert.Equal(t, SharedProviderList, list) } }
func TestGetUser(t *testing.T) { g := New("clientID", "secret", "http://myapp.com/") creds := &common.Credentials{Map: objx.MSI()} testTripperFactory := new(test.TestTripperFactory) testTripper := new(test.TestTripper) testTripperFactory.On("NewTripper", mock.Anything, g).Return(testTripper, nil) testResponse := new(http.Response) testResponse.Header = make(http.Header) testResponse.Header.Set("Content-Type", "application/json") testResponse.StatusCode = 200 testResponse.Body = ioutil.NopCloser(strings.NewReader(`{ "display_name":"JMWizzler", "email":"*****@*****.**", "external_urls":{ "spotify":"https://open.spotify.com/user/wizzler" }, "href":"https://api.spotify.com/v1/users/wizzler", "id":"wizzler", "images":[{ "height":null, "url":"https://fbcdn.example.com/2330_n.jpg", "width":null }], "type":"user", "uri":"spotify:user:wizzler" }`)) testTripper.On("RoundTrip", mock.Anything).Return(testResponse, nil) g.tripperFactory = testTripperFactory user, err := g.GetUser(creds) if assert.NoError(t, err) && assert.NotNil(t, user) { assert.Equal(t, user.Name(), "JMWizzler") assert.Equal(t, user.AuthCode(), "") // doesn't come from spotify assert.Equal(t, user.Nickname(), "") // doesn't come from spotify assert.Equal(t, user.Email(), "*****@*****.**") assert.Equal(t, user.AvatarURL(), "https://fbcdn.example.com/2330_n.jpg") assert.Equal(t, user.Data()["href"], "https://api.spotify.com/v1/users/wizzler") spotifyCreds := user.ProviderCredentials()[spotifyName] if assert.NotNil(t, spotifyCreds) { assert.Equal(t, "wizzler", spotifyCreds.Get(common.CredentialsKeyID).Str()) } } }
func TestGetUser(t *testing.T) { g := New("clientID", "secret", "http://myapp.com/") creds := &common.Credentials{Map: objx.MSI()} testTripperFactory := new(test.TestTripperFactory) testTripper := new(test.TestTripper) testTripperFactory.On("NewTripper", mock.Anything, g).Return(testTripper, nil) testResponse := new(http.Response) testResponse.Header = make(http.Header) testResponse.Header.Set("Content-Type", "application/json") testResponse.StatusCode = 200 testResponse.Body = ioutil.NopCloser(strings.NewReader(`{"name":"their-name","id":"uniqueid","login":"******","email":"*****@*****.**","avatar_url":"http://myface.com/","blog":"http://blog.com/"}`)) testTripper.On("RoundTrip", mock.Anything).Return(testResponse, nil) g.tripperFactory = testTripperFactory user, err := g.GetUser(creds) if assert.NoError(t, err) && assert.NotNil(t, user) { assert.Equal(t, user.Name(), "their-name") assert.Equal(t, user.AuthCode(), "") // doesn't come from github assert.Equal(t, user.Nickname(), "loginname") assert.Equal(t, user.Email(), "*****@*****.**") assert.Equal(t, user.AvatarURL(), "http://myface.com/") assert.Equal(t, user.Data()["blog"], "http://blog.com/") gitlabCreds := user.ProviderCredentials()[gitlabName] if assert.NotNil(t, gitlabCreds) { assert.Equal(t, "uniqueid", gitlabCreds.Get(common.CredentialsKeyID).Str()) } } }
func TestNewspotify(t *testing.T) { g := New("clientID", "secret", "http://myapp.com/") if assert.NotNil(t, g) { // check config if assert.NotNil(t, g.config) { assert.Equal(t, "clientID", g.config.Get(oauth2.OAuth2KeyClientID).Data()) assert.Equal(t, "secret", g.config.Get(oauth2.OAuth2KeySecret).Data()) assert.Equal(t, "http://myapp.com/", g.config.Get(oauth2.OAuth2KeyRedirectUrl).Data()) assert.Equal(t, spotifyDefaultScope, g.config.Get(oauth2.OAuth2KeyScope).Data()) assert.Equal(t, spotifyAuthURL, g.config.Get(oauth2.OAuth2KeyAuthURL).Data()) assert.Equal(t, spotifyTokenURL, g.config.Get(oauth2.OAuth2KeyTokenURL).Data()) } } }
func TestspotifyName(t *testing.T) { g := New("clientID", "secret", "http://myapp.com/") assert.Equal(t, spotifyName, g.Name()) }
func TestSoundcloudName(t *testing.T) { g := New("clientID", "secret", "http://myapp.com/") assert.Equal(t, soundcloudName, g.Name()) }
func TestGithubName(t *testing.T) { g := New("clientID", "secret", "http://myapp.com/") assert.Equal(t, gitlabName, g.Name()) }