From 7789696c168b4cec909a8b6fd24596b7f3b258f7 Mon Sep 17 00:00:00 2001 From: Bojan Zivanovic <bojanz@gmail.com> Date: Wed, 23 Dec 2015 13:17:55 +0100 Subject: [PATCH] Port the test from the d.o issue. --- .../Plugin/views/field/RenderedEntityTest.php | 164 ++++++++++++++++++ ...s.view.test_field_entity_test_rendered.yml | 161 +++++++++++++++++ 2 files changed, 325 insertions(+) create mode 100644 src/Tests/Plugin/views/field/RenderedEntityTest.php create mode 100644 tests/modules/entity_module_test/test_views/views.view.test_field_entity_test_rendered.yml diff --git a/src/Tests/Plugin/views/field/RenderedEntityTest.php b/src/Tests/Plugin/views/field/RenderedEntityTest.php new file mode 100644 index 0000000..d50a37f --- /dev/null +++ b/src/Tests/Plugin/views/field/RenderedEntityTest.php @@ -0,0 +1,164 @@ +<?php + +/** + * @file + * Contains \Drupal\entity\Tests\Plugin\views\field\RenderedEntityTest. + */ + +namespace Drupal\entity\Tests\Plugin\views\field; + +use Drupal\Core\Entity\Entity\EntityViewDisplay; +use Drupal\entity_test\Entity\EntityTest; +use Drupal\field\Entity\FieldConfig; +use Drupal\field\Entity\FieldStorageConfig; +use Drupal\user\Entity\Role; +use Drupal\user\Entity\User; +use Drupal\views\Tests\ViewKernelTestBase; +use Drupal\views\Tests\ViewTestData; +use Drupal\views\Views; +use Drupal\Core\Entity\Entity\EntityViewMode; + +/** + * Tests the Drupal\entity\Plugin\views\field\RenderedEntity handler. + * + * @group entity + */ +class RenderedEntityTest extends ViewKernelTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = ['entity_test', 'entity_module_test', 'field']; + + /** + * Views used by this test. + * + * @var array + */ + public static $testViews = ['test_entity_rendered']; + + /** + * The logged in user. + * + * @var \Drupal\user\UserInterface + */ + protected $user; + + /** + * {@inheritdoc} + */ + protected function setUp($import_test_views = TRUE) { + parent::setUp($import_test_views); + + if ($import_test_views) { + ViewTestData::createTestViews(get_class($this), ['entity_module_test']); + } + } + + /** + * {@inheritdoc} + */ + protected function setUpFixtures() { + $this->installEntitySchema('user'); + $this->installEntitySchema('entity_test'); + $this->installConfig(['entity_test']); + + EntityViewMode::create([ + 'id' => 'entity_test.foobar', + 'targetEntityType' => 'entity_test', + 'status' => TRUE, + 'enabled' => TRUE, + 'label' => 'My view mode', + ])->save(); + + $display = EntityViewDisplay::create([ + 'targetEntityType' => 'entity_test', + 'bundle' => 'entity_test', + 'mode' => 'foobar', + 'label' => 'My view mode', + 'status' => TRUE, + ]); + $display->save(); + + $field_storage = FieldStorageConfig::create([ + 'field_name' => 'test_field', + 'entity_type' => 'entity_test', + 'type' => 'string', + ]); + $field_storage->save(); + + $field_config = FieldConfig::create([ + 'field_name' => 'test_field', + 'entity_type' => 'entity_test', + 'bundle' => 'entity_test', + ]); + $field_config->save(); + + // Create some test entities. + for ($i = 1; $i <= 3; $i++) { + EntityTest::create([ + 'name' => "Article title $i", + 'test_field' => "Test $i", + ])->save(); + } + + $role = Role::create([ + 'id' => 'test_role', + ]); + $role->grantPermission('bypass node access'); + $role->save(); + $this->user = User::create([ + 'name' => 'test user', + ]); + $this->user->addRole($role->id()); + $this->user->save(); + + parent::setUpFixtures(); + } + + /** + * Tests the default rendered entity output. + */ + public function testRenderedEntityWithoutField() { + \Drupal::currentUser()->setAccount($this->user); + + EntityViewDisplay::load('entity_test.entity_test.foobar') + ->removeComponent('test_field') + ->save(); + + // The view should not display the body field. + $view = Views::getView('test_field_entity_test_rendered'); + $build = $view->preview(); + $renderer = \Drupal::service('renderer'); + $renderer->renderPlain($build); + for ($i = 1; $i <= 3; $i++) { + $view_field = $view->style_plugin->getField($i - 1, 'rendered_entity'); + $search_result = strpos($view_field, "Test $i") !== FALSE; + $this->assertFalse($search_result, "The text 'Test $i' not found in the view."); + } + } + + /** + * Tests the rendered entity output with the body field configured to show. + */ + public function testRenderedEntityWithField() { + \Drupal::currentUser()->setAccount($this->user); + + // Show the body on the node.x.foobar view mode. + EntityViewDisplay::load('entity_test.entity_test.foobar')->setComponent('test_field', ['type' => 'string', 'label' => 'above'])->save(); + + // The view should display the body field. + $view = Views::getView('test_field_entity_test_rendered'); + $build = $view->preview(); + $renderer = \Drupal::service('renderer'); + $renderer->renderPlain($build); + for ($i = 1; $i <= 3; $i++) { + $view_field = $view->style_plugin->getField($i - 1, 'rendered_entity'); + $search_result = strpos($view_field, "Test $i") !== FALSE; + $this->assertTrue($search_result, "The text 'Test $i' found in the view."); + } + } + +} diff --git a/tests/modules/entity_module_test/test_views/views.view.test_field_entity_test_rendered.yml b/tests/modules/entity_module_test/test_views/views.view.test_field_entity_test_rendered.yml new file mode 100644 index 0000000..541ee96 --- /dev/null +++ b/tests/modules/entity_module_test/test_views/views.view.test_field_entity_test_rendered.yml @@ -0,0 +1,161 @@ +langcode: en +status: true +dependencies: + module: + - entity_test + - user +id: test_field_entity_test_rendered +label: 'Test Rendered entity test' +module: views +description: '' +tag: '' +base_table: entity_test +base_field: id +core: 8.x +display: + default: + display_plugin: default + id: default + display_title: Master + position: 0 + display_options: + access: + type: none + options: { } + cache: + type: none + options: { } + query: + type: views_query + options: + disable_sql_rewrite: false + distinct: false + replica: false + query_comment: '' + query_tags: { } + exposed_form: + type: basic + options: + submit_button: Apply + reset_button: false + reset_button_label: Reset + exposed_sorts_label: 'Sort by' + expose_sort_order: true + sort_asc_label: Asc + sort_desc_label: Desc + pager: + type: full + options: + items_per_page: 10 + offset: 0 + id: 0 + total_pages: null + expose: + items_per_page: false + items_per_page_label: 'Items per page' + items_per_page_options: '5, 10, 25, 50' + items_per_page_options_all: false + items_per_page_options_all_label: '- All -' + offset: false + offset_label: Offset + tags: + previous: '‹ Previous' + next: 'Next ›' + first: '« First' + last: 'Last »' + quantity: 9 + style: + type: default + options: + grouping: { } + row_class: '' + default_row_class: true + uses_fields: false + row: + type: fields + options: + inline: { } + separator: '' + hide_empty: false + default_field_elements: true + fields: + rendered_entity: + id: rendered_entity + table: entity_test + field: rendered_entity + relationship: none + group_type: group + admin_label: '' + label: '' + exclude: false + alter: + alter_text: false + text: '' + make_link: false + path: '' + absolute: false + external: false + replace_spaces: false + path_case: none + trim_whitespace: false + alt: '' + rel: '' + link_class: '' + prefix: '' + suffix: '' + target: '' + nl2br: false + max_length: 0 + word_boundary: true + ellipsis: true + more_link: false + more_link_text: '' + more_link_path: '' + strip_tags: false + trim: false + preserve_tags: '' + html: false + element_type: '' + element_class: '' + element_label_type: '' + element_label_class: '' + element_label_colon: false + element_wrapper_type: '' + element_wrapper_class: '' + element_default_classes: true + empty: '' + hide_empty: false + empty_zero: false + hide_alter_empty: true + view_mode: foobar + entity_type: entity_test + plugin_id: rendered_entity + filters: { } + sorts: + id: + id: id + table: entity_test + field: id + relationship: none + group_type: group + admin_label: '' + order: ASC + exposed: false + expose: + label: '' + entity_type: entity_test + entity_field: nid + plugin_id: standard + header: { } + footer: { } + empty: { } + relationships: { } + arguments: { } + display_extenders: { } + cache_metadata: + max-age: 0 + contexts: + - 'languages:language_interface' + - url.query_args + - user.permissions + tags: { } -- GitLab