3 namespace Drupal\entity_embed\Tests;
5 use Drupal\Core\Form\FormState;
8 * Tests the entity reference field formatters provided by entity_embed.
12 class EntityReferenceFieldFormatterTest extends EntityEmbedTestBase {
15 * The test 'menu' entity.
17 * @var \Drupal\Core\Menu\MenuInterface
24 protected function setUp() {
27 // Add a new menu entity which does not has a view controller.
28 $this->menu = entity_create('menu', array(
31 'description' => 'Description text',
37 * Tests entity reference field formatters.
39 public function testEntityReferenceFieldFormatter() {
40 // Ensure that entity reference field formatters are available as plugins.
41 $this->assertAvailableDisplayPlugins($this->node, [
42 'entity_reference:entity_reference_label',
43 'entity_reference:entity_reference_entity_id',
44 'view_mode:node.full',
46 'view_mode:node.search_index',
47 'view_mode:node.search_result',
48 'view_mode:node.teaser',
51 $this->container->get('config.factory')->getEditable('entity_embed.settings')
52 ->set('rendered_entity_mode', TRUE)->save();
53 $this->container->get('plugin.manager.entity_embed.display')->clearCachedDefinitions();
55 $this->assertAvailableDisplayPlugins($this->node, [
56 'entity_reference:entity_reference_label',
57 'entity_reference:entity_reference_entity_id',
58 'entity_reference:entity_reference_entity_view',
61 // Ensure that correct form attributes are returned for
62 // 'entity_reference:entity_reference_entity_id' plugin.
64 $form_state = new FormState();
65 $display = $this->container->get('plugin.manager.entity_embed.display')->createInstance('entity_reference:entity_reference_entity_id', array());
66 $display->setContextValue('entity', $this->node);
67 $conf_form = $display->buildConfigurationForm($form, $form_state);
68 $this->assertIdentical(array_keys($conf_form), array());
70 // Ensure that correct form attributes are returned for
71 // 'entity_reference:entity_reference_entity_view' plugin.
73 $form_state = new FormState();
74 $display = $this->container->get('plugin.manager.entity_embed.display')->createInstance('entity_reference:entity_reference_entity_view', array());
75 $display->setContextValue('entity', $this->node);
76 $conf_form = $display->buildConfigurationForm($form, $form_state);
77 $this->assertIdentical($conf_form['view_mode']['#type'], 'select');
78 $this->assertIdentical((string) $conf_form['view_mode']['#title'], 'View mode');
80 // Ensure that correct form attributes are returned for
81 // 'entity_reference:entity_reference_label' plugin.
83 $form_state = new FormState();
84 $display = $this->container->get('plugin.manager.entity_embed.display')->createInstance('entity_reference:entity_reference_label', array());
85 $display->setContextValue('entity', $this->node);
86 $conf_form = $display->buildConfigurationForm($form, $form_state);
87 $this->assertIdentical(array_keys($conf_form), array('link'));
88 $this->assertIdentical($conf_form['link']['#type'], 'checkbox');
89 $this->assertIdentical((string) $conf_form['link']['#title'], 'Link label to the referenced entity');
91 // Ensure that 'Rendered Entity' plugin is not available for an entity not
92 // having a view controller.
93 $plugin_options = $this->container->get('plugin.manager.entity_embed.display')->getDefinitionOptionsForEntity($this->menu);
94 $this->assertFalse(array_key_exists('entity_reference:entity_reference_entity_view', $plugin_options), "The 'Rendered entity' plugin is not available.");
98 * Tests filter using entity reference Entity Embed Display plugins.
100 public function testFilterEntityReferencePlugins() {
101 // Test 'Label' Entity Embed Display plugin.
102 $content = '<drupal-entity data-entity-type="node" data-entity-uuid="' . $this->node->uuid() . '" data-entity-embed-display="entity_reference:entity_reference_label" data-entity-embed-display-settings=\'{"link":1}\'>This placeholder should not be rendered.</drupal-entity>';
104 $settings['type'] = 'page';
105 $settings['title'] = 'Test entity_reference:entity_reference_label Entity Embed Display plugin';
106 $settings['body'] = array(array('value' => $content, 'format' => 'custom_format'));
107 $node = $this->drupalCreateNode($settings);
108 $this->drupalGet('node/' . $node->id());
109 $this->assertText($this->node->title->value, 'Title of the embedded node exists in page.');
110 $this->assertNoText($this->node->body->value, 'Body of embedded node does not exists in page.');
111 $this->assertNoText(strip_tags($content), 'Placeholder does not appears in the output when embed is successful.');
112 $this->assertLinkByHref('node/' . $this->node->id(), 0, 'Link to the embedded node exists.');
114 // Test 'Entity ID' Entity Embed Display plugin.
115 $content = '<drupal-entity data-entity-type="node" data-entity-uuid="' . $this->node->uuid() . '" data-entity-embed-display="entity_reference:entity_reference_entity_id">This placeholder should not be rendered.</drupal-entity>';
117 $settings['type'] = 'page';
118 $settings['title'] = 'Test entity_reference:entity_reference_entity_id Entity Embed Display plugin';
119 $settings['body'] = array(array('value' => $content, 'format' => 'custom_format'));
120 $node = $this->drupalCreateNode($settings);
121 $this->drupalGet('node/' . $node->id());
122 $this->assertText($this->node->id(), 'ID of the embedded node exists in page.');
123 $this->assertNoText($this->node->title->value, 'Title of the embedded node does not exists in page.');
124 $this->assertNoText($this->node->body->value, 'Body of embedded node does not exists in page.');
125 $this->assertNoText(strip_tags($content), 'Placeholder does not appears in the output when embed is successful.');
126 $this->assertNoLinkByHref('node/' . $this->node->id(), 'Link to the embedded node does not exists.');
128 // Test 'Rendered entity' Entity Embed Display plugin.
129 $content = '<drupal-entity data-entity-type="node" data-entity-uuid="' . $this->node->uuid() . '" data-entity-embed-display="entity_reference:entity_reference_entity_view" data-entity-embed-display-settings=\'{"view_mode":"teaser"}\'>This placeholder should not be rendered.</drupal-entity>';
131 $settings['type'] = 'page';
132 $settings['title'] = 'Test entity_reference:entity_reference_label Entity Embed Display plugin';
133 $settings['body'] = array(array('value' => $content, 'format' => 'custom_format'));
134 $node = $this->drupalCreateNode($settings);
135 $this->drupalGet('node/' . $node->id());
136 $this->assertText($this->node->body->value, 'Body of embedded node does not exists in page.');
137 $this->assertNoText(strip_tags($content), 'Placeholder does not appears in the output when embed is successful.');