function DBLogTestCase::doUser
Generates and then verifies some user events.
1 call to DBLogTestCase::doUser()
- DBLogTestCase::verifyEvents in modules/
dblog/ dblog.test - Generates and then verifies various types of events.
File
-
modules/
dblog/ dblog.test, line 242
Class
- DBLogTestCase
- Tests logging messages to the database.
Code
private function doUser() {
// Set user variables.
$name = $this->randomName();
$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->drupalPost('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->uid,
));
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->name,
)));
// Login the admin user.
$this->drupalLogin($this->big_user);
// Delete the user created at the start of this test.
// We need to POST here to invoke batch_process() in the internal browser.
$this->drupalPost('user/' . $user->uid . '/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->mail,
)), '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->mail . '>',
));
$message_text = truncate_utf8(filter_xss($message, array()), 56, TRUE, TRUE);
// Verify that the full message displays on the details page.
$link = FALSE;
if ($links = $this->xpath('//a[text()="' . html_entity_decode($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 = drupal_substr($value, strpos($value, 'admin/reports/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->randomName(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]');
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.