View source
<?php
namespace Drupal\Tests\entity_usage\FunctionalJavascript;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\link\LinkItemInterface;
use Drupal\node\Entity\Node;
class IntegrationTest extends EntityUsageJavascriptTestBase {
protected static $modules = [
'link',
];
public function testCrudTracking() {
$page = $this
->getSession()
->getPage();
$assert_session = $this
->assertSession();
$usage_service = \Drupal::service('entity_usage.usage');
$this
->drupalGet('/node/add/eu_test_ct');
$page
->fillField('title[0][value]', 'Node 1');
$page
->pressButton('Save');
$assert_session
->pageTextContains('eu_test_ct Node 1 has been created.');
$this
->saveHtmlOutput();
$node1 = Node::load(1);
$this
->drupalGet('/node/add/eu_test_ct');
$page
->fillField('title[0][value]', 'Node 2');
$page
->fillField('field_eu_test_related_nodes[0][target_id]', 'Node 1 (1)');
$page
->pressButton('Save');
$assert_session
->pageTextContains('eu_test_ct Node 2 has been created.');
$this
->saveHtmlOutput();
$node2 = Node::load(2);
$usage = $usage_service
->listUsage($node1);
$this
->assertEquals($usage['node'], [
'2' => '1',
], 'Correct usage found.');
$usage = $usage_service
->listUsage($node1, TRUE);
$this
->assertEquals($usage['entity_reference']['node'], [
'2' => '1',
], 'Correct usage found.');
$uuid_node2 = $node2
->uuid();
$embedded_text = '<drupal-entity data-embed-button="node" data-entity-embed-display="entity_reference:entity_reference_label" data-entity-embed-display-settings="{"link":1}" data-entity-type="node" data-entity-uuid="' . $uuid_node2 . '"></drupal-entity>';
$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();
$usage = $usage_service
->listUsage($node2);
$this
->assertEquals($usage['node'], [
'3' => '1',
], 'Correct usage found.');
$usage = $usage_service
->listUsage($node2, TRUE);
$this
->assertEquals($usage['entity_embed']['node'], [
'3' => '1',
], 'Correct usage found.');
$node4 = Node::create([
'type' => 'eu_test_ct',
'title' => 'Node 4',
'field_eu_test_related_nodes' => [
'target_id' => '2',
],
'field_eu_test_rich_text' => [
'value' => $embedded_text,
'format' => 'eu_test_text_format',
],
]);
$node4
->save();
$usage = $usage_service
->listUsage($node2);
$expected_count = [
'node' => [
'3' => '1',
'4' => '2',
],
];
$this
->assertEquals($usage['node'], $expected_count['node'], 'Correct usage found.');
$node2
->delete();
$usage = $usage_service
->listUsage($node1);
$this
->assertEquals($usage, [], 'Usage for node1 correctly cleaned up.');
$database = \Drupal::database();
$count = $database
->select('entity_usage', 'e')
->fields('e', [
'count',
])
->condition('e.t_type', 'node')
->condition('e.t_id', '2')
->execute()
->fetchField();
$this
->assertSame(FALSE, $count, 'Usage for node2 correctly cleaned up.');
$embedded_text = '<p>foo <a data-entity-substitution="canonical" data-entity-type="node" data-entity-uuid="' . $node4
->uuid() . '">linked text</a> bar</p>';
$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();
$usage = $usage_service
->listUsage($node4);
$this
->assertEquals($usage['node'], [
'5' => '1',
], 'Correct usage found.');
$usage = $usage_service
->listUsage($node4, TRUE);
$this
->assertEquals($usage['linkit']['node'], [
'5' => '1',
], 'Correct usage found.');
}
public function testLinkTracking() {
$page = $this
->getSession()
->getPage();
$assert_session = $this
->assertSession();
$usage_service = \Drupal::service('entity_usage.usage');
$field_storage = FieldStorageConfig::create([
'field_name' => 'field_link1',
'entity_type' => 'node',
'type' => 'link',
'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
'settings' => [],
]);
$field_storage
->save();
$field = FieldConfig::create([
'field_storage' => $field_storage,
'bundle' => 'eu_test_ct',
'settings' => [
'title' => DRUPAL_OPTIONAL,
'link_type' => LinkItemInterface::LINK_GENERIC,
],
]);
$field
->save();
entity_get_form_display('node', 'eu_test_ct', 'default')
->setComponent('field_link1', [
'type' => 'link_default',
])
->save();
entity_get_display('node', 'eu_test_ct', 'default')
->setComponent('field_link1', [
'type' => 'link',
])
->save();
$this
->drupalGet('/node/add/eu_test_ct');
$page
->fillField('title[0][value]', 'Node 1');
$page
->pressButton('Save');
$assert_session
->pageTextContains('eu_test_ct Node 1 has been created.');
$this
->saveHtmlOutput();
$node1_id = \Drupal::entityQuery('node')
->sort('changed', 'DESC')
->execute();
$node1_id = reset($node1_id);
$this
->assertNotNull($node1_id);
$node1 = \Drupal::entityTypeManager()
->getStorage('node')
->loadUnchanged($node1_id);
$this
->drupalGet('/node/add/eu_test_ct');
$page
->fillField('title[0][value]', 'Node 2');
$page
->fillField('field_link1[0][uri]', "Node 1 ({$node1_id})");
$page
->fillField('field_link1[0][title]', "Linked text");
$page
->pressButton('Save');
$assert_session
->pageTextContains('eu_test_ct Node 2 has been created.');
$this
->saveHtmlOutput();
$node2_id = \Drupal::entityQuery('node')
->sort('changed', 'DESC')
->execute();
$node2_id = reset($node2_id);
$this
->assertNotNull($node2_id);
$node2 = \Drupal::entityTypeManager()
->getStorage('node')
->loadUnchanged($node2_id);
$usage = $usage_service
->listUsage($node1, TRUE);
$this
->assertEquals([
$node2_id => '1',
], $usage['link']['node']);
$this
->drupalGet("/node/{$node2_id}/edit");
$page
->fillField('field_link1[0][uri]', '');
$page
->fillField('field_link1[0][title]', '');
$page
->pressButton('Save');
$assert_session
->pageTextContains('eu_test_ct Node 2 has been updated.');
$this
->saveHtmlOutput();
$usage = $usage_service
->listUsage($node1);
$this
->assertEquals([], $usage);
$this
->drupalGet("/node/{$node2_id}/edit");
$page
->fillField('field_link1[0][uri]', "Node 1 ({$node1_id})");
$page
->fillField('field_link1[0][title]', "Linked text");
$page
->pressButton('Save');
$assert_session
->pageTextContains('eu_test_ct Node 2 has been updated.');
$this
->saveHtmlOutput();
$usage = $usage_service
->listUsage($node1, TRUE);
$this
->assertEquals([
$node2_id => '1',
], $usage['link']['node']);
$node2
->delete();
$usage = $usage_service
->listUsage($node1);
$this
->assertEquals([], $usage);
}
}