3 namespace Drupal\Tests\views\Kernel\Handler;
5 use Drupal\Core\Entity\Entity\EntityViewDisplay;
6 use Drupal\entity_test\Entity\EntityTest;
7 use Drupal\field\Entity\FieldConfig;
8 use Drupal\field\Entity\FieldStorageConfig;
9 use Drupal\user\Entity\User;
10 use Drupal\views\Entity\View;
11 use Drupal\Tests\views\Kernel\ViewsKernelTestBase;
12 use Drupal\views\Views;
13 use Drupal\Core\Entity\Entity\EntityViewMode;
16 * Tests the core Drupal\views\Plugin\views\field\RenderedEntity handler.
20 class FieldRenderedEntityTest extends ViewsKernelTestBase {
27 public static $modules = ['entity_test', 'field'];
30 * Views used by this test.
34 public static $testViews = ['test_field_entity_test_rendered'];
39 * @var \Drupal\user\UserInterface
46 protected function setUpFixtures() {
47 $this->installEntitySchema('user');
48 $this->installEntitySchema('entity_test');
49 $this->installConfig(['entity_test']);
51 EntityViewMode::create([
52 'id' => 'entity_test.foobar',
53 'targetEntityType' => 'entity_test',
56 'label' => 'My view mode',
59 $display = EntityViewDisplay::create([
60 'targetEntityType' => 'entity_test',
61 'bundle' => 'entity_test',
63 'label' => 'My view mode',
68 $field_storage = FieldStorageConfig::create([
69 'field_name' => 'test_field',
70 'entity_type' => 'entity_test',
73 $field_storage->save();
75 $field_config = FieldConfig::create([
76 'field_name' => 'test_field',
77 'entity_type' => 'entity_test',
78 'bundle' => 'entity_test',
80 $field_config->save();
82 // Create some test entities.
83 for ($i = 1; $i <= 3; $i++) {
85 'name' => "Article title $i",
86 'test_field' => "Test $i",
90 $this->user = User::create([
91 'name' => 'test user',
95 parent::setUpFixtures();
99 * Tests the default rendered entity output.
101 public function testRenderedEntityWithoutField() {
102 \Drupal::currentUser()->setAccount($this->user);
104 EntityViewDisplay::load('entity_test.entity_test.foobar')
105 ->removeComponent('test_field')
108 $view = Views::getView('test_field_entity_test_rendered');
111 '#name' => 'test_field_entity_test_rendered',
113 '#display_id' => 'default',
115 $renderer = \Drupal::service('renderer');
116 $renderer->renderPlain($build);
117 for ($i = 1; $i <= 3; $i++) {
118 $view_field = $view->style_plugin->getField($i - 1, 'rendered_entity');
119 $search_result = strpos($view_field, "Test $i") !== FALSE;
120 $this->assertFalse($search_result, "The text 'Test $i' not found in the view.");
123 $this->assertConfigDependencies($view->storage);
124 $this->assertCacheabilityMetadata($build);
128 * Ensures that the expected cacheability metadata is applied.
130 * @param array $build
133 protected function assertCacheabilityMetadata($build) {
135 'config:core.entity_view_display.entity_test.entity_test.foobar',
136 'config:views.view.test_field_entity_test_rendered',
142 ], $build['#cache']['tags']);
145 'entity_test_view_grants',
146 'languages:language_interface',
150 ], $build['#cache']['contexts']);
154 * Ensures that the config dependencies are calculated the right way.
156 * @param \Drupal\views\Entity\View $storage
158 protected function assertConfigDependencies(View $storage) {
159 $storage->calculateDependencies();
161 'config' => ['core.entity_view_mode.entity_test.foobar'],
162 'module' => ['entity_test'],
163 ], $storage->getDependencies());
167 * Tests the rendered entity output with the test field configured to show.
169 public function testRenderedEntityWithField() {
170 \Drupal::currentUser()->setAccount($this->user);
172 // Show the test_field on the entity_test.entity_test.foobar view display.
173 EntityViewDisplay::load('entity_test.entity_test.foobar')->setComponent('test_field', ['type' => 'string', 'label' => 'above'])->save();
175 $view = Views::getView('test_field_entity_test_rendered');
178 '#name' => 'test_field_entity_test_rendered',
180 '#display_id' => 'default',
183 $renderer = \Drupal::service('renderer');
184 $renderer->renderPlain($build);
185 for ($i = 1; $i <= 3; $i++) {
186 $view_field = $view->style_plugin->getField($i - 1, 'rendered_entity');
187 $search_result = strpos($view_field, "Test $i") !== FALSE;
188 $this->assertTrue($search_result, "The text 'Test $i' found in the view.");
191 $this->assertConfigDependencies($view->storage);
192 $this->assertCacheabilityMetadata($build);