1.20.x dblog.test private DBLogTestCase::doUser()

Generates and then verifies some user events.

File

modules/dblog/tests/dblog.test, line 217
Tests for dblog.module.

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 backdropCreateUser).
  $edit = array();
  $edit['name'] = $name;
  $edit['mail'] = $name . '@example.com';
  $edit['pass'] = $pass;
  $edit['status'] = 1;
  $edit['notify'] = FALSE;
  $this->backdropPost('admin/people/create', $edit, t('Create new account'));
  $new_user_time = time();
  $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 backdropLogin.
  $user->pass_raw = $pass;
  // Login user.
  $this->backdropLogin($user);
  $login_time = time();
  // Logout user.
  $this->backdropLogout();
  $logout_time = time();
  // 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->backdropLogin($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->backdropPost('user/' . $user->uid . '/cancel', array('user_cancel_method' => 'user_cancel_reassign'), t('Cancel account'));

  // View the database log report.
  $this->backdropGet('admin/reports/dblog');
  $this->assertResponse(200);

  // Timezone for all dates is from the logged in user.
  $admin_timezone = $this->big_user->timezone;

  // 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]');
  $this->assertText(format_date($new_user_time, 'custom', 'M d, Y - j:ia', $admin_timezone));
  // Login user.
  $this->assertLogMessage(t('Session opened for %name.', array('%name' => $name)), 'DBLog event was recorded: [login user]');
  $this->assertText(format_date($login_time, 'custom', 'M d, Y - j:ia', $admin_timezone));
  // Logout user.
  $this->assertLogMessage(t('Session closed for %name.', array('%name' => $name)), 'DBLog event was recorded: [logout user]');
  $this->assertText(format_date($logout_time, 'custom', 'M d, Y - j:ia', $admin_timezone));
  // 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 = backdrop_substr($value, strpos($value, 'admin/reports/event/'));
        $this->backdropGet($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->backdropGet($not_found_url);
  $this->assertResponse(404);
  // View the database log page-not-found report page.
  $this->backdropGet('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]');
}