private function DbLogTest::doUser in Zircon Profile 8.0
Same name and namespace in other branches
- 8 core/modules/dblog/src/Tests/DbLogTest.php \Drupal\dblog\Tests\DbLogTest::doUser()
Generates and then verifies some user events.
1 call to DbLogTest::doUser()
- DbLogTest::verifyEvents in core/
modules/ dblog/ src/ Tests/ DbLogTest.php - Generates and then verifies various types of events.
File
- core/
modules/ dblog/ src/ Tests/ DbLogTest.php, line 291 - Contains \Drupal\dblog\Tests\DbLogTest.
Class
- DbLogTest
- Generate events and verify dblog entries; verify user access to log reports based on permissions.
Namespace
Drupal\dblog\TestsCode
private function doUser() {
// Set user variables.
$name = $this
->randomMachineName();
$pass = user_password();
// Add a user using the form to generate an add user event (which is not
// triggered by drupalCreateUser).
$edit = array();
$edit['name'] = $name;
$edit['mail'] = $name . '@example.com';
$edit['pass[pass1]'] = $pass;
$edit['pass[pass2]'] = $pass;
$edit['status'] = 1;
$this
->drupalPostForm('admin/people/create', $edit, t('Create new account'));
$this
->assertResponse(200);
// Retrieve the user object.
$user = user_load_by_name($name);
$this
->assertTrue($user != NULL, format_string('User @name was loaded', array(
'@name' => $name,
)));
// pass_raw property is needed by drupalLogin.
$user->pass_raw = $pass;
// Login user.
$this
->drupalLogin($user);
// Logout user.
$this
->drupalLogout();
// Fetch the row IDs in watchdog that relate to the user.
$result = db_query('SELECT wid FROM {watchdog} WHERE uid = :uid', array(
':uid' => $user
->id(),
));
foreach ($result as $row) {
$ids[] = $row->wid;
}
$count_before = isset($ids) ? count($ids) : 0;
$this
->assertTrue($count_before > 0, format_string('DBLog contains @count records for @name', array(
'@count' => $count_before,
'@name' => $user
->getUsername(),
)));
// Login the admin user.
$this
->drupalLogin($this->adminUser);
// Delete the user created at the start of this test.
// We need to POST here to invoke batch_process() in the internal browser.
$this
->drupalPostForm('user/' . $user
->id() . '/cancel', array(
'user_cancel_method' => 'user_cancel_reassign',
), t('Cancel account'));
// View the database log report.
$this
->drupalGet('admin/reports/dblog');
$this
->assertResponse(200);
// Verify that the expected events were recorded.
// Add user.
// Default display includes name and email address; if too long, the email
// address is replaced by three periods.
$this
->assertLogMessage(t('New user: %name %email.', array(
'%name' => $name,
'%email' => '<' . $user
->getEmail() . '>',
)), 'DBLog event was recorded: [add user]');
// Login user.
$this
->assertLogMessage(t('Session opened for %name.', array(
'%name' => $name,
)), 'DBLog event was recorded: [login user]');
// Logout user.
$this
->assertLogMessage(t('Session closed for %name.', array(
'%name' => $name,
)), 'DBLog event was recorded: [logout user]');
// Delete user.
$message = t('Deleted user: %name %email.', array(
'%name' => $name,
'%email' => '<' . $user
->getEmail() . '>',
));
$message_text = Unicode::truncate(Html::decodeEntities(strip_tags($message)), 56, TRUE, TRUE);
// Verify that the full message displays on the details page.
$link = FALSE;
if ($links = $this
->xpath('//a[text()="' . $message_text . '"]')) {
// Found link with the message text.
$links = array_shift($links);
foreach ($links
->attributes() as $attr => $value) {
if ($attr == 'href') {
// Extract link to details page.
$link = Unicode::substr($value, strpos($value, 'admin/reports/dblog/event/'));
$this
->drupalGet($link);
// Check for full message text on the details page.
$this
->assertRaw($message, 'DBLog event details was found: [delete user]');
break;
}
}
}
$this
->assertTrue($link, 'DBLog event was recorded: [delete user]');
// Visit random URL (to generate page not found event).
$not_found_url = $this
->randomMachineName(60);
$this
->drupalGet($not_found_url);
$this
->assertResponse(404);
// View the database log page-not-found report page.
$this
->drupalGet('admin/reports/page-not-found');
$this
->assertResponse(200);
// Check that full-length URL displayed.
$this
->assertText($not_found_url, 'DBLog event was recorded: [page not found]');
}