public function WorkspaceIntegrationTest::testEntityQueryRelationship in Drupal 9
Same name and namespace in other branches
- 8 core/modules/workspaces/tests/src/Kernel/WorkspaceIntegrationTest.php \Drupal\Tests\workspaces\Kernel\WorkspaceIntegrationTest::testEntityQueryRelationship()
- 10 core/modules/workspaces/tests/src/Kernel/WorkspaceIntegrationTest.php \Drupal\Tests\workspaces\Kernel\WorkspaceIntegrationTest::testEntityQueryRelationship()
Tests the Entity Query relationship API with workspaces.
File
- core/
modules/ workspaces/ tests/ src/ Kernel/ WorkspaceIntegrationTest.php, line 508
Class
- WorkspaceIntegrationTest
- Tests a complete publishing scenario across different workspaces.
Namespace
Drupal\Tests\workspaces\KernelCode
public function testEntityQueryRelationship() {
$this
->initializeWorkspacesModule();
// Add an entity reference field that targets 'entity_test_mulrevpub'
// entities.
$this
->createEntityReferenceField('node', 'page', 'field_test_entity', 'Test entity reference', 'entity_test_mulrevpub');
// Add an entity reference field that targets 'node' entities so we can test
// references to the same base tables.
$this
->createEntityReferenceField('node', 'page', 'field_test_node', 'Test node reference', 'node');
$this
->switchToWorkspace('live');
$node_1 = $this
->createNode([
'title' => 'live node 1',
]);
$entity_test = EntityTestMulRevPub::create([
'name' => 'live entity_test_mulrevpub',
'non_rev_field' => 'live non-revisionable value',
]);
$entity_test
->save();
$node_2 = $this
->createNode([
'title' => 'live node 2',
'field_test_entity' => $entity_test
->id(),
'field_test_node' => $node_1
->id(),
]);
// Switch to the 'stage' workspace and change some values for the referenced
// entities.
$this
->switchToWorkspace('stage');
$node_1->title->value = 'stage node 1';
$node_1
->save();
$node_2->title->value = 'stage node 2';
$node_2
->save();
$entity_test->name->value = 'stage entity_test_mulrevpub';
$entity_test->non_rev_field->value = 'stage non-revisionable value';
$entity_test
->save();
// Make sure that we're requesting the default revision.
$query = $this->entityTypeManager
->getStorage('node')
->getQuery()
->accessCheck(FALSE);
$query
->currentRevision();
$query
->condition('title', 'stage node 2')
->condition('revision_uid', $node_2
->getRevisionUserId())
->condition('type', $node_2
->bundle())
->condition('uuid', $node_2
->uuid());
// Add conditions for a reference to the same entity type.
$query
->condition('field_test_node.entity.title', 'stage node 1')
->condition('field_test_node.entity.revision_uid', $node_1
->getRevisionUserId())
->condition('field_test_node.entity.type', $node_1
->bundle())
->condition('field_test_node.entity.uuid', $node_1
->uuid());
// Add conditions for a reference to a different entity type.
// @todo Re-enable the two conditions below when we find a way to not join
// the workspace_association table for every duplicate entity base table
// join.
// @see https://www.drupal.org/project/drupal/issues/2983639
$query
->condition('field_test_entity.entity.uuid', $entity_test
->uuid());
$result = $query
->execute();
$this
->assertSame([
$node_2
->getRevisionId() => $node_2
->id(),
], $result);
}