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