You are here

public function ViewsIntegrationTest::testIntegration in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/dblog/src/Tests/Views/ViewsIntegrationTest.php \Drupal\dblog\Tests\Views\ViewsIntegrationTest::testIntegration()

Tests the integration.

File

core/modules/dblog/src/Tests/Views/ViewsIntegrationTest.php, line 56
Contains \Drupal\dblog\Tests\Views\ViewsIntegrationTest.

Class

ViewsIntegrationTest
Tests the views integration of dblog module.

Namespace

Drupal\dblog\Tests\Views

Code

public function testIntegration() {

  // Remove the watchdog entries added by the potential batch process.
  $this->container
    ->get('database')
    ->truncate('watchdog')
    ->execute();
  $entries = array();

  // Setup a watchdog entry without tokens.
  $entries[] = array(
    'message' => $this
      ->randomMachineName(),
    'variables' => array(
      'link' => \Drupal::l('Link', new Url('<front>')),
    ),
  );

  // Setup a watchdog entry with one token.
  $entries[] = array(
    'message' => '@token1',
    'variables' => array(
      '@token1' => $this
        ->randomMachineName(),
      'link' => \Drupal::l('Link', new Url('<front>')),
    ),
  );

  // Setup a watchdog entry with two tokens.
  $entries[] = array(
    'message' => '@token1 @token2',
    // Setup a link with a tag which is filtered by
    // \Drupal\Component\Utility\Xss::filterAdmin() in order to make sure
    // that strings which are not marked as safe get filtered.
    'variables' => array(
      '@token1' => $this
        ->randomMachineName(),
      '@token2' => $this
        ->randomMachineName(),
      'link' => '<a href="' . \Drupal::url('<front>') . '"><object>Link</object></a>',
    ),
  );
  $logger_factory = $this->container
    ->get('logger.factory');
  foreach ($entries as $entry) {
    $entry += array(
      'type' => 'test-views',
      'severity' => RfcLogLevel::NOTICE,
    );
    $logger_factory
      ->get($entry['type'])
      ->log($entry['severity'], $entry['message'], $entry['variables']);
  }
  $view = Views::getView('test_dblog');
  $this
    ->executeView($view);
  $view
    ->initStyle();
  foreach ($entries as $index => $entry) {
    $this
      ->assertEqual($view->style_plugin
      ->getField($index, 'message'), SafeMarkup::format($entry['message'], $entry['variables']));
    $link_field = $view->style_plugin
      ->getField($index, 'link');

    // The 3rd entry contains some unsafe markup that needs to get filtered.
    if ($index == 2) {

      // Make sure that unsafe link differs from the rendered link, so we know
      // that some filtering actually happened.
      $this
        ->assertNotEqual($link_field, $entry['variables']['link']);
    }
    $this
      ->assertEqual($link_field, Xss::filterAdmin($entry['variables']['link']));
  }

  // Disable replacing variables and check that the tokens aren't replaced.
  $view
    ->destroy();
  $view->storage
    ->invalidateCaches();
  $view
    ->initHandlers();
  $this
    ->executeView($view);
  $view
    ->initStyle();
  $view->field['message']->options['replace_variables'] = FALSE;
  foreach ($entries as $index => $entry) {
    $this
      ->assertEqual($view->style_plugin
      ->getField($index, 'message'), $entry['message']);
  }
}