You are here

public function BootstrapGetFilenameWebTestCase::testWatchdog in Drupal 7

Test that watchdog messages about missing files are correctly recorded.

File

modules/simpletest/tests/bootstrap.test, line 584

Class

BootstrapGetFilenameWebTestCase
Test drupal_get_filename() in the context of a full Drupal installation.

Code

public function testWatchdog() {

  // Search for a module that does not exist in either the file system or the
  // {system} table. Make sure that an appropriate warning is recorded in the
  // logs.
  $non_existing_module = $this
    ->randomName();
  $query_parameters = array(
    ':type' => 'php',
    ':severity' => WATCHDOG_WARNING,
  );
  $this
    ->assertEqual(db_query('SELECT COUNT(*) FROM {watchdog} WHERE type = :type AND severity = :severity', $query_parameters)
    ->fetchField(), 0, 'No warning message appears in the logs before searching for a module that does not exist.');

  // Trigger the drupal_get_filename() call. This must be done via a request
  // to a separate URL since the watchdog() will happen in a shutdown
  // function, and so that SimpleTest can be told to ignore (and not fail as
  // a result of) the expected PHP warnings generated during this process.
  variable_set('system_test_drupal_get_filename_test_module_name', $non_existing_module);
  $this
    ->drupalGet('system-test/drupal-get-filename');
  $message_variables = db_query('SELECT variables FROM {watchdog} WHERE type = :type AND severity = :severity', $query_parameters)
    ->fetchCol();
  $this
    ->assertEqual(count($message_variables), 1, 'A single warning message appears in the logs after searching for a module that does not exist.');
  $variables = reset($message_variables);
  $variables = unserialize($variables);
  $this
    ->assertTrue(isset($variables['!message']) && strpos($variables['!message'], format_string('The following module is missing from the file system: %name', array(
    '%name' => $non_existing_module,
  ))) !== FALSE, 'The warning message that appears in the logs after searching for a module that does not exist contains the expected text.');
}