Version 1
[yaffs-website] / web / core / modules / dblog / tests / src / Kernel / Views / ViewsIntegrationTest.php
diff --git a/web/core/modules/dblog/tests/src/Kernel/Views/ViewsIntegrationTest.php b/web/core/modules/dblog/tests/src/Kernel/Views/ViewsIntegrationTest.php
new file mode 100644 (file)
index 0000000..7b63394
--- /dev/null
@@ -0,0 +1,116 @@
+<?php
+
+namespace Drupal\Tests\dblog\Kernel\Views;
+
+use Drupal\Component\Utility\SafeMarkup;
+use Drupal\Component\Utility\Xss;
+use Drupal\Core\Logger\RfcLogLevel;
+use Drupal\Core\Url;
+use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
+use Drupal\views\Views;
+use Drupal\views\Tests\ViewTestData;
+
+/**
+ * Tests the views integration of dblog module.
+ *
+ * @group dblog
+ */
+class ViewsIntegrationTest extends ViewsKernelTestBase {
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['test_dblog'];
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['dblog', 'dblog_test_views', 'user'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp($import_test_views = TRUE) {
+    parent::setUp();
+
+    // Rebuild the router, otherwise we can't generate links.
+    $this->container->get('router.builder')->rebuild();
+
+    $this->installSchema('dblog', ['watchdog']);
+
+    ViewTestData::createTestViews(get_class($this), ['dblog_test_views']);
+  }
+
+  /**
+   * Tests the integration.
+   */
+  public function testIntegration() {
+
+    // Remove the watchdog entries added by the potential batch process.
+    $this->container->get('database')->truncate('watchdog')->execute();
+
+    $entries = [];
+    // Setup a watchdog entry without tokens.
+    $entries[] = [
+      'message' => $this->randomMachineName(),
+      'variables' => ['link' => \Drupal::l('Link', new Url('<front>'))],
+    ];
+    // Setup a watchdog entry with one token.
+    $entries[] = [
+      'message' => '@token1',
+      'variables' => ['@token1' => $this->randomMachineName(), 'link' => \Drupal::l('Link', new Url('<front>'))],
+    ];
+    // Setup a watchdog entry with two tokens.
+    $entries[] = [
+      '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' => [
+        '@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 += [
+        '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']);
+    }
+  }
+
+}