You are here

public function WorkspaceIntegrationTest::testEntityQueryRelationship in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/workspaces/tests/src/Kernel/WorkspaceIntegrationTest.php \Drupal\Tests\workspaces\Kernel\WorkspaceIntegrationTest::testEntityQueryRelationship()
  2. 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\Kernel

Code

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