function LoginCommandTest::testLogin

Tests logins.

File

core/modules/user/tests/src/Functional/Command/LoginCommandTest.php, line 41

Class

LoginCommandTest
Tests user:login runs as a console command and generates a working link.

Namespace

Drupal\Tests\user\Functional\Command

Code

public function testLogin() : void {
  $adminUser = $this->drupalCreateUser([
    'administer site configuration',
    'access site reports',
  ]);
  $command = new LoginCommand($this->container
    ->get('entity_type.manager'), $this->container
    ->get(OneTimeAuthentication::class));
  $tester = new CommandTester($command);
  // Test path argument
  $code = $tester->execute([
    'path' => 'admin',
  ]);
  $this->assertStringContainsString('destination=admin', $tester->getDisplay());
  // Test fallback to uid=1
  $code = $tester->execute([]);
  $this->assertStringContainsString('user/reset/1', $tester->getDisplay());
  $this->assertEquals(Command::SUCCESS, $code);
  // Test account selection options for a valid user.
  $code = $tester->execute([
    '--uid' => '2',
  ]);
  $this->assertStringContainsString('user/reset/2', $tester->getDisplay());
  $code = $tester->execute([
    '--name' => $adminUser->getAccountName(),
  ]);
  $this->assertStringContainsString('user/reset/2', $tester->getDisplay());
  $code = $tester->execute([
    '--mail' => $adminUser->getEmail(),
  ]);
  $this->assertStringContainsString('user/reset/2', $tester->getDisplay());
  // Actually verify that link.
  $this->drupalGet(trim($tester->getDisplay()));
  $this->assertSession()
    ->statusCodeEquals(200);
  // @see \Drupal\Tests\UiHelperTrait::drupalLogin
  $adminUser->sessionId = $this->getSession()
    ->getCookie(\Drupal::service('session_configuration')->getOptions(\Drupal::request())['name']);
  $this->assertTrue($this->drupalUserIsLoggedIn($adminUser), "User {$adminUser->getAccountName()} should have successfully logged in.");
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.