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');
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc