View source
<?php
namespace Drupal\Tests\simple_oauth\Functional;
use Drupal\Component\Serialization\Json;
use League\OAuth2\Server\CryptTrait;
class RefreshFunctionalTest extends TokenBearerFunctionalTestBase {
use CryptTrait;
protected $refreshToken;
protected function setUp() {
parent::setUp();
$this->scope = 'authenticated';
$valid_payload = [
'grant_type' => 'password',
'client_id' => $this->client
->uuid(),
'client_secret' => $this->clientSecret,
'username' => $this->user
->getAccountName(),
'password' => $this->user->pass_raw,
'scope' => $this->scope,
];
$response = $this
->post($this->url, $valid_payload);
$body = (string) $response
->getBody();
$parsed_response = Json::decode($body);
$this->refreshToken = $parsed_response['refresh_token'];
}
public function testRefreshGrant() {
$valid_payload = [
'grant_type' => 'refresh_token',
'client_id' => $this->client
->uuid(),
'client_secret' => $this->clientSecret,
'refresh_token' => $this->refreshToken,
'scope' => $this->scope,
];
$response = $this
->post($this->url, $valid_payload);
$this
->assertValidTokenResponse($response, TRUE);
$parsed_response = Json::decode((string) $response
->getBody());
$valid_payload = [
'grant_type' => 'refresh_token',
'client_id' => $this->client
->uuid(),
'client_secret' => $this->clientSecret,
'refresh_token' => $parsed_response['refresh_token'],
'scope' => $this->scope,
];
$response = $this
->post($this->url, $valid_payload);
$this
->assertValidTokenResponse($response, TRUE);
$valid_payload = [
'grant_type' => 'refresh_token',
'client_id' => $this->client
->uuid(),
'client_secret' => $this->clientSecret,
'refresh_token' => $this->refreshToken,
];
$response = $this
->post($this->url, $valid_payload);
$parsed_response = Json::decode((string) $response
->getBody());
$this
->assertSame(401, $response
->getStatusCode());
$this
->assertSame('invalid_request', $parsed_response['error']);
}
public function testMissingRefreshGrant() {
$valid_payload = [
'grant_type' => 'refresh_token',
'client_id' => $this->client
->uuid(),
'client_secret' => $this->clientSecret,
'refresh_token' => $this->refreshToken,
'scope' => $this->scope,
];
$data = [
'grant_type' => [
'error' => 'invalid_grant',
'code' => 400,
],
'client_id' => [
'error' => 'invalid_request',
'code' => 400,
],
'client_secret' => [
'error' => 'invalid_client',
'code' => 401,
],
'refresh_token' => [
'error' => 'invalid_request',
'code' => 400,
],
];
foreach ($data as $key => $value) {
$invalid_payload = $valid_payload;
unset($invalid_payload[$key]);
$response = $this
->post($this->url, $invalid_payload);
$parsed_response = Json::decode((string) $response
->getBody());
$this
->assertSame($value['error'], $parsed_response['error'], sprintf('Correct error code %s for %s.', $value['error'], $key));
$this
->assertSame($value['code'], $response
->getStatusCode(), sprintf('Correct status code %d for %s.', $value['code'], $key));
}
}
public function testInvalidRefreshGrant() {
$valid_payload = [
'grant_type' => 'refresh_token',
'client_id' => $this->client
->uuid(),
'client_secret' => $this->clientSecret,
'refresh_token' => $this->refreshToken,
'scope' => $this->scope,
];
$data = [
'grant_type' => [
'error' => 'invalid_grant',
'code' => 400,
],
'client_id' => [
'error' => 'invalid_client',
'code' => 401,
],
'client_secret' => [
'error' => 'invalid_client',
'code' => 401,
],
'refresh_token' => [
'error' => 'invalid_request',
'code' => 401,
],
];
foreach ($data as $key => $value) {
$invalid_payload = $valid_payload;
$invalid_payload[$key] = $this
->getRandomGenerator()
->string();
$response = $this
->post($this->url, $invalid_payload);
$parsed_response = Json::decode((string) $response
->getBody());
$this
->assertSame($value['error'], $parsed_response['error'], sprintf('Correct error code %s for %s.', $value['error'], $key));
$this
->assertSame($value['code'], $response
->getStatusCode(), sprintf('Correct status code %d for %s.', $value['code'], $key));
}
}
}