VersionNegotiatorTest.php
Same filename in other branches
Namespace
Drupal\Tests\jsonapi\Kernel\RevisionsFile
-
core/
modules/ jsonapi/ tests/ src/ Kernel/ Revisions/ VersionNegotiatorTest.php
View source
<?php
namespace Drupal\Tests\jsonapi\Kernel\Revisions;
use Drupal\Core\Http\Exception\CacheableBadRequestHttpException;
use Drupal\Core\Http\Exception\CacheableNotFoundHttpException;
use Drupal\jsonapi\Revisions\VersionById;
use Drupal\jsonapi\Revisions\VersionByRel;
use Drupal\jsonapi\Revisions\VersionNegotiator;
use Drupal\node\Entity\Node;
use Drupal\node\Entity\NodeType;
use Drupal\Tests\jsonapi\Kernel\JsonapiKernelTestBase;
use Drupal\user\Entity\User;
/**
* The test class for version negotiators.
*
* @coversDefaultClass \Drupal\jsonapi\Revisions\VersionNegotiator
* @group jsonapi
*
* @internal
*/
class VersionNegotiatorTest extends JsonapiKernelTestBase {
/**
* The user.
*
* @var \Drupal\user\Entity\User
*/
protected $user;
/**
* The node.
*
* @var \Drupal\node\Entity\Node
*/
protected $node;
/**
* The previous revision ID of $node.
*
* @var string
*/
protected $nodePreviousRevisionId;
/**
* The version negotiator service.
*
* @var \Drupal\jsonapi\Revisions\VersionNegotiator
*/
protected $versionNegotiator;
/**
* The other node.
*
* @var \Drupal\node\Entity\Node
*/
protected $node2;
protected static $modules = [
'node',
'field',
'jsonapi',
'serialization',
'system',
'user',
];
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
// Add the entity schemas.
$this->installEntitySchema('node');
$this->installEntitySchema('user');
// Add the additional table schemas.
$this->installSchema('system', [
'sequences',
]);
$this->installSchema('node', [
'node_access',
]);
$this->installSchema('user', [
'users_data',
]);
$type = NodeType::create([
'type' => 'dummy',
'new_revision' => TRUE,
]);
$type->save();
$this->user = User::create([
'name' => 'user1',
'mail' => 'user@localhost',
'status' => 1,
]);
$this->user
->save();
$this->node = Node::create([
'title' => 'dummy_title',
'type' => 'dummy',
'uid' => $this->user
->id(),
]);
$this->node
->save();
$this->nodePreviousRevisionId = $this->node
->getRevisionId();
$this->node
->setNewRevision();
$this->node
->setTitle('revised_dummy_title');
$this->node
->save();
$this->node2 = Node::create([
'type' => 'dummy',
'title' => 'Another test node',
'uid' => $this->user
->id(),
]);
$this->node2
->save();
$entity_type_manager = \Drupal::entityTypeManager();
$version_negotiator = new VersionNegotiator();
$version_negotiator->addVersionNegotiator(new VersionById($entity_type_manager), 'id');
$version_negotiator->addVersionNegotiator(new VersionByRel($entity_type_manager), 'rel');
$this->versionNegotiator = $version_negotiator;
}
/**
* @covers \Drupal\jsonapi\Revisions\VersionById::getRevision
*/
public function testOldRevision() {
$revision = $this->versionNegotiator
->getRevision($this->node, 'id:' . $this->nodePreviousRevisionId);
$this->assertEquals($this->node
->id(), $revision->id());
$this->assertEquals($this->nodePreviousRevisionId, $revision->getRevisionId());
}
/**
* @covers \Drupal\jsonapi\Revisions\VersionById::getRevision
*/
public function testInvalidRevisionId() {
$this->expectException(CacheableNotFoundHttpException::class);
$this->expectExceptionMessage(sprintf('The requested version, identified by `id:%s`, could not be found.', $this->node2
->getRevisionId()));
$this->versionNegotiator
->getRevision($this->node, 'id:' . $this->node2
->getRevisionId());
}
/**
* @covers \Drupal\jsonapi\Revisions\VersionByRel::getRevision
*/
public function testLatestVersion() {
$revision = $this->versionNegotiator
->getRevision($this->node, 'rel:' . VersionByRel::LATEST_VERSION);
$this->assertEquals($this->node
->id(), $revision->id());
$this->assertEquals($this->node
->getRevisionId(), $revision->getRevisionId());
}
/**
* @covers \Drupal\jsonapi\Revisions\VersionByRel::getRevision
*/
public function testCurrentVersion() {
$revision = $this->versionNegotiator
->getRevision($this->node, 'rel:' . VersionByRel::WORKING_COPY);
$this->assertEquals($this->node
->id(), $revision->id());
$this->assertEquals($this->node
->id(), $revision->id());
$this->assertEquals($this->node
->getRevisionId(), $revision->getRevisionId());
}
/**
* @covers \Drupal\jsonapi\Revisions\VersionByRel::getRevision
*/
public function testInvalidRevisionRel() {
$this->expectException(CacheableBadRequestHttpException::class);
$this->expectExceptionMessage('An invalid resource version identifier, `rel:erroneous-revision-name`, was provided.');
$this->versionNegotiator
->getRevision($this->node, 'rel:erroneous-revision-name');
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
VersionNegotiatorTest | The test class for version negotiators. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.