github.com/RichardKnop/go-oauth2-server@v1.0.5-0.20201019163316-d02a401490d0/oauth/grant_type_password_test.go (about) 1 package oauth_test 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "net/url" 7 8 "github.com/RichardKnop/go-oauth2-server/models" 9 "github.com/RichardKnop/go-oauth2-server/oauth" 10 "github.com/RichardKnop/go-oauth2-server/oauth/roles" 11 "github.com/RichardKnop/go-oauth2-server/oauth/tokentypes" 12 "github.com/RichardKnop/go-oauth2-server/test-util" 13 "github.com/stretchr/testify/assert" 14 ) 15 16 func (suite *OauthTestSuite) TestPasswordGrant() { 17 // Prepare a request 18 r, err := http.NewRequest("POST", "http://1.2.3.4/v1/oauth/tokens", nil) 19 assert.NoError(suite.T(), err, "Request setup should not get an error") 20 r.SetBasicAuth("test_client_1", "test_secret") 21 r.PostForm = url.Values{ 22 "grant_type": {"password"}, 23 "username": {"test@user"}, 24 "password": {"test_password"}, 25 "scope": {"read_write"}, 26 } 27 28 // Serve the request 29 w := httptest.NewRecorder() 30 suite.router.ServeHTTP(w, r) 31 32 // Fetch data 33 accessToken, refreshToken := new(models.OauthAccessToken), new(models.OauthRefreshToken) 34 assert.False(suite.T(), models.OauthAccessTokenPreload(suite.db). 35 Last(accessToken).RecordNotFound()) 36 assert.False(suite.T(), models.OauthRefreshTokenPreload(suite.db). 37 Last(refreshToken).RecordNotFound()) 38 39 // Check the response 40 expected := &oauth.AccessTokenResponse{ 41 UserID: accessToken.UserID.String, 42 AccessToken: accessToken.Token, 43 ExpiresIn: 3600, 44 TokenType: tokentypes.Bearer, 45 Scope: "read_write", 46 RefreshToken: refreshToken.Token, 47 } 48 testutil.TestResponseObject(suite.T(), w, expected, 200) 49 } 50 51 func (suite *OauthTestSuite) TestPasswordGrantWithRoleRestriction() { 52 suite.service.RestrictToRoles(roles.Superuser) 53 54 // Prepare a request 55 r, err := http.NewRequest("POST", "http://1.2.3.4/v1/oauth/tokens", nil) 56 assert.NoError(suite.T(), err, "Request setup should not get an error") 57 r.SetBasicAuth("test_client_1", "test_secret") 58 r.PostForm = url.Values{ 59 "grant_type": {"password"}, 60 "username": {"test@user"}, 61 "password": {"test_password"}, 62 "scope": {"read_write"}, 63 } 64 65 // Serve the request 66 w := httptest.NewRecorder() 67 suite.router.ServeHTTP(w, r) 68 69 // Check the response 70 testutil.TestResponseForError( 71 suite.T(), 72 w, 73 oauth.ErrInvalidUsernameOrPassword.Error(), 74 401, 75 ) 76 77 suite.service.RestrictToRoles(roles.Superuser, roles.User) 78 }