public function RelationshipJoinInTest::testRelationshipInQuery in Drupal 9
Same name and namespace in other branches
- 8 core/modules/views/tests/src/Kernel/Plugin/RelationshipJoinInTest.php \Drupal\Tests\views\Kernel\Plugin\RelationshipJoinInTest::testRelationshipInQuery()
Tests the query result of a view with a relationship with an IN condition.
File
- core/
modules/ views/ tests/ src/ Kernel/ Plugin/ RelationshipJoinInTest.php, line 39
Class
- RelationshipJoinInTest
- Tests the base relationship handler.
Namespace
Drupal\Tests\views\Kernel\PluginCode
public function testRelationshipInQuery() {
// Update the first two Beatles to be authored by Kristiaan.
$account_k = $this
->createUser([], 'Kristiaan');
$connection = Database::getConnection();
$connection
->update('views_test_data')
->fields([
'uid' => $account_k
->id(),
])
->condition('id', [
1,
2,
], 'IN')
->execute();
// Update the other two Beatles to be authored by Django.
$account_d = $this
->createUser([], 'Django');
$connection
->update('views_test_data')
->fields([
'uid' => $account_d
->id(),
])
->condition('id', [
3,
4,
], 'IN')
->execute();
// Update Meredith to be authored by Silvie.
$account_s = $this
->createUser([], 'Silvie');
$connection
->update('views_test_data')
->fields([
'uid' => $account_s
->id(),
])
->condition('id', 5)
->execute();
$view = Views::getView('test_view');
$view
->setDisplay();
$view->displayHandlers
->get('default')
->overrideOption('relationships', [
'uid' => [
'id' => 'uid',
'table' => 'views_test_data',
'field' => 'uid',
'required' => TRUE,
],
]);
$view->displayHandlers
->get('default')
->overrideOption('filters', [
'uid' => [
'id' => 'uid',
'table' => 'users_field_data',
'field' => 'uid',
'relationship' => 'uid',
],
]);
$fields = $view->displayHandlers
->get('default')
->getOption('fields');
$view->displayHandlers
->get('default')
->overrideOption('fields', $fields + [
'uid' => [
'id' => 'uid',
'table' => 'users_field_data',
'field' => 'uid',
'relationship' => 'uid',
],
]);
// Check for all beatles created by Kristiaan.
$view
->initHandlers();
$view->filter['uid']->value = [
$account_k
->id(),
];
$this
->executeView($view);
$expected_result = [
[
'name' => 'John',
'uid' => $account_k
->id(),
],
[
'name' => 'George',
'uid' => $account_k
->id(),
],
];
$this
->assertIdenticalResultset($view, $expected_result, $this->columnMap);
$view
->destroy();
// Check for all beatles created by Django. This should not return anything
// as the 'extra' option on the join prohibits relating to any authors but
// Kristiaan or Silvie.
$view
->initHandlers();
$view->filter['uid']->value = [
$account_d
->id(),
];
$this
->executeView($view);
$expected_result = [];
$this
->assertIdenticalResultset($view, $expected_result, $this->columnMap);
$view
->destroy();
// Check for all people created by anyone.
$view
->initHandlers();
$this
->executeView($view);
$expected_result = [
[
'name' => 'John',
'uid' => $account_k
->id(),
],
[
'name' => 'George',
'uid' => $account_k
->id(),
],
[
'name' => 'Meredith',
'uid' => $account_s
->id(),
],
];
$this
->assertIdenticalResultset($view, $expected_result, $this->columnMap);
$view
->destroy();
}