github.com/orange-cloudfoundry/cli@v7.1.0+incompatible/api/uaa/refresh_token_test.go (about)

     1  package uaa_test
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	. "code.cloudfoundry.org/cli/api/uaa"
     8  	"code.cloudfoundry.org/cli/api/uaa/constant"
     9  	"code.cloudfoundry.org/cli/api/uaa/uaafakes"
    10  
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  	. "github.com/onsi/gomega/ghttp"
    14  )
    15  
    16  var _ = Describe("UAA Client", func() {
    17  	var (
    18  		client *Client
    19  
    20  		fakeConfig *uaafakes.FakeConfig
    21  	)
    22  
    23  	BeforeEach(func() {
    24  		fakeConfig = NewTestConfig()
    25  
    26  		client = NewTestUAAClientAndStore(fakeConfig)
    27  	})
    28  
    29  	Describe("RefreshAccessToken", func() {
    30  		var (
    31  			returnedAccessToken  string
    32  			sentRefreshToken     string
    33  			returnedRefreshToken string
    34  		)
    35  
    36  		When("the provided grant_type is client_credentials", func() {
    37  			BeforeEach(func() {
    38  				fakeConfig.UAAGrantTypeReturns(string(constant.GrantTypeClientCredentials))
    39  
    40  				returnedAccessToken = "I-ACCESS-TOKEN"
    41  				response := fmt.Sprintf(`{
    42  				"access_token": "%s",
    43  				"token_type": "bearer",
    44  				"expires_in": 599,
    45  				"scope": "cloud_controller.read password.write cloud_controller.write openid uaa.user",
    46  				"jti": "4150c08afa2848278e5ad57201024e32"
    47  			}`, returnedAccessToken)
    48  
    49  				server.AppendHandlers(
    50  					CombineHandlers(
    51  						verifyRequestHost(TestAuthorizationResource),
    52  						VerifyRequest(http.MethodPost, "/oauth/token"),
    53  						VerifyHeaderKV("Accept", "application/json"),
    54  						VerifyHeaderKV("Content-Type", "application/x-www-form-urlencoded"),
    55  						VerifyHeaderKV("Authorization"),
    56  						VerifyBody([]byte(fmt.Sprintf("client_id=client-id&client_secret=client-secret&grant_type=%s", constant.GrantTypeClientCredentials))),
    57  						RespondWith(http.StatusOK, response),
    58  					))
    59  			})
    60  
    61  			It("refreshes the tokens", func() {
    62  				token, err := client.RefreshAccessToken(sentRefreshToken)
    63  				Expect(err).ToNot(HaveOccurred())
    64  				Expect(token).To(Equal(RefreshedTokens{
    65  					AccessToken: returnedAccessToken,
    66  					Type:        "bearer",
    67  				}))
    68  
    69  				Expect(server.ReceivedRequests()).To(HaveLen(2))
    70  			})
    71  		})
    72  
    73  		When("the provided grant_type is password", func() {
    74  			BeforeEach(func() {
    75  				fakeConfig.UAAGrantTypeReturns(string(constant.GrantTypePassword))
    76  
    77  				returnedAccessToken = "I-ACCESS-TOKEN"
    78  				sentRefreshToken = "I-R-REFRESH-TOKEN"
    79  				returnedRefreshToken = "I-R-NEW-REFRESH-TOKEN"
    80  				response := fmt.Sprintf(`{
    81  				"access_token": "%s",
    82  				"token_type": "bearer",
    83  				"refresh_token": "%s",
    84  				"expires_in": 599,
    85  				"scope": "cloud_controller.read password.write cloud_controller.write openid uaa.user",
    86  				"jti": "4150c08afa2848278e5ad57201024e32"
    87  			}`, returnedAccessToken, returnedRefreshToken)
    88  
    89  				server.AppendHandlers(
    90  					CombineHandlers(
    91  						verifyRequestHost(TestAuthorizationResource),
    92  						VerifyRequest(http.MethodPost, "/oauth/token"),
    93  						VerifyHeaderKV("Accept", "application/json"),
    94  						VerifyHeaderKV("Content-Type", "application/x-www-form-urlencoded"),
    95  						VerifyHeaderKV("Authorization", "Basic Y2xpZW50LWlkOmNsaWVudC1zZWNyZXQ="),
    96  						VerifyBody([]byte(fmt.Sprintf("grant_type=%s&refresh_token=%s", constant.GrantTypeRefreshToken, sentRefreshToken))),
    97  						RespondWith(http.StatusOK, response),
    98  					))
    99  			})
   100  
   101  			It("refreshes the tokens", func() {
   102  				token, err := client.RefreshAccessToken(sentRefreshToken)
   103  				Expect(err).ToNot(HaveOccurred())
   104  				Expect(token).To(Equal(RefreshedTokens{
   105  					AccessToken:  returnedAccessToken,
   106  					RefreshToken: returnedRefreshToken,
   107  					Type:         "bearer",
   108  				}))
   109  
   110  				Expect(server.ReceivedRequests()).To(HaveLen(2))
   111  			})
   112  		})
   113  
   114  		When("the provided grant_type is empty", func() {
   115  			BeforeEach(func() {
   116  				fakeConfig.UAAGrantTypeReturns("")
   117  
   118  				returnedAccessToken = "I-ACCESS-TOKEN"
   119  				sentRefreshToken = "I-R-REFRESH-TOKEN"
   120  				returnedRefreshToken = "I-R-NEW-REFRESH-TOKEN"
   121  				response := fmt.Sprintf(`{
   122  				"access_token": "%s",
   123  				"token_type": "bearer",
   124  				"refresh_token": "%s",
   125  				"expires_in": 599,
   126  				"scope": "cloud_controller.read password.write cloud_controller.write openid uaa.user",
   127  				"jti": "4150c08afa2848278e5ad57201024e32"
   128  			}`, returnedAccessToken, returnedRefreshToken)
   129  
   130  				server.AppendHandlers(
   131  					CombineHandlers(
   132  						verifyRequestHost(TestAuthorizationResource),
   133  						VerifyRequest(http.MethodPost, "/oauth/token"),
   134  						VerifyHeaderKV("Accept", "application/json"),
   135  						VerifyHeaderKV("Content-Type", "application/x-www-form-urlencoded"),
   136  						VerifyHeaderKV("Authorization", "Basic Y2xpZW50LWlkOmNsaWVudC1zZWNyZXQ="),
   137  						VerifyBody([]byte(fmt.Sprintf("grant_type=%s&refresh_token=%s", constant.GrantTypeRefreshToken, sentRefreshToken))),
   138  						RespondWith(http.StatusOK, response),
   139  					))
   140  			})
   141  
   142  			It("refreshes the tokens", func() {
   143  				token, err := client.RefreshAccessToken(sentRefreshToken)
   144  				Expect(err).ToNot(HaveOccurred())
   145  				Expect(token).To(Equal(RefreshedTokens{
   146  					AccessToken:  returnedAccessToken,
   147  					RefreshToken: returnedRefreshToken,
   148  					Type:         "bearer",
   149  				}))
   150  
   151  				Expect(server.ReceivedRequests()).To(HaveLen(2))
   152  			})
   153  		})
   154  	})
   155  })