PageRenderTime 23ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/core/modules/aggregator/tests/src/Kernel/Views/IntegrationTest.php

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