multiversion-8.x-1.0-beta34/tests/src/Functional/GraphCreationTest.php
tests/src/Functional/GraphCreationTest.php
<?php
namespace Drupal\Tests\multiversion\Functional;
/**
* Test the getGraph method from the RevisionTreeIndex class.
*
* @group multiversion
*/
class GraphCreationTest extends MultiversionFunctionalTestBase {
protected static $modules = ['entity_test', 'key_value', 'multiversion'];
/**
* @var \Drupal\multiversion\Workspace\WorkspaceManagerInterface
*/
protected $workspaceManager;
/**
* @var \Drupal\multiversion\Entity\Index\RevisionTreeIndex
*/
protected $tree;
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->tree = $this->container->get('multiversion.entity_index.rev.tree');
}
/**
* Shape of Tree created is:
* 1
* / \
* 2 6
* / \
* 3 4
* /
* 5
*/
public function testGraphCreation() {
$storage = $this->entityTypeManager->getStorage('entity_test_rev');
$entity = $storage->create();
$uuid = $entity->uuid();
// Create a conflict scenario to fully test the parsing.
// Initial revision.
$entity->save();
$revs[] = $entity->_rev->value;
$entity->save();
$revs[] = $entity->_rev->value;
$entity->save();
$revs[] = $leaf_one = $entity->_rev->value;
$entity = $storage->load(1);
$this->assertEqual($entity->getRevisionId(), 3, 'Default revision has been set correctly.');
// Create a new branch from the second revision.
$entity = $storage->loadRevision(2);
$entity->save();
$revs[] = $leaf_two = $entity->_rev->value;
// We now have two leafs at the tip of the tree.
$leafs = [$leaf_one, $leaf_two];
sort($leafs);
$expected_leaf = array_pop($leafs);
$entity = $storage->load(1);
$this->assertEqual($entity->_rev->value, $expected_leaf, 'The correct revision won while having two open revisions.');
// Continue the last branch.
$entity = $storage->loadRevision(4);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->load(1);
$this->assertEqual($entity->getRevisionId(), 5, 'Default revision has been set correctly.');
// Create a new branch based on the first revision.
$entity = $storage->loadRevision(1);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->load(1);
$this->assertEqual($entity->getRevisionId(), 5, 'Default revision has been set correctly.');
// Creating graph from the revision tree.
$graph = $this->tree->getGraph($uuid);
// Storing the graph's vertices in $vertices array.
$vertices = $graph->getVertices()->getMap();
foreach ($vertices[$revs[1]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[0],'node 2\'s parent is 1');
}
foreach ($vertices[$revs[2]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[1],'node 3\'s parent is 2');
}
foreach ($vertices[$revs[3]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[1],'node 4\'s parent is 2');
}
foreach ($vertices[$revs[4]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[3], 'node 5\'s parent is 4');
}
foreach ($vertices[$revs[5]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[0], 'node 6\'s parent is 1');
}
}
/**
* Shape of tree is:
* 1
* / \
* 2 6
* / \ / \
* 3 5 7 8
* / \ /
* 4 9 10
*
*/
public function testGraphCreation2() {
$storage = $this->entityTypeManager->getStorage('entity_test_rev');
$entity = $storage->create();
$uuid = $entity->uuid();
// Create a conflict scenario to fully test the parsing.
// Initial revision.
$entity->save();
$revs[] = $entity->_rev->value;
$entity->save();
$revs[] = $entity->_rev->value;
$entity->save();
$revs[] = $entity->_rev->value;
$entity->save();
$revs[] = $entity->_rev->value;
// Create a new branch from the second revision.
$entity = $storage->loadRevision(2);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(1);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(6);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(6);
$entity->save();
$revs[] = $entity->_rev->value;
// Continue the last branch.
$entity = $storage->loadRevision(3);
$entity->save();
$revs[] = $entity->_rev->value;
// Create a new branch based on the first revision.
$entity = $storage->loadRevision(8);
$entity->save();
$revs[] = $entity->_rev->value;
$graph = $this->tree->getGraph($uuid);
$vertices = $graph->getVertices()->getMap();
foreach ($vertices[$revs[1]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[0],'node 2\'s parent is 1');
}
foreach ($vertices[$revs[2]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[1],'node 3\'s parent is 2');
}
foreach ($vertices[$revs[3]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[2],'node 4\'s parent is 3');
}
foreach ($vertices[$revs[4]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[1], 'node 5\'s parent is 2');
}
foreach ($vertices[$revs[5]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[0], 'node 6\'s parent is 1');
}
foreach ($vertices[$revs[6]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[5],'node 7\'s parent is 6');
}
foreach ($vertices[$revs[7]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[5],'node 8\'s parent is 6');
}
foreach ($vertices[$revs[8]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[2],'node 9\'s parent is 3');
}
foreach ($vertices[$revs[9]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[7], 'node 10\'s parent is 8');
}
}
/**
* Graph structure defined in /vendor/relaxedws/lca/pictures/simple_graph.png
*/
public function testGraphCreation3() {
$storage = $this->entityTypeManager->getStorage('entity_test_rev');
$entity = $storage->create();
$uuid = $entity->uuid();
$entity->save();
$revs[] = $entity->_rev->value;
$entity->save();
$revs[] = $entity->_rev->value;
$entity->save();
$revs[] = $entity->_rev->value;
$entity->save();
$revs[] = $entity->_rev->value;
$entity->save();
$revs[] = $entity->_rev->value;
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(3);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(3);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(4);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(7);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(8);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(1);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(12);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(13);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(13);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(14);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(15);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(16);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(16);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(17);
$entity->save();
$revs[] = $entity->_rev->value;
$entity = $storage->loadRevision(5);
$entity->save();
$revs[] = $entity->_rev->value;
$graph = $this->tree->getGraph($uuid);
$vertices = $graph->getVertices()->getMap();
foreach ($vertices[$revs[1]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[0],'node 2\'s parent is 1');
}
foreach ($vertices[$revs[2]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[1],'node 3\'s parent is 2');
}
foreach ($vertices[$revs[3]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[2],'node 4\'s parent is 3');
}
foreach ($vertices[$revs[4]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[3], 'node 5\'s parent is 4');
}
foreach ($vertices[$revs[5]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[4], 'node 6\'s parent is 5');
}
foreach ($vertices[$revs[6]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[2],'node 7\'s parent is 3');
}
foreach ($vertices[$revs[7]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[2],'node 8\'s parent is 3');
}
foreach ($vertices[$revs[8]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[3],'node 9\'s parent is 4');
}
foreach ($vertices[$revs[9]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[6], 'node 10\'s parent is 7');
}
foreach ($vertices[$revs[10]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[7],'node 11\'s parent is 8');
}
foreach ($vertices[$revs[11]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[0],'node 12\'s parent is 1');
}
foreach ($vertices[$revs[12]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[11],'node 13\'s parent is 12');
}
foreach ($vertices[$revs[13]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[12], 'node 14\'s parent is 13');
}
foreach ($vertices[$revs[14]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[12], 'node 15\'s parent is 13');
}
foreach ($vertices[$revs[15]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[13],'node 16\'s parent is 14');
}
foreach ($vertices[$revs[16]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[14],'node 17\'s parent is 15');
}
foreach ($vertices[$revs[17]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[15],'node 18\'s parent is 16');
}
foreach ($vertices[$revs[18]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[15], 'node 19\'s parent is 16');
}
foreach ($vertices[$revs[19]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[16],'node 20\'s parent is 17');
}
foreach ($vertices[$revs[20]]->getVerticesEdgeFrom() as $parent) {
$this->assertEqual($parent->getId(), $revs[4], 'node 21\'s parent is 5');
}
}
}
