protected function NodeAccessBaseTableTest::assertTaxonomyPage in Drupal 10
Same name and namespace in other branches
- 8 core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php \Drupal\Tests\node\Functional\NodeAccessBaseTableTest::assertTaxonomyPage()
- 9 core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php \Drupal\Tests\node\Functional\NodeAccessBaseTableTest::assertTaxonomyPage()
Checks taxonomy/term listings to ensure only accessible nodes are listed.
@internal
Parameters
bool $is_admin: A boolean indicating whether the current user is an administrator. If TRUE, all nodes should be listed. If FALSE, only public nodes and the user's own private nodes should be listed.
File
- core/
modules/ node/ tests/ src/ Functional/ NodeAccessBaseTableTest.php, line 217
Class
- NodeAccessBaseTableTest
- Tests behavior of the node access subsystem if the base table is not node.
Namespace
Drupal\Tests\node\FunctionalCode
protected function assertTaxonomyPage(bool $is_admin) : void {
foreach ([
$this->publicTid,
$this->privateTid,
] as $tid_is_private => $tid) {
$this
->drupalGet("taxonomy/term/{$tid}");
$this->nidsVisible = [];
foreach ($this
->xpath("//a[text()='Read more']") as $link) {
// See also testTranslationRendering() in NodeTranslationUITest.
$this
->assertEquals(1, preg_match('|node/(\\d+)$|', $link
->getAttribute('href'), $matches), 'Read more points to a node');
$this->nidsVisible[$matches[1]] = TRUE;
}
foreach ($this->nodesByUser as $uid => $data) {
foreach ($data as $nid => $is_private) {
// Private nodes should be visible on the private term page,
// public nodes should be visible on the public term page.
$should_be_visible = $tid_is_private == $is_private;
// Non-administrators can only see their own nodes on the private
// term page.
if (!$is_admin && $tid_is_private) {
$should_be_visible = $should_be_visible && $uid == $this->webUser
->id();
}
$this
->assertSame($should_be_visible, isset($this->nidsVisible[$nid]), strtr('A %private node by user %uid is %visible for user %current_uid on the %tid_is_private page.', [
'%private' => $is_private ? 'private' : 'public',
'%uid' => $uid,
'%visible' => isset($this->nidsVisible[$nid]) ? 'visible' : 'not visible',
'%current_uid' => $this->webUser
->id(),
'%tid_is_private' => $tid_is_private ? 'private' : 'public',
]));
}
}
}
}