public function EmbeddedContentTest::testHtmlLink in Entity Usage 8.3
Same name and namespace in other branches
- 8.4 tests/src/FunctionalJavascript/EmbeddedContentTest.php \Drupal\Tests\entity_usage\FunctionalJavascript\EmbeddedContentTest::testHtmlLink()
- 8.2 tests/src/FunctionalJavascript/EmbeddedContentTest.php \Drupal\Tests\entity_usage\FunctionalJavascript\EmbeddedContentTest::testHtmlLink()
Tests the HtmlLink parsing.
File
- tests/
src/ FunctionalJavascript/ EmbeddedContentTest.php, line 194
Class
- EmbeddedContentTest
- Basic functional tests for the usage tracking of embedded content.
Namespace
Drupal\Tests\entity_usage\FunctionalJavascriptCode
public function testHtmlLink() {
$session = $this
->getSession();
$page = $session
->getPage();
$assert_session = $this
->assertSession();
/** @var \Drupal\entity_usage\EntityUsage $usage_service */
$usage_service = \Drupal::service('entity_usage.usage');
// Create node 1.
$this
->drupalGet('/node/add/eu_test_ct');
$page
->fillField('title[0][value]', 'Node 1');
$page
->pressButton('Save');
$session
->wait(500);
$this
->saveHtmlOutput();
$assert_session
->pageTextContains('eu_test_ct Node 1 has been created.');
$node1 = $this
->getLastEntityOfType('node', TRUE);
// Nobody is using this guy for now.
$usage = $usage_service
->listSources($node1);
$this
->assertEquals([], $usage);
// Create node 2 referencing node 1 using a normal link markup.
$embedded_text = '<p>foo <a href="/node/' . $node1
->id() . '">linked text</a> bar</p>';
$node2 = Node::create([
'type' => 'eu_test_ct',
'title' => 'Node 2',
'field_eu_test_rich_text' => [
'value' => $embedded_text,
'format' => 'eu_test_text_format',
],
]);
$node2
->save();
$this
->triggerPostRequestTracking();
// Check that we correctly registered the relation between N2 and N1.
$usage = $usage_service
->listSources($node1);
$expected = [
'node' => [
$node2
->id() => [
[
'source_langcode' => $node2
->language()
->getId(),
'source_vid' => $node2
->getRevisionId(),
],
],
],
];
$this
->assertEquals($expected, $usage);
// Create node 3 referencing N2 and N1 on the same field.
$embedded_text .= '<p>Foo bar</p>' . '<p>foo2 <a href="/node/' . $node2
->id() . '">linked text 2</a> bar 2</p>';
$node3 = Node::create([
'type' => 'eu_test_ct',
'title' => 'Node 3',
'field_eu_test_rich_text' => [
'value' => $embedded_text,
'format' => 'eu_test_text_format',
],
]);
$node3
->save();
$this
->triggerPostRequestTracking();
// Check that both targets are tracked.
$usage = $usage_service
->listTargets($node3);
$expected = [
'node' => [
$node2
->id(),
$node1
->id(),
],
];
$this
->assertEquals($expected, $usage);
// Create node 4 referencing a non existing path to test removed entities.
$embedded_text = '<p>foo <a href="/node/4324">linked text foo 2</a> bar</p>';
$node4 = Node::create([
'type' => 'eu_test_ct',
'title' => 'Node 4',
'field_eu_test_rich_text' => [
'value' => $embedded_text,
'format' => 'eu_test_text_format',
],
]);
$node4
->save();
$this
->triggerPostRequestTracking();
// Check that the usage for this source is empty.
$usage = $usage_service
->listTargets($node4);
$this
->assertEquals([], $usage);
// Create node 5 referencing node 4 using an absolute URL.
$embedded_text = '<p>foo <a href="' . $node4
->toUrl()
->setAbsolute(TRUE)
->toString() . '">linked text</a> bar</p>';
// Whitelist the local hostname so we can test absolute URLs.
$current_request = \Drupal::request();
$config = \Drupal::configFactory()
->getEditable('entity_usage.settings');
$config
->set('site_domains', [
$current_request
->getHttpHost() . $current_request
->getBasePath(),
]);
$config
->save();
$node5 = Node::create([
'type' => 'eu_test_ct',
'title' => 'Node 5',
'field_eu_test_rich_text' => [
'value' => $embedded_text,
'format' => 'eu_test_text_format',
],
]);
$node5
->save();
$this
->triggerPostRequestTracking();
// Check that we correctly registered the relation between N5 and N4.
$usage = $usage_service
->listSources($node4);
$expected = [
'node' => [
$node5
->id() => [
[
'source_langcode' => $node5
->language()
->getId(),
'source_vid' => $node5
->getRevisionId(),
],
],
],
];
$this
->assertEquals($expected, $usage);
// Create a different field and make sure that a plugin tracking two
// different field types works as expected.
$storage = FieldStorageConfig::create([
'field_name' => 'field_eu_test_normal_text',
'entity_type' => 'node',
'type' => 'text',
]);
$storage
->save();
FieldConfig::create([
'bundle' => 'eu_test_ct',
'entity_type' => 'node',
'field_name' => 'field_eu_test_normal_text',
'label' => 'Normal text',
])
->save();
// Create node 6 referencing node 5 using an aliased URL.
$alias_url = '/i-am-an-alias';
\Drupal::service('path.alias_storage')
->save('/node/' . $node5
->id(), $alias_url, $node5
->language()
->getId());
$embedded_text = '<p>foo <a href="' . $alias_url . '">linked text</a> bar</p>';
$node6 = Node::create([
'type' => 'eu_test_ct',
'title' => 'Node 6',
'field_eu_test_rich_text' => [
'value' => $embedded_text,
'format' => 'eu_test_text_format',
],
]);
$node6
->save();
$this
->triggerPostRequestTracking();
// Check that we correctly registered the relation between N6 and N5.
$usage = $usage_service
->listSources($node5);
$expected = [
'node' => [
$node6
->id() => [
[
'source_langcode' => $node6
->language()
->getId(),
'source_vid' => $node6
->getRevisionId(),
],
],
],
];
$this
->assertEquals($expected, $usage);
}