public function EntityEmbedHooksTest::testEntityEmbedHooks in Entity Embed 8
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.
File
- tests/
src/ Functional/ EntityEmbedHooksTest.php, line 50  
Class
- EntityEmbedHooksTest
 - Tests the hooks provided by entity_embed module.
 
Namespace
Drupal\Tests\entity_embed\FunctionalCode
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 = '<drupal-entity data-entity-type="node" data-entity-uuid="' . $this->node
    ->uuid() . '" data-entity-embed-display="default" data-entity-embed-display-settings=\'{"view_mode":"teaser"}\'>This placeholder should not be rendered.</drupal-entity>';
  $settings = [];
  $settings['type'] = 'page';
  $settings['title'] = 'Test hook_entity_embed_alter()';
  $settings['body'] = [
    [
      'value' => $content,
      'format' => 'custom_format',
    ],
  ];
  $node = $this
    ->drupalCreateNode($settings);
  $this
    ->drupalGet('node/' . $node
    ->id());
  // Verify embedded node body exists in page.
  $this
    ->assertSession()
    ->responseContains($this->node->body->value);
  $this
    ->assertSession()
    ->responseNotContains('This placeholder should not be rendered.');
  // Ensure that embedded node's title has been replaced.
  $this
    ->assertSession()
    ->responseContains('Title set by hook_entity_embed_alter');
  $this
    ->assertSession()
    ->responseContains('test-class-added-in-alter-hook');
  // Verify the original title of the embedded node is not visible.
  $this
    ->assertSession()
    ->responseNotContains($this->node->title->value);
  $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 = '<drupal-entity data-entity-type="node" data-entity-uuid="' . $this->node
    ->uuid() . '" data-entity-embed-display="default" data-entity-embed-display-settings=\'{"view_mode":"teaser"}\'>This placeholder should not be rendered.</drupal-entity>';
  $settings = [];
  $settings['type'] = 'page';
  $settings['title'] = 'Test hook_entity_embed_context_alter()';
  $settings['body'] = [
    [
      'value' => $content,
      'format' => 'custom_format',
    ],
  ];
  $node = $this
    ->drupalCreateNode($settings);
  $this
    ->drupalGet('node/' . $node
    ->id());
  $this
    ->assertSession()
    ->responseNotContains('This placeholder should not be rendered.');
  // 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
    ->assertSession()
    ->responseNotContains($this->node->body->value);
  $this
    ->assertSession()
    ->responseContains('Title set by hook_entity_embed_context_alter');
  $this
    ->assertSession()
    ->linkByHrefExists('node/' . $this->node
    ->id(), 0, 'Link to the embedded node exists.');
  $this->state
    ->set('entity_embed_test_entity_embed_context_alter', FALSE);
}