83240db9f6
Signed-off-by: Andrew Dunai <a@dun.ai>
100 lines
3 KiB
Go
100 lines
3 KiB
Go
package reddit
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/url"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"golang.org/x/oauth2"
|
|
)
|
|
|
|
func TestWithHTTPClient(t *testing.T) {
|
|
_, err := NewClient(Credentials{}, WithHTTPClient(nil))
|
|
require.EqualError(t, err, "*http.Client: cannot be nil")
|
|
|
|
_, err = NewClient(Credentials{}, WithHTTPClient(&http.Client{}))
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestWithUserAgent(t *testing.T) {
|
|
c, err := NewClient(Credentials{}, WithUserAgent("test"))
|
|
require.NoError(t, err)
|
|
require.Equal(t, "test", c.UserAgent())
|
|
|
|
c, err = NewClient(Credentials{}, WithUserAgent(""))
|
|
require.NoError(t, err)
|
|
require.Equal(t, fmt.Sprintf("golang:%s:v%s", libraryName, libraryVersion), c.UserAgent())
|
|
}
|
|
|
|
func TestWithBaseURL(t *testing.T) {
|
|
c, err := NewClient(Credentials{}, WithBaseURL(":"))
|
|
urlErr, ok := err.(*url.Error)
|
|
require.True(t, ok)
|
|
require.Equal(t, "parse", urlErr.Op)
|
|
|
|
baseURL := "http://localhost:8080"
|
|
c, err = NewClient(Credentials{}, WithBaseURL(baseURL))
|
|
require.NoError(t, err)
|
|
require.Equal(t, baseURL, c.BaseURL.String())
|
|
}
|
|
|
|
func TestWithTokenURL(t *testing.T) {
|
|
c, err := NewClient(Credentials{}, WithTokenURL(":"))
|
|
urlErr, ok := err.(*url.Error)
|
|
require.True(t, ok)
|
|
require.Equal(t, "parse", urlErr.Op)
|
|
|
|
tokenURL := "http://localhost:8080/api/v1/access_token"
|
|
c, err = NewClient(Credentials{}, WithTokenURL(tokenURL))
|
|
require.NoError(t, err)
|
|
require.Equal(t, tokenURL, c.TokenURL.String())
|
|
}
|
|
|
|
type RequestInterceptor struct {
|
|
interceptedBody string
|
|
}
|
|
|
|
func (t *RequestInterceptor) RoundTrip(r *http.Request) (*http.Response, error) {
|
|
requestBody, _ := ioutil.ReadAll(r.Body)
|
|
t.interceptedBody = string(requestBody)
|
|
var body bytes.Buffer
|
|
body.WriteString(`{"access_token": "foobar", "expires_in": 3600, "scope": "*", "token_type": "bearer"}`)
|
|
return &http.Response{Status: "200 OK", StatusCode: 200, Body: io.NopCloser(&body)}, nil
|
|
}
|
|
|
|
func TestWithApplicationOnlyOAuth(t *testing.T) {
|
|
requestInterceptor := &RequestInterceptor{}
|
|
c, err := NewClient(Credentials{ID: "id", Secret: "secret"}, WithApplicationOnlyOAuth(true), WithHTTPClient(&http.Client{Transport: requestInterceptor}))
|
|
require.NoError(t, err)
|
|
token, err := c.client.Transport.(*oauth2.Transport).Source.Token()
|
|
require.NoError(t, err)
|
|
require.Equal(t, token.AccessToken, "foobar")
|
|
require.Equal(t, "grant_type=client_credentials", requestInterceptor.interceptedBody)
|
|
}
|
|
|
|
func TestFromEnv(t *testing.T) {
|
|
os.Setenv("GO_REDDIT_CLIENT_ID", "id1")
|
|
defer os.Unsetenv("GO_REDDIT_CLIENT_ID")
|
|
|
|
os.Setenv("GO_REDDIT_CLIENT_SECRET", "secret1")
|
|
defer os.Unsetenv("GO_REDDIT_CLIENT_SECRET")
|
|
|
|
os.Setenv("GO_REDDIT_CLIENT_USERNAME", "username1")
|
|
defer os.Unsetenv("GO_REDDIT_CLIENT_USERNAME")
|
|
|
|
os.Setenv("GO_REDDIT_CLIENT_PASSWORD", "password1")
|
|
defer os.Unsetenv("GO_REDDIT_CLIENT_PASSWORD")
|
|
|
|
c, err := NewClient(Credentials{}, FromEnv)
|
|
require.NoError(t, err)
|
|
require.Equal(t, "id1", c.ID)
|
|
require.Equal(t, "secret1", c.Secret)
|
|
require.Equal(t, "username1", c.Username)
|
|
require.Equal(t, "password1", c.Password)
|
|
}
|