multiversion-8.x-1.0-beta34/tests/src/Functional/ComplexLcaResolverTest.php
tests/src/Functional/ComplexLcaResolverTest.php
<?php namespace Drupal\Tests\multiversion\Functional; /** * Test the Integration of LCA library with multiversion module. * * @group multiversion */ class ComplexLcaResolverTest extends MultiversionFunctionalTestBase { protected static $modules = ['entity_test', 'key_value', 'multiversion', 'conflict']; /** * @var \Drupal\multiversion\Workspace\WorkspaceManagerInterface */ protected $workspaceManager; /** * @var \Drupal\multiversion\Entity\Index\RevisionTreeIndex */ protected $tree; /** * @var \Drupal\conflict\LcaManager. */ protected $conflictLcaManager; /** * {@inheritdoc} */ protected function setUp() { parent::setUp(); $this->conflictLcaManager = $this->container->get('conflict.lca_manager'); $this->tree = $this->container->get('multiversion.entity_index.rev.tree'); } /** * Shape of Tree created is: * 1 * / \ * 2 6 * / \ * 3 4 * / * 5 */ public function testLcaFinder() { $storage = $this->entityTypeManager->getStorage('entity_test'); $entity = $storage->create(); $uuid = $entity->uuid(); // Initial revision. $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; // Continue the last branch. $entity = $storage->loadRevision(4); $entity->save(); $revs[] = $entity->_rev->value; // Create a new branch based on the first revision. $entity = $storage->loadRevision(1); $entity->save(); $revs[] = $entity->_rev->value; // Loading and storing revisions in $revision array. $revision = []; for ($i = 1; $i <= 6; $i++) { $revision[$i] = $storage->loadRevision($i); } // Creating a graph of revision IDs from revision tree. $graph = $this->tree->getGraph($uuid); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[1],$revision[2], $graph); $this->assertEqual($lca_id->getId(), $revs[0]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[3],$revision[4], $graph); $this->assertEqual($lca_id->getId(), $revs[1]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[3],$revision[6], $graph); $this->assertEqual($lca_id->getId(), $revs[0]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[2],$revision[6], $graph); $this->assertEqual($lca_id->getId(), $revs[0]); } /** * Shape of tree is: * 1 * / \ * 2 6 * / \ / \ * 3 5 7 8 * / \ / * 4 9 10 * */ public function testLcaFinder2() { $storage = $this->entityTypeManager->getStorage('entity_test'); $entity = $storage->create(); $uuid = $entity->uuid(); // 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; // Create a new branch from the first revision. $entity = $storage->loadRevision(1); $entity->save(); $revs[] = $entity->_rev->value; // Creating a new branch from sixth revision. $entity = $storage->loadRevision(6); $entity->save(); $revs[] = $entity->_rev->value; // Creating another revision branch from sixth revision. $entity = $storage->loadRevision(6); $entity->name = 'Revision6'; $entity->save(); $revs[] = $entity->_rev->value; $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; $revision = []; for ($i = 1; $i <= 10; $i++) { $revision[$i] = $storage->loadRevision($i); } $graph = $this->tree->getGraph($uuid); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[1],$revision[2], $graph); $this->assertEqual($lca_id->getId(), $revs[0]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[2],$revision[6], $graph); $this->assertEqual($lca_id->getId(), $revs[0]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[3],$revision[5], $graph); $this->assertEqual($lca_id->getId(), $revs[1]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[2],$revision[3], $graph); $this->assertEqual($lca_id->getId(), $revs[1]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[4],$revision[5], $graph); $this->assertEqual($lca_id->getId(), $revs[1]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[4],$revision[9], $graph); $this->assertEqual($lca_id->getId(), $revs[2]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[7],$revision[10], $graph); $this->assertEqual($lca_id->getId(), $revs[5]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[6],$revision[7], $graph); $this->assertEqual($lca_id->getId(), $revs[5]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[7],$revision[8], $graph); $this->assertEqual($lca_id->getId(), $revs[5]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[8],$revision[9], $graph); $this->assertEqual($lca_id->getId(), $revs[0]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[6],$revision[8], $graph); $this->assertEqual($lca_id->getId(), $revs[5]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[3],$revision[9], $graph); $this->assertEqual($lca_id->getId(), $revs[2]); } // Graph structure in multiversion/vendor/relaxedws/lca/pictures/simple_graph.png public function testLcaFinder3() { $storage = $this->entityTypeManager->getStorage('entity_test'); $entity = $storage->create(); $uuid = $entity->uuid(); // 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; $entity->save(); $revs[] = $entity->_rev->value; $entity->save(); $revs[] = $entity->_rev->value; // Create a new branch from the third revision. $entity = $storage->loadRevision(3); $entity->save(); $revs[] = $entity->_rev->value; $entity->save(); $revs[] = $entity->_rev->value; // Create a new branch from the fourth revision. $entity = $storage->loadRevision(4); $entity->save(); $revs[] = $entity->_rev->value; // Create a new branch from the fifth revision. $entity = $storage->loadRevision(5); $entity->save(); $revs[] = $entity->_rev->value; $entity = $storage->loadRevision(3); $entity->name = 'Revision3'; $entity->save(); $revs[] = $entity->_rev->value; $entity->save(); $revs[] = $entity->_rev->value; $entity = $storage->loadRevision(1); $entity->name = 'Revision6'; $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(14); $entity->name = 'Revision14'; $entity->save(); $revs[] = $entity->_rev->value; $entity->save(); $revs[] = $entity->_rev->value; $entity->save(); $revs[] = $entity->_rev->value; $entity = $storage->loadRevision(16); $entity->name = 'Revision16'; $entity->save(); $revs[] = $entity->_rev->value; // Creating graph from revision tree. $graph = $this->tree->getGraph($uuid); // Loading and storing revisions in $revision array. $revision = []; for ($i = 1; $i <= 21; $i++) { $revision[$i] = $storage->loadRevision($i); } $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[1],$revision[2], $graph); $this->assertEqual($lca_id->getId(), $revs[0]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[2],$revision[3], $graph); $this->assertEqual($lca_id->getId(), $revs[1]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[7],$revision[8], $graph); $this->assertEqual($lca_id->getId(), $revs[6]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[5],$revision[9], $graph); $this->assertEqual($lca_id->getId(), $revs[3]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[10],$revision[11], $graph); $this->assertEqual($lca_id->getId(), $revs[2]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[16],$revision[17], $graph); $this->assertEqual($lca_id->getId(), $revs[15]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[17],$revision[20], $graph); $this->assertEqual($lca_id->getId(), $revs[13]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[6],$revision[21], $graph); $this->assertEqual($lca_id->getId(), $revs[0]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[6],$revision[11], $graph); $this->assertEqual($lca_id->getId(), $revs[2]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[17],$revision[21], $graph); $this->assertEqual($lca_id->getId(), $revs[15]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[15],$revision[18], $graph); $this->assertEqual($lca_id->getId(), $revs[13]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[5],$revision[9], $graph); $this->assertEqual($lca_id->getId(), $revs[3]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[6],$revision[10], $graph); $this->assertEqual($lca_id->getId(), $revs[4]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[7],$revision[11], $graph); $this->assertEqual($lca_id->getId(), $revs[2]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[13],$revision[14], $graph); $this->assertEqual($lca_id->getId(), $revs[12]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[8],$revision[12], $graph); $this->assertEqual($lca_id->getId(), $revs[2]); $lca_id = $this->conflictLcaManager->resolveLowestCommonAncestor($revision[4],$revision[8], $graph); $this->assertEqual($lca_id->getId(), $revs[2]); } }