You are here

protected function DBLogTestCase::testFilter in Drupal 7

Tests the database log filter functionality at admin/reports/dblog.

File

modules/dblog/dblog.test, line 454
Tests for dblog.module.

Class

DBLogTestCase
Tests logging messages to the database.

Code

protected function testFilter() {
  $this
    ->drupalLogin($this->big_user);

  // Clear the log to ensure that only generated entries will be found.
  db_delete('watchdog')
    ->execute();

  // Generate 9 random watchdog entries.
  $type_names = array();
  $types = array();
  for ($i = 0; $i < 3; $i++) {
    $type_names[] = $type_name = $this
      ->randomName();
    $severity = WATCHDOG_EMERGENCY;
    for ($j = 0; $j < 3; $j++) {
      $types[] = $type = array(
        'count' => $j + 1,
        'type' => $type_name,
        'severity' => $severity++,
      );
      $this
        ->generateLogEntries($type['count'], $type['type'], $type['severity']);
    }
  }

  // View the database log page.
  $this
    ->drupalGet('admin/reports/dblog');

  // Confirm that all the entries are displayed.
  $count = $this
    ->getTypeCount($types);
  foreach ($types as $key => $type) {
    $this
      ->assertEqual($count[$key], $type['count'], 'Count matched');
  }

  // Filter by each type and confirm that entries with various severities are
  // displayed.
  foreach ($type_names as $type_name) {
    $edit = array(
      'type[]' => array(
        $type_name,
      ),
    );
    $this
      ->drupalPost(NULL, $edit, t('Filter'));

    // Count the number of entries of this type.
    $type_count = 0;
    foreach ($types as $type) {
      if ($type['type'] == $type_name) {
        $type_count += $type['count'];
      }
    }
    $count = $this
      ->getTypeCount($types);
    $this
      ->assertEqual(array_sum($count), $type_count, 'Count matched');
  }

  // Set the filter to match each of the two filter-type attributes and
  // confirm the correct number of entries are displayed.
  foreach ($types as $key => $type) {
    $edit = array(
      'type[]' => array(
        $type['type'],
      ),
      'severity[]' => array(
        $type['severity'],
      ),
    );
    $this
      ->drupalPost(NULL, $edit, t('Filter'));
    $count = $this
      ->getTypeCount($types);
    $this
      ->assertEqual(array_sum($count), $type['count'], 'Count matched');
  }

  // Clear all logs and make sure the confirmation message is found.
  $this
    ->drupalPost('admin/reports/dblog', array(), t('Clear log messages'));
  $this
    ->assertText(t('Database log cleared.'), 'Confirmation message found');
}