Version 1
[yaffs-website] / web / core / modules / aggregator / tests / src / Kernel / Views / IntegrationTest.php
diff --git a/web/core/modules/aggregator/tests/src/Kernel/Views/IntegrationTest.php b/web/core/modules/aggregator/tests/src/Kernel/Views/IntegrationTest.php
new file mode 100644 (file)
index 0000000..39f57b2
--- /dev/null
@@ -0,0 +1,134 @@
+<?php
+
+namespace Drupal\Tests\aggregator\Kernel\Views;
+
+use Drupal\Component\Utility\Xss;
+use Drupal\Core\Render\RenderContext;
+use Drupal\Core\Url;
+use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
+use Drupal\views\Views;
+use Drupal\views\Tests\ViewTestData;
+
+/**
+ * Tests basic integration of views data from the aggregator module.
+ *
+ * @group aggregator
+ */
+class IntegrationTest extends ViewsKernelTestBase {
+
+  /**
+   * Modules to install.
+   *
+   * @var array
+   */
+  public static $modules = ['aggregator', 'aggregator_test_views', 'system', 'field', 'options', 'user'];
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['test_aggregator_items'];
+
+  /**
+   * The entity storage for aggregator items.
+   *
+   * @var \Drupal\aggregator\ItemStorage
+   */
+  protected $itemStorage;
+
+  /**
+   * The entity storage for aggregator feeds.
+   *
+   * @var \Drupal\aggregator\FeedStorage
+   */
+  protected $feedStorage;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp($import_test_views = TRUE) {
+    parent::setUp();
+
+    $this->installEntitySchema('aggregator_item');
+    $this->installEntitySchema('aggregator_feed');
+
+    ViewTestData::createTestViews(get_class($this), ['aggregator_test_views']);
+
+    $this->itemStorage = $this->container->get('entity.manager')->getStorage('aggregator_item');
+    $this->feedStorage = $this->container->get('entity.manager')->getStorage('aggregator_feed');
+  }
+
+  /**
+   * Tests basic aggregator_item view.
+   */
+  public function testAggregatorItemView() {
+    /** @var \Drupal\Core\Render\RendererInterface $renderer */
+    $renderer = \Drupal::service('renderer');
+
+    $feed = $this->feedStorage->create([
+      'title' => $this->randomMachineName(),
+      'url' => 'https://www.drupal.org/',
+      'refresh' => 900,
+      'checked' => 123543535,
+      'description' => $this->randomMachineName(),
+    ]);
+    $feed->save();
+
+    $items = [];
+    $expected = [];
+    for ($i = 0; $i < 10; $i++) {
+      $values = [];
+      $values['fid'] = $feed->id();
+      $values['timestamp'] = mt_rand(REQUEST_TIME - 10, REQUEST_TIME + 10);
+      $values['title'] = $this->randomMachineName();
+      $values['description'] = $this->randomMachineName();
+      // Add a image to ensure that the sanitizing can be tested below.
+      $values['author'] = $this->randomMachineName() . '<img src="http://example.com/example.png" \>"';
+      $values['link'] = 'https://www.drupal.org/node/' . mt_rand(1000, 10000);
+      $values['guid'] = $this->randomString();
+
+      $aggregator_item = $this->itemStorage->create($values);
+      $aggregator_item->save();
+      $items[$aggregator_item->id()] = $aggregator_item;
+
+      $values['iid'] = $aggregator_item->id();
+      $expected[] = $values;
+    }
+
+    $view = Views::getView('test_aggregator_items');
+    $this->executeView($view);
+
+    $column_map = [
+      'iid' => 'iid',
+      'title' => 'title',
+      'aggregator_item_timestamp' => 'timestamp',
+      'description' => 'description',
+      'aggregator_item_author' => 'author',
+    ];
+    $this->assertIdenticalResultset($view, $expected, $column_map);
+
+    // Ensure that the rendering of the linked title works as expected.
+    foreach ($view->result as $row) {
+      $iid = $view->field['iid']->getValue($row);
+      $expected_link = \Drupal::l($items[$iid]->getTitle(), Url::fromUri($items[$iid]->getLink(), ['absolute' => TRUE]));
+      $output = $renderer->executeInRenderContext(new RenderContext(), function () use ($view, $row) {
+        return $view->field['title']->advancedRender($row);
+      });
+      $this->assertEqual($output, $expected_link->getGeneratedLink(), 'Ensure the right link is generated');
+
+      $expected_author = Xss::filter($items[$iid]->getAuthor(), _aggregator_allowed_tags());
+      $output = $renderer->executeInRenderContext(new RenderContext(), function () use ($view, $row) {
+        return $view->field['author']->advancedRender($row);
+      });
+      $this->assertEqual($output, $expected_author, 'Ensure the author got filtered');
+
+      $expected_description = Xss::filter($items[$iid]->getDescription(), _aggregator_allowed_tags());
+      $output = $renderer->executeInRenderContext(new RenderContext(), function () use ($view, $row) {
+        return $view->field['description']->advancedRender($row);
+      });
+      $this->assertEqual($output, $expected_description, 'Ensure the author got filtered');
+    }
+  }
+
+}