multiversion-8.x-1.0-beta34/tests/src/Kernel/ParagraphsTest.php
tests/src/Kernel/ParagraphsTest.php
<?php namespace Drupal\Tests\multiversion\Kernel; use Drupal\Core\Entity\EntityInterface; use Drupal\KernelTests\KernelTestBase; use Drupal\multiversion\Entity\Workspace; /** * Test for paragraphs integration. * * @requires module paragraphs * @requires module entity_reference_revisions * @group multiversion */ class ParagraphsTest extends KernelTestBase { protected $strictConfigSchema = FALSE; /** * The paragraph entity storage. * * @var \Drupal\Core\Entity\EntityStorageInterface */ protected $paragraphStorage; /** * The node entity storage. * * @var \Drupal\Core\Entity\EntityStorageInterface */ protected $nodeStorage; /** * {@inheritdoc} */ public static $modules = [ 'system', 'field', 'key_value', 'user', 'serialization', 'paragraphs', 'multiversion_test_paragraphs', 'node', 'multiversion', 'entity_reference_revisions', 'file', ]; /** * {@inheritdoc} */ protected function setUp() { parent::setUp(); $this->installEntitySchema('file'); $this->installEntitySchema('node'); $this->installEntitySchema('paragraph'); $this->installEntitySchema('user'); $this->installEntitySchema('workspace'); $this->installConfig(['multiversion', 'multiversion_test_paragraphs']); $this->installSchema('node', 'node_access'); $this->installSchema('key_value', 'key_value_sorted'); $this->installSchema('file', 'file_usage'); $multiversion_manager = $this->container->get('multiversion.manager'); $multiversion_manager->enableEntityTypes(); $workspace = Workspace::create([ 'machine_name' => 'live', 'label' => 'Live', 'type' => 'basic', ]); $workspace->save(); $this->nodeStorage = $this->container->get('entity_type.manager')->getStorage('node'); $this->paragraphStorage = $this->container->get('entity_type.manager')->getStorage('paragraph'); } /** * Tests that paragraphs revisions created right when saving parent entity. */ public function testDefaultParagraphsBehaviour() { $paragraph = $this->paragraphStorage->create([ 'title' => 'Stub of real paragraph', 'type' => 'test_paragraph_type', 'field_test_field' => 'First revision title', ]); $node = $this->nodeStorage->create([ 'type' => 'paragraphs_node_type', 'title' => 'Test node', 'field_paragraph' => $paragraph, ]); $node->save(); $node_revision_id = $node->getRevisionId(); $paragraph_entity_id = $node->field_paragraph->target_id; $paragraph_entity = $this->paragraphStorage->load($paragraph_entity_id); /** @var \Drupal\paragraphs\Entity\Paragraph $paragraph_entity */ list($i, $hash) = explode('-', $paragraph_entity->_rev->value); $this->assertEquals($i, '1', 'After saving new node with paragraph we have new paragraph with one revision.'); $paragraph->field_test_field = 'Second revision title'; $node->field_paragraph = $paragraph; $node->save(); $paragraph_entity_revision_id = $node->field_paragraph->target_revision_id; $paragraph_entity = $this->paragraphStorage->loadRevision($paragraph_entity_revision_id); $this->assertRevNumber($paragraph_entity, 2); $this->assertEquals($paragraph_entity->field_test_field->value, 'Second revision title'); $node_first_revision = $this->nodeStorage->loadRevision($node_revision_id); $paragraph_entity_revision_id = $node_first_revision->field_paragraph->target_revision_id; $paragraph_entity = $this->paragraphStorage->loadRevision($paragraph_entity_revision_id); $this->assertEquals($paragraph_entity->field_test_field->value, 'First revision title'); } /** * Tests stub handling for paragraph when it is created after parent entity. */ public function testParagraphStubCreatedAfterParent() { $paragraph_stub = $this->paragraphStorage->create([ 'title' => 'Stub of real paragraph', 'type' => 'test_paragraph_type', ]); $paragraph_stub->_rev->is_stub = TRUE; $node = $this->nodeStorage->create([ 'type' => 'paragraphs_node_type', 'title' => 'Test node', 'field_paragraph' => $paragraph_stub, ]); $node->save(); $paragraph_stub_entity_id = $node->field_paragraph->target_id; $paragraph_stub_entity = $this->paragraphStorage->load($paragraph_stub_entity_id); $this->assertRevNumber($paragraph_stub_entity, 0); $paragraph_real = $this->paragraphStorage->create([ 'type' => 'test_paragraph_type', 'id' => $paragraph_stub_entity->id(), ]); $paragraph_real->enforceIsNew(FALSE); $paragraph_real->_rev->is_stub = FALSE; $paragraph_real->save(); $this->assertEquals($paragraph_real->id(), $paragraph_stub_entity_id); $this->assertRevNumber($paragraph_real, 1); } /** * Tests stub handling for paragraph when it is created before parent entity. */ public function testParagraphStubCreatedBeforeParent() { // Create and save real paragraph. $paragraph = $this->paragraphStorage->create([ 'title' => 'Real paragraph', 'type' => 'test_paragraph_type', ]); $paragraph->save(); // Assert that created paragraph is not a stub and it is the first revision. $this->assertRevNumber($paragraph, 1); // Create stub paragraph with same uuid as real paragraph. $paragraph_stub_in_node = $this->paragraphStorage->create([ 'type' => 'test_paragraph_type', 'uuid' => $paragraph->uuid(), ]); $paragraph_stub_in_node->_rev->is_stub = TRUE; // Create node with paragraph stub. $node = $this->nodeStorage->create([ 'type' => 'paragraphs_node_type', 'title' => 'Test node', 'field_paragraph' => $paragraph_stub_in_node, ]); $node->save(); $paragraph_entity_id_from_node = $node->field_paragraph->target_id; $this->assertEquals($paragraph_entity_id_from_node, $paragraph->id()); $paragraph_entity = $this->paragraphStorage->load($paragraph->id()); $this->assertRevNumber($paragraph_entity, 1); } /** * Assert that entity has given _rev number. * * @param \Drupal\Core\Entity\EntityInterface $entity * Given entity. * @param int $expected_rev_number * Expected _rev number. */ protected function assertRevNumber(EntityInterface $entity, $expected_rev_number) { list($rev_number) = explode('-', $entity->_rev->value); $this->assertEquals($expected_rev_number, $rev_number); } }