Upgraded drupal core with security updates
[yaffs-website] / web / core / modules / aggregator / tests / src / Kernel / Views / IntegrationTest.php
1 <?php
2
3 namespace Drupal\Tests\aggregator\Kernel\Views;
4
5 use Drupal\Component\Utility\Xss;
6 use Drupal\Core\Render\RenderContext;
7 use Drupal\Core\Url;
8 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
9 use Drupal\views\Views;
10 use Drupal\views\Tests\ViewTestData;
11
12 /**
13  * Tests basic integration of views data from the aggregator module.
14  *
15  * @group aggregator
16  */
17 class IntegrationTest extends ViewsKernelTestBase {
18
19   /**
20    * Modules to install.
21    *
22    * @var array
23    */
24   public static $modules = ['aggregator', 'aggregator_test_views', 'system', 'field', 'options', 'user'];
25
26   /**
27    * Views used by this test.
28    *
29    * @var array
30    */
31   public static $testViews = ['test_aggregator_items'];
32
33   /**
34    * The entity storage for aggregator items.
35    *
36    * @var \Drupal\aggregator\ItemStorage
37    */
38   protected $itemStorage;
39
40   /**
41    * The entity storage for aggregator feeds.
42    *
43    * @var \Drupal\aggregator\FeedStorage
44    */
45   protected $feedStorage;
46
47   /**
48    * {@inheritdoc}
49    */
50   protected function setUp($import_test_views = TRUE) {
51     parent::setUp();
52
53     $this->installEntitySchema('aggregator_item');
54     $this->installEntitySchema('aggregator_feed');
55
56     ViewTestData::createTestViews(get_class($this), ['aggregator_test_views']);
57
58     $this->itemStorage = $this->container->get('entity.manager')->getStorage('aggregator_item');
59     $this->feedStorage = $this->container->get('entity.manager')->getStorage('aggregator_feed');
60   }
61
62   /**
63    * Tests basic aggregator_item view.
64    */
65   public function testAggregatorItemView() {
66     /** @var \Drupal\Core\Render\RendererInterface $renderer */
67     $renderer = \Drupal::service('renderer');
68
69     $feed = $this->feedStorage->create([
70       'title' => $this->randomMachineName(),
71       'url' => 'https://www.drupal.org/',
72       'refresh' => 900,
73       'checked' => 123543535,
74       'description' => $this->randomMachineName(),
75     ]);
76     $feed->save();
77
78     $items = [];
79     $expected = [];
80     for ($i = 0; $i < 10; $i++) {
81       $values = [];
82       $values['fid'] = $feed->id();
83       $values['timestamp'] = mt_rand(REQUEST_TIME - 10, REQUEST_TIME + 10);
84       $values['title'] = $this->randomMachineName();
85       $values['description'] = $this->randomMachineName();
86       // Add a image to ensure that the sanitizing can be tested below.
87       $values['author'] = $this->randomMachineName() . '<img src="http://example.com/example.png" \>"';
88       $values['link'] = 'https://www.drupal.org/node/' . mt_rand(1000, 10000);
89       $values['guid'] = $this->randomString();
90
91       $aggregator_item = $this->itemStorage->create($values);
92       $aggregator_item->save();
93       $items[$aggregator_item->id()] = $aggregator_item;
94
95       $values['iid'] = $aggregator_item->id();
96       $expected[] = $values;
97     }
98
99     $view = Views::getView('test_aggregator_items');
100     $this->executeView($view);
101
102     $column_map = [
103       'iid' => 'iid',
104       'title' => 'title',
105       'aggregator_item_timestamp' => 'timestamp',
106       'description' => 'description',
107       'aggregator_item_author' => 'author',
108     ];
109     $this->assertIdenticalResultset($view, $expected, $column_map);
110
111     // Ensure that the rendering of the linked title works as expected.
112     foreach ($view->result as $row) {
113       $iid = $view->field['iid']->getValue($row);
114       $expected_link = \Drupal::l($items[$iid]->getTitle(), Url::fromUri($items[$iid]->getLink(), ['absolute' => TRUE]));
115       $output = $renderer->executeInRenderContext(new RenderContext(), function () use ($view, $row) {
116         return $view->field['title']->advancedRender($row);
117       });
118       $this->assertEqual($output, $expected_link->getGeneratedLink(), 'Ensure the right link is generated');
119
120       $expected_author = Xss::filter($items[$iid]->getAuthor(), _aggregator_allowed_tags());
121       $output = $renderer->executeInRenderContext(new RenderContext(), function () use ($view, $row) {
122         return $view->field['author']->advancedRender($row);
123       });
124       $this->assertEqual($output, $expected_author, 'Ensure the author got filtered');
125
126       $expected_description = Xss::filter($items[$iid]->getDescription(), _aggregator_allowed_tags());
127       $output = $renderer->executeInRenderContext(new RenderContext(), function () use ($view, $row) {
128         return $view->field['description']->advancedRender($row);
129       });
130       $this->assertEqual($output, $expected_description, 'Ensure the author got filtered');
131     }
132   }
133
134 }