github.com/RichardKnop/go-oauth2-server@v1.0.5-0.20201019163316-d02a401490d0/oauth/grant_type_client_credentials_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/tokentypes"
    11  	"github.com/RichardKnop/go-oauth2-server/test-util"
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func (suite *OauthTestSuite) TestClientCredentialsGrant() {
    16  	// Prepare a request
    17  	r, err := http.NewRequest("POST", "http://1.2.3.4/v1/oauth/tokens", nil)
    18  	assert.NoError(suite.T(), err, "Request setup should not get an error")
    19  	r.SetBasicAuth("test_client_1", "test_secret")
    20  	r.PostForm = url.Values{
    21  		"grant_type": {"client_credentials"},
    22  		"scope":      {"read_write"},
    23  	}
    24  
    25  	// Serve the request
    26  	w := httptest.NewRecorder()
    27  	suite.router.ServeHTTP(w, r)
    28  
    29  	// Fetch data
    30  	accessToken := new(models.OauthAccessToken)
    31  	assert.False(suite.T(), models.OauthAccessTokenPreload(suite.db).
    32  		Last(accessToken).RecordNotFound())
    33  
    34  	// Check the response
    35  	expected := &oauth.AccessTokenResponse{
    36  		AccessToken: accessToken.Token,
    37  		ExpiresIn:   3600,
    38  		TokenType:   tokentypes.Bearer,
    39  		Scope:       "read_write",
    40  	}
    41  	testutil.TestResponseObject(suite.T(), w, expected, 200)
    42  
    43  	// Client credentials grant does not produce refresh token
    44  	assert.True(suite.T(), models.OauthRefreshTokenPreload(suite.db).
    45  		First(new(models.OauthRefreshToken)).RecordNotFound())
    46  }