state = $this->container->get('state'); } /** * Tests hook_entity_embed_display_plugins_alter(). */ public function testDisplayPluginAlterHooks() { // Enable entity_embed_test.module's // hook_entity_embed_display_plugins_alter() implementation and ensure it is // working as designed. $this->state->set('entity_embed_test_entity_embed_display_plugins_alter', TRUE); $plugins = $this->container->get('plugin.manager.entity_embed.display') ->getDefinitionOptionsForEntity($this->node); // Ensure that name of each plugin is prefixed with 'testing_hook:'. foreach ($plugins as $plugin => $plugin_info) { $this->assertTrue(strpos($plugin, 'testing_hook:') === 0, 'Name of the plugin is prefixed by hook_entity_embed_display_plugins_alter()'); } } /** * Tests the hooks provided by entity_embed module. * * This method tests all the hooks provided by entity_embed except * hook_entity_embed_display_plugins_alter, which is tested by a separate * method. */ public function testEntityEmbedHooks() { // Enable entity_embed_test.module's hook_entity_embed_alter() // implementation and ensure it is working as designed. $this->state->set('entity_embed_test_entity_embed_alter', TRUE); $content = 'This placeholder should not be rendered.'; $settings = array(); $settings['type'] = 'page'; $settings['title'] = 'Test hook_entity_embed_alter()'; $settings['body'] = array(array('value' => $content, 'format' => 'custom_format')); $node = $this->drupalCreateNode($settings); $this->drupalGet('node/' . $node->id()); $this->assertText($this->node->body->value, 'Embedded node exists in page.'); $this->assertNoText(strip_tags($content), 'Placeholder does not appears in the output when embed is successful.'); // Ensure that embedded node's title has been replaced. $this->assertText('Title set by hook_entity_embed_alter', 'Title of the embedded node is replaced by hook_entity_embed_alter()'); $this->assertNoText($this->node->title->value, 'Original title of the embedded node is not visible.'); $this->state->set('entity_embed_test_entity_embed_alter', FALSE); // Enable entity_embed_test.module's hook_entity_embed_context_alter() // implementation and ensure it is working as designed. $this->state->set('entity_embed_test_entity_embed_context_alter', TRUE); $content = 'This placeholder should not be rendered.'; $settings = array(); $settings['type'] = 'page'; $settings['title'] = 'Test hook_entity_embed_context_alter()'; $settings['body'] = array(array('value' => $content, 'format' => 'custom_format')); $node = $this->drupalCreateNode($settings); $this->drupalGet('node/' . $node->id()); $this->assertNoText(strip_tags($content), 'Placeholder does not appears in the output when embed is successful.'); // To ensure that 'label' plugin is used, verify that the body of the // embedded node is not visible and the title links to the embedded node. $this->assertNoText($this->node->body->value, 'Body of the embedded node does not exists in page.'); $this->assertText('Title set by hook_entity_embed_context_alter', 'Title of the embedded node is replaced by hook_entity_embed_context_alter()'); $this->assertNoText($this->node->title->value, 'Original title of the embedded node is not visible.'); $this->assertLinkByHref('node/' . $this->node->id(), 0, 'Link to the embedded node exists.'); $this->state->set('entity_embed_test_entity_embed_context_alter', FALSE); } }