View source
<?php
namespace Drupal\Tests\entity_reference_revisions\Kernel;
use Drupal\entity_composite_relationship_test\Entity\EntityTestCompositeRelationship;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\KernelTests\KernelTestBase;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;
class EntityReferenceRevisionsSaveTest extends KernelTestBase {
public static $modules = array(
'node',
'user',
'system',
'field',
'entity_reference_revisions',
'entity_composite_relationship_test',
);
protected function setUp() {
parent::setUp();
$values = [
'type' => 'article',
'name' => 'Article',
];
$node_type = NodeType::create($values);
$node_type
->save();
$this
->installEntitySchema('user');
$this
->installEntitySchema('node');
$this
->installEntitySchema('entity_test_composite');
$this
->installSchema('system', [
'sequences',
]);
$this
->installSchema('node', [
'node_access',
]);
}
public function testNeedsSave() {
$field_storage = FieldStorageConfig::create(array(
'field_name' => 'composite_reference',
'entity_type' => 'node',
'type' => 'entity_reference_revisions',
'settings' => array(
'target_type' => 'entity_test_composite',
),
));
$field_storage
->save();
$field = FieldConfig::create(array(
'field_storage' => $field_storage,
'bundle' => 'article',
));
$field
->save();
$text = 'Dummy text';
$entity_test = EntityTestCompositeRelationship::create(array(
'uuid' => $text,
'name' => $text,
));
$entity_test
->save();
$text = 'Clever text';
$entity_test->name = $text;
$entity_test
->setNeedsSave(TRUE);
$node = Node::create([
'title' => $this
->randomMachineName(),
'type' => 'article',
'composite_reference' => $entity_test,
]);
$values = $node->composite_reference
->getValue();
$this
->assertTrue(isset($values[0]['entity']));
static::assertEquals($values[0]['entity']->name->value, $text);
$node->composite_reference
->setValue($values);
static::assertEquals($node->composite_reference->entity->name->value, $text);
$node
->save();
$entity_test_after = EntityTestCompositeRelationship::load($entity_test
->id());
static::assertEquals($entity_test_after->name->value, $text);
$new_text = 'Dummy text again';
$entity_test_after->name = $new_text;
$entity_test_after
->setNeedsSave(FALSE);
$node = Node::load($node
->id());
$values = $node->composite_reference
->getValue();
$this
->assertFalse(isset($values[0]['entity']));
$node->composite_reference = $entity_test_after;
$node
->save();
\Drupal::entityTypeManager()
->getStorage('entity_test_composite')
->resetCache();
$entity_test_after = EntityTestCompositeRelationship::load($entity_test
->id());
static::assertEquals($text, $entity_test_after->name->value);
$entity_test
->delete();
$node = Node::load($node
->id());
$node
->save();
$entity_needs_save = EntityTestCompositeRelationship::create([
'uuid' => $text,
'name' => $text,
]);
$entity_needs_save
->setNeedsSave(TRUE);
$entity_needs_save
->save();
$this
->assertFalse($entity_needs_save
->needsSave());
}
public function testSaveNewEntity() {
$field_storage = FieldStorageConfig::create(array(
'field_name' => 'composite_reference',
'entity_type' => 'node',
'type' => 'entity_reference_revisions',
'settings' => array(
'target_type' => 'entity_test_composite',
),
));
$field_storage
->save();
$field = FieldConfig::create(array(
'field_storage' => $field_storage,
'bundle' => 'article',
));
$field
->save();
$text = 'Dummy text';
$entity_test = EntityTestCompositeRelationship::create(array(
'uuid' => $text,
'name' => $text,
));
$node = Node::create([
'title' => $this
->randomMachineName(),
'type' => 'article',
'composite_reference' => $entity_test,
]);
$validate = $node
->validate();
$this
->assertEmpty($validate);
$node
->save();
$node_after = Node::load($node
->id());
static::assertEquals($node_after->composite_reference[0]->target_id, $entity_test
->id());
static::assertEquals($node_after->composite_reference[0]->target_revision_id, $entity_test
->getRevisionId());
$this
->assertFalse($entity_test
->isNew());
$text = 'Smart text';
$second_entity_test = EntityTestCompositeRelationship::create(array(
'uuid' => $text,
'name' => $text,
));
$second_entity_test
->save();
$node_after->composite_reference = $second_entity_test;
static::assertEquals($node_after->composite_reference[0]->target_id, $second_entity_test
->id());
static::assertEquals($node_after->composite_reference[0]->target_revision_id, $second_entity_test
->getRevisionId());
}
public function testEntityReferenceRevisionsDefaultValue() {
$node_target = Node::create([
'title' => 'Target node',
'type' => 'article',
'body' => 'Target body text',
'uuid' => '2d04c2b4-9c3d-4fa6-869e-ecb6fa5c9410',
]);
$node_target
->save();
$field_storage = FieldStorageConfig::create([
'field_name' => 'target_node_reference',
'entity_type' => 'node',
'type' => 'entity_reference_revisions',
'settings' => [
'target_type' => 'node',
],
]);
$field_storage
->save();
$field = FieldConfig::create([
'field_storage' => $field_storage,
'bundle' => 'article',
'required' => FALSE,
'settings' => [
'handler_settings' => [
'target_bundles' => [
'article' => 'article',
],
],
],
]);
$default_value = [
[
'target_id' => $node_target
->id(),
'target_revision_id' => $node_target
->getRevisionId(),
'target_uuid' => $node_target
->uuid(),
],
];
$field
->setDefaultValue($default_value)
->save();
$revision_id = $node_target
->getRevisionId();
$node_target_after = Node::load($node_target
->id());
$node_target_after
->setNewRevision();
$node_target_after
->save();
$this
->assertTrue($node_target_after
->getRevisionId() != $revision_id);
$node_host = Node::create([
'title' => 'Host node',
'type' => 'article',
'body' => 'Host body text',
'target_node_reference' => $node_target,
]);
$node_host
->save();
$node_host_after = Node::load($node_host
->id());
$this
->assertEquals($node_host_after->target_node_reference->target_id, $node_target
->id());
$this
->assertEquals($node_host_after->target_node_reference->target_revision_id, $revision_id);
$dependencies = $field
->calculateDependencies()
->getDependencies();
$this
->assertEquals($dependencies['content'][0], 'node:article:2d04c2b4-9c3d-4fa6-869e-ecb6fa5c9410');
$this
->assertEquals($dependencies['config'][0], 'field.storage.node.target_node_reference');
$this
->assertEquals($dependencies['config'][1], 'node.type.article');
$this
->assertEquals($dependencies['module'][0], 'entity_reference_revisions');
}
public function testEntityReferenceRevisionsDeleteHandleDeletedChild() {
$field_storage = FieldStorageConfig::create([
'field_name' => 'field_reference',
'entity_type' => 'node',
'type' => 'entity_reference_revisions',
'settings' => [
'target_type' => 'node',
],
]);
$field_storage
->save();
$field = FieldConfig::create([
'field_storage' => $field_storage,
'bundle' => 'article',
]);
$field
->save();
$child = Node::create([
'type' => 'article',
'title' => 'Child node',
]);
$child
->save();
$node = Node::create([
'type' => 'article',
'title' => 'Parent node',
'field_reference' => [
[
'target_id' => $child
->id(),
'target_revision_id' => $child
->getRevisionId(),
],
],
]);
$node
->save();
$revisionId = $node
->getRevisionId();
$node
->setNewRevision(TRUE);
$node
->save();
$child
->delete();
\Drupal::entityTypeManager()
->getStorage('node')
->deleteRevision($revisionId);
}
}