You are here

public function ImplicitFunctionalTest::testImplicitGrant in Simple OAuth (OAuth2) & OpenID Connect 8.4

Same name and namespace in other branches
  1. 5.x tests/src/Functional/ImplicitFunctionalTest.php \Drupal\Tests\simple_oauth\Functional\ImplicitFunctionalTest::testImplicitGrant()

Test the valid Implicit grant.

File

tests/src/Functional/ImplicitFunctionalTest.php, line 54

Class

ImplicitFunctionalTest
The implicit tests.

Namespace

Drupal\Tests\simple_oauth\Functional

Code

public function testImplicitGrant() {
  $valid_params = [
    'response_type' => 'token',
    'client_id' => $this->client
      ->uuid(),
    'client_secret' => $this->clientSecret,
  ];

  // 1. Anonymous request invites the user to log in.
  $this
    ->drupalGet($this->authorizeUrl
    ->toString(), [
    'query' => $valid_params,
  ]);
  $assert_session = $this
    ->assertSession();
  $assert_session
    ->buttonExists('Log in');

  // 2. Log the user in and try again.
  $this
    ->drupalLogin($this->user);
  $this
    ->drupalGet($this->authorizeUrl
    ->toString(), [
    'query' => $valid_params,
  ]);
  $assert_session = $this
    ->assertSession();
  $assert_session
    ->statusCodeEquals(500);
  $this
    ->config('simple_oauth.settings')
    ->set('use_implicit', TRUE)
    ->save();
  $this
    ->drupalGet($this->authorizeUrl
    ->toString(), [
    'query' => $valid_params,
  ]);
  $assert_session = $this
    ->assertSession();
  $assert_session
    ->statusCodeEquals(200);
  $assert_session
    ->titleEquals('Grant Access to Client | Drupal');
  $assert_session
    ->buttonExists('Grant');
  $assert_session
    ->responseContains('Permissions');

  // 3. Grant access by submitting the form and get the token back.
  $this
    ->drupalPostForm($this->authorizeUrl, [], 'Grant', [
    'query' => $valid_params,
  ]);
  $assert_session = $this
    ->assertSession();
  $assert_session
    ->statusCodeEquals(200);
  $assert_session
    ->addressMatches('/\\/oauth\\/test#access_token=.*&token_type=Bearer&expires_in=\\d*/');
}