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  }