multiversion-8.x-1.0-beta34/tests/src/Functional/MultiversionManagerTest.php
tests/src/Functional/MultiversionManagerTest.php
<?php
namespace Drupal\Tests\multiversion\Functional;
use Drupal\Core\Entity\ContentEntityTypeInterface;
use Drupal\entity_test\Entity\EntityTestRev;
use Drupal\Tests\BrowserTestBase;
/**
* Test the MultiversionManager class.
*
* @group multiversion
*/
class MultiversionManagerTest extends BrowserTestBase {
const REVISION_HASH_REGEX = '[0-9a-f]{32}';
protected $strictConfigSchema = FALSE;
protected static $modules = ['multiversion', 'entity_test'];
/**
* @var \Drupal\multiversion\MultiversionManager
*/
protected $multiversionManager;
protected function setUp() {
parent::setUp();
$this->multiversionManager = \Drupal::service('multiversion.manager');
}
protected function extractRevisionHash($rev) {
preg_match('/\d\-(' . self::REVISION_HASH_REGEX . ')/', $rev, $matches);
return isset($matches[1]) ? $matches[1] : FALSE;
}
public function assertRevisionId($index, $value, $message) {
$this->assertTrue(preg_match('/' . $index . '\-' . self::REVISION_HASH_REGEX . '/', $value), $message);
}
public function testRevisionIdGeneration() {
$entity = EntityTestRev::create();
$first_rev = $this->multiversionManager->newRevisionId($entity, 0);
$this->assertRevisionId(1, $first_rev, 'First revision ID was generated correctly.');
$new_rev = $this->multiversionManager->newRevisionId($entity, 0);
$this->assertEqual($first_rev, $new_rev, 'Identical revision IDs with same input parameters.');
$second_rev = $this->multiversionManager->newRevisionId($entity, 1);
$this->assertRevisionId(2, $second_rev, 'Second revision ID was generated correctly.');
$this->assertEqual($this->extractRevisionHash($first_rev), $this->extractRevisionHash($second_rev), 'First and second revision hashes was identical (entity did not change).');
$revs = [$first_rev];
$test_entity = clone $entity;
$test_entity->_rev->value = $first_rev;
$revs[] = $this->multiversionManager->newRevisionId($test_entity, 0);
$this->assertTrue(count($revs) == count(array_unique($revs)), 'Revision ID varies on old revision.');
$test_entity = clone $entity;
$test_entity->name = $this->randomMachineName();
$revs[] = $this->multiversionManager->newRevisionId($test_entity, 0);
$this->assertTrue(count($revs) == count(array_unique($revs)), 'Revision ID varies on entity fields.');
$test_entity = clone $entity;
$test_entity->_deleted->value = TRUE;
$revs[] = $this->multiversionManager->newRevisionId($test_entity, 0);
$this->assertTrue(count($revs) == count(array_unique($revs)), 'Revision ID varies on deleted flag.');
}
public function testGetSupportedEntityTypes() {
foreach ($this->multiversionManager->getSupportedEntityTypes() as $entity_type_id => $entity_type) {
$label = $entity_type->get('label');
$this->assertTrue($entity_type instanceof ContentEntityTypeInterface, "$label is an instance of ContentEntityTypeInterface");
}
}
}
