From c01ed57d450abe66c69e49a57c9d10adc30025cc Mon Sep 17 00:00:00 2001 From: catch <6915-catch@users.noreply.drupalcode.org> Date: Tue, 14 Jan 2025 21:39:01 +0000 Subject: [PATCH] Issue #3495214 by nikolay shapovalov, nicxvan, quietone: Move helpers in node_access_test.module and delete it --- core/.phpstan-baseline.php | 6 -- .../tests/src/Functional/NodeAccessTest.php | 5 +- .../ManageFieldsFunctionalTestBase.php | 6 +- .../tests/src/Functional/FilePrivateTest.php | 5 +- .../node_access_test/node_access_test.module | 56 ------------------- .../Functional/NodeAccessBaseTableTest.php | 4 +- .../src/Functional/NodeAccessJoinTest.php | 5 +- .../NodeAccessRebuildNodeGrantsTest.php | 5 +- .../Functional/Views/BulkFormAccessTest.php | 5 +- .../Functional/Views/FilterNodeAccessTest.php | 5 +- ...NodeAccessLanguageAwareCombinationTest.php | 5 +- .../src/Kernel/NodeAccessLanguageTest.php | 5 +- .../node/tests/src/Traits/NodeAccessTrait.php | 52 +++++++++++++++++ .../Module/PrepareUninstallTest.php | 4 +- .../tests/src/Functional/UserCancelTest.php | 4 +- 15 files changed, 97 insertions(+), 75 deletions(-) delete mode 100644 core/modules/node/tests/modules/node_access_test/node_access_test.module create mode 100644 core/modules/node/tests/src/Traits/NodeAccessTrait.php diff --git a/core/.phpstan-baseline.php b/core/.phpstan-baseline.php index a4b7ee050fb0..65d42970126e 100644 --- a/core/.phpstan-baseline.php +++ b/core/.phpstan-baseline.php @@ -30391,12 +30391,6 @@ 'count' => 1, 'path' => __DIR__ . '/modules/node/src/Routing/RouteSubscriber.php', ]; -$ignoreErrors[] = [ - 'message' => '#^Function node_access_test_add_field\\(\\) has no return type specified\\.$#', - 'identifier' => 'missingType.return', - 'count' => 1, - 'path' => __DIR__ . '/modules/node/tests/modules/node_access_test/node_access_test.module', -]; $ignoreErrors[] = [ 'message' => '#^Method Drupal\\\\node_test\\\\Hook\\\\NodeTestHooks\\:\\:nodeInsert\\(\\) has no return type specified\\.$#', 'identifier' => 'missingType.return', diff --git a/core/modules/content_moderation/tests/src/Functional/NodeAccessTest.php b/core/modules/content_moderation/tests/src/Functional/NodeAccessTest.php index e9b9f9e6007f..d8da46eea314 100644 --- a/core/modules/content_moderation/tests/src/Functional/NodeAccessTest.php +++ b/core/modules/content_moderation/tests/src/Functional/NodeAccessTest.php @@ -5,6 +5,7 @@ namespace Drupal\Tests\content_moderation\Functional; use Drupal\node\Entity\NodeType; +use Drupal\Tests\node\Traits\NodeAccessTrait; /** * Tests permission access control around nodes. @@ -13,6 +14,8 @@ */ class NodeAccessTest extends ModerationStateTestBase { + use NodeAccessTrait; + /** * {@inheritdoc} */ @@ -60,7 +63,7 @@ protected function setUp(): void { $this->grantUserPermissionToCreateContentOfType($this->adminUser, 'moderated_content'); // Add the private field to the node type. - node_access_test_add_field(NodeType::load('moderated_content')); + $this->addPrivateField(NodeType::load('moderated_content')); // Rebuild permissions because hook_node_grants() is implemented by the // node_access_test_empty module. diff --git a/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTestBase.php b/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTestBase.php index 2d47412fec75..360e1f8ffa66 100644 --- a/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTestBase.php +++ b/core/modules/field_ui/tests/src/Functional/ManageFieldsFunctionalTestBase.php @@ -6,6 +6,7 @@ use Drupal\Core\Language\LanguageInterface; use Drupal\node\Entity\NodeType; +use Drupal\Tests\node\Traits\NodeAccessTrait; use Drupal\taxonomy\Entity\Vocabulary; use Drupal\Tests\BrowserTestBase; use Drupal\Tests\field\Traits\EntityReferenceFieldCreationTrait; @@ -16,8 +17,9 @@ */ class ManageFieldsFunctionalTestBase extends BrowserTestBase { - use FieldUiTestTrait; use EntityReferenceFieldCreationTrait; + use FieldUiTestTrait; + use NodeAccessTrait; /** * {@inheritdoc} @@ -136,7 +138,7 @@ protected function setUp(): void { // Setup node access testing. node_access_rebuild(); - node_access_test_add_field(NodeType::load('article')); + $this->addPrivateField(NodeType::load('article')); \Drupal::state()->set('node_access_test.private', TRUE); } diff --git a/core/modules/file/tests/src/Functional/FilePrivateTest.php b/core/modules/file/tests/src/Functional/FilePrivateTest.php index b7d2d7a4de21..3eb1fe548616 100644 --- a/core/modules/file/tests/src/Functional/FilePrivateTest.php +++ b/core/modules/file/tests/src/Functional/FilePrivateTest.php @@ -6,6 +6,7 @@ use Drupal\file\Entity\File; use Drupal\node\Entity\NodeType; +use Drupal\Tests\node\Traits\NodeAccessTrait; use Drupal\user\RoleInterface; /** @@ -15,6 +16,8 @@ */ class FilePrivateTest extends FileFieldTestBase { + use NodeAccessTrait; + /** * {@inheritdoc} */ @@ -30,7 +33,7 @@ class FilePrivateTest extends FileFieldTestBase { */ protected function setUp(): void { parent::setUp(); - node_access_test_add_field(NodeType::load('article')); + $this->addPrivateField(NodeType::load('article')); node_access_rebuild(); \Drupal::state()->set('node_access_test.private', TRUE); // This test expects unused managed files to be marked as a temporary file. diff --git a/core/modules/node/tests/modules/node_access_test/node_access_test.module b/core/modules/node/tests/modules/node_access_test/node_access_test.module deleted file mode 100644 index e6af0dbe82ad..000000000000 --- a/core/modules/node/tests/modules/node_access_test/node_access_test.module +++ /dev/null @@ -1,56 +0,0 @@ -<?php - -/** - * @file - * Test module for testing the node access system. - * - * This module's functionality depends on the following state variables: - * - node_access_test.no_access_uid: Used in NodeQueryAlterTest to enable the - * node_access_all grant realm. - * - node_access_test.private: When TRUE, the module controls access for nodes - * with a 'private' property set, and inherits the default core access for - * nodes without this flag. When FALSE, the module controls access for all - * nodes. - * - node_access_test_secret_catalan: When set to TRUE and using the Catalan - * 'ca' language code, makes all Catalan content secret. - * - * @see node_access_test_node_grants() - * @see \Drupal\node\Tests\NodeQueryAlterTest - * @see \Drupal\node\Tests\NodeAccessBaseTableTest - */ - -declare(strict_types=1); - -use Drupal\field\Entity\FieldStorageConfig; -use Drupal\field\Entity\FieldConfig; -use Drupal\node\NodeTypeInterface; - -/** - * Adds the private field to a node type. - * - * @param \Drupal\node\NodeTypeInterface $type - * A node type entity. - */ -function node_access_test_add_field(NodeTypeInterface $type) { - $field_storage = FieldStorageConfig::create([ - 'field_name' => 'private', - 'entity_type' => 'node', - 'type' => 'integer', - ]); - $field_storage->save(); - $field = FieldConfig::create([ - 'field_name' => 'private', - 'entity_type' => 'node', - 'bundle' => $type->id(), - 'label' => 'Private', - ]); - $field->save(); - - // Assign widget settings for the 'default' form mode. - \Drupal::service('entity_display.repository') - ->getFormDisplay('node', $type->id()) - ->setComponent('private', [ - 'type' => 'number', - ]) - ->save(); -} diff --git a/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php b/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php index a677bd29f316..2e584f3b8260 100644 --- a/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php +++ b/core/modules/node/tests/src/Functional/NodeAccessBaseTableTest.php @@ -7,6 +7,7 @@ use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\Language\LanguageInterface; use Drupal\node\Entity\NodeType; +use Drupal\Tests\node\Traits\NodeAccessTrait; use Drupal\taxonomy\Entity\Vocabulary; use Drupal\Tests\field\Traits\EntityReferenceFieldCreationTrait; @@ -18,6 +19,7 @@ class NodeAccessBaseTableTest extends NodeTestBase { use EntityReferenceFieldCreationTrait; + use NodeAccessTrait; /** * {@inheritdoc} @@ -102,7 +104,7 @@ protected function setUp(): void { ]) ->save(); - node_access_test_add_field(NodeType::load('article')); + $this->addPrivateField(NodeType::load('article')); node_access_rebuild(); \Drupal::state()->set('node_access_test.private', TRUE); diff --git a/core/modules/node/tests/src/Functional/NodeAccessJoinTest.php b/core/modules/node/tests/src/Functional/NodeAccessJoinTest.php index fe6a8ed12f09..6b76c9471152 100644 --- a/core/modules/node/tests/src/Functional/NodeAccessJoinTest.php +++ b/core/modules/node/tests/src/Functional/NodeAccessJoinTest.php @@ -7,6 +7,7 @@ use Drupal\field\Entity\FieldConfig; use Drupal\field\Entity\FieldStorageConfig; use Drupal\node\Entity\NodeType; +use Drupal\Tests\node\Traits\NodeAccessTrait; use Drupal\user\UserInterface; use Drupal\views\Tests\ViewTestData; @@ -17,6 +18,8 @@ */ class NodeAccessJoinTest extends NodeTestBase { + use NodeAccessTrait; + /** * {@inheritdoc} */ @@ -75,7 +78,7 @@ class NodeAccessJoinTest extends NodeTestBase { protected function setUp(): void { parent::setUp(); - node_access_test_add_field(NodeType::load('article')); + $this->addPrivateField(NodeType::load('article')); $field_storage = FieldStorageConfig::create([ 'field_name' => 'related_article', diff --git a/core/modules/node/tests/src/Functional/NodeAccessRebuildNodeGrantsTest.php b/core/modules/node/tests/src/Functional/NodeAccessRebuildNodeGrantsTest.php index 5d8a68a37b02..da9dccecef04 100644 --- a/core/modules/node/tests/src/Functional/NodeAccessRebuildNodeGrantsTest.php +++ b/core/modules/node/tests/src/Functional/NodeAccessRebuildNodeGrantsTest.php @@ -5,6 +5,7 @@ namespace Drupal\Tests\node\Functional; use Drupal\node\Entity\NodeType; +use Drupal\Tests\node\Traits\NodeAccessTrait; /** * Tests node access rebuild functions with multiple node access modules. @@ -13,6 +14,8 @@ */ class NodeAccessRebuildNodeGrantsTest extends NodeTestBase { + use NodeAccessTrait; + /** * {@inheritdoc} */ @@ -55,7 +58,7 @@ protected function setUp(): void { public function testNodeAccessRebuildNodeGrants(): void { \Drupal::service('module_installer')->install(['node_access_test']); \Drupal::state()->set('node_access_test.private', TRUE); - node_access_test_add_field(NodeType::load('page')); + $this->addPrivateField(NodeType::load('page')); $this->resetAll(); // Create 30 nodes so that _node_access_rebuild_batch_operation() has to run diff --git a/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php b/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php index d430510f2802..664d57028dd2 100644 --- a/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php +++ b/core/modules/node/tests/src/Functional/Views/BulkFormAccessTest.php @@ -6,6 +6,7 @@ use Drupal\node\Entity\Node; use Drupal\node\Entity\NodeType; +use Drupal\Tests\node\Traits\NodeAccessTrait; /** * Tests if entity access is respected on a node bulk operations form. @@ -18,6 +19,8 @@ */ class BulkFormAccessTest extends NodeTestBase { + use NodeAccessTrait; + /** * {@inheritdoc} */ @@ -53,7 +56,7 @@ protected function setUp($import_test_views = TRUE, $modules = ['node_test_views $this->accessHandler = \Drupal::entityTypeManager()->getAccessControlHandler('node'); - node_access_test_add_field(NodeType::load('article')); + $this->addPrivateField(NodeType::load('article')); // After enabling a node access module, the access table has to be rebuild. node_access_rebuild(); diff --git a/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php b/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php index 2587f69f6fab..e51519689188 100644 --- a/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php +++ b/core/modules/node/tests/src/Functional/Views/FilterNodeAccessTest.php @@ -5,6 +5,7 @@ namespace Drupal\Tests\node\Functional\Views; use Drupal\node\Entity\NodeType; +use Drupal\Tests\node\Traits\NodeAccessTrait; /** * Tests the node_access filter handler. @@ -14,6 +15,8 @@ */ class FilterNodeAccessTest extends NodeTestBase { + use NodeAccessTrait; + /** * An array of users. * @@ -46,7 +49,7 @@ protected function setUp($import_test_views = TRUE, $modules = ['node_test_views $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']); - node_access_test_add_field(NodeType::load('article')); + $this->addPrivateField(NodeType::load('article')); node_access_rebuild(); \Drupal::state()->set('node_access_test.private', TRUE); diff --git a/core/modules/node/tests/src/Kernel/NodeAccessLanguageAwareCombinationTest.php b/core/modules/node/tests/src/Kernel/NodeAccessLanguageAwareCombinationTest.php index fc56af9c9ae5..b82112c19f04 100644 --- a/core/modules/node/tests/src/Kernel/NodeAccessLanguageAwareCombinationTest.php +++ b/core/modules/node/tests/src/Kernel/NodeAccessLanguageAwareCombinationTest.php @@ -10,6 +10,7 @@ use Drupal\language\Entity\ConfigurableLanguage; use Drupal\node\Entity\NodeType; use Drupal\field\Entity\FieldStorageConfig; +use Drupal\Tests\node\Traits\NodeAccessTrait; /** * Tests node access with multiple languages and two node access modules. @@ -18,6 +19,8 @@ */ class NodeAccessLanguageAwareCombinationTest extends NodeAccessTestBase { + use NodeAccessTrait; + /** * Enable language and two node access modules. * @@ -56,7 +59,7 @@ class NodeAccessLanguageAwareCombinationTest extends NodeAccessTestBase { protected function setUp(): void { parent::setUp(); - node_access_test_add_field(NodeType::load('page')); + $this->addPrivateField(NodeType::load('page')); // Create the 'private' field, which allows the node to be marked as private // (restricted access) in a given translation. diff --git a/core/modules/node/tests/src/Kernel/NodeAccessLanguageTest.php b/core/modules/node/tests/src/Kernel/NodeAccessLanguageTest.php index 0c7dd55f006c..78c34a8bde27 100644 --- a/core/modules/node/tests/src/Kernel/NodeAccessLanguageTest.php +++ b/core/modules/node/tests/src/Kernel/NodeAccessLanguageTest.php @@ -8,6 +8,7 @@ use Drupal\Core\Language\LanguageInterface; use Drupal\language\Entity\ConfigurableLanguage; use Drupal\node\Entity\NodeType; +use Drupal\Tests\node\Traits\NodeAccessTrait; /** * Tests multilingual node access with a module that is not language-aware. @@ -16,6 +17,8 @@ */ class NodeAccessLanguageTest extends NodeAccessTestBase { + use NodeAccessTrait; + /** * {@inheritdoc} */ @@ -27,7 +30,7 @@ class NodeAccessLanguageTest extends NodeAccessTestBase { protected function setUp(): void { parent::setUp(); - node_access_test_add_field(NodeType::load('page')); + $this->addPrivateField(NodeType::load('page')); // After enabling a node access module, the access table has to be rebuild. node_access_rebuild(); diff --git a/core/modules/node/tests/src/Traits/NodeAccessTrait.php b/core/modules/node/tests/src/Traits/NodeAccessTrait.php new file mode 100644 index 000000000000..fff2a5e16d10 --- /dev/null +++ b/core/modules/node/tests/src/Traits/NodeAccessTrait.php @@ -0,0 +1,52 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\Tests\node\Traits; + +use Drupal\field\Entity\FieldConfig; +use Drupal\field\Entity\FieldStorageConfig; +use Drupal\node\NodeTypeInterface; + +/** + * Trait for node permission testing. + * + * This trait is meant to be used only by test classes. + */ +trait NodeAccessTrait { + + /** + * Adds the private field to a node type. + * + * @param \Drupal\node\NodeTypeInterface $type + * A node type entity. + * + * @see \Drupal\node_access_test\Hook\NodeAccessTestHooks::nodeGrants() + * @see \Drupal\Tests\node\Functional\NodeQueryAlterTest + * @see \Drupal\Tests\node\Functional\NodeAccessBaseTableTest + */ + public function addPrivateField(NodeTypeInterface $type): void { + $field_storage = FieldStorageConfig::create([ + 'field_name' => 'private', + 'entity_type' => 'node', + 'type' => 'integer', + ]); + $field_storage->save(); + $field = FieldConfig::create([ + 'field_name' => 'private', + 'entity_type' => 'node', + 'bundle' => $type->id(), + 'label' => 'Private', + ]); + $field->save(); + + // Assign widget settings for the 'default' form mode. + \Drupal::service('entity_display.repository') + ->getFormDisplay('node', $type->id()) + ->setComponent('private', [ + 'type' => 'number', + ]) + ->save(); + } + +} diff --git a/core/modules/system/tests/src/Functional/Module/PrepareUninstallTest.php b/core/modules/system/tests/src/Functional/Module/PrepareUninstallTest.php index 664901a1963a..b0982f77df75 100644 --- a/core/modules/system/tests/src/Functional/Module/PrepareUninstallTest.php +++ b/core/modules/system/tests/src/Functional/Module/PrepareUninstallTest.php @@ -5,6 +5,7 @@ namespace Drupal\Tests\system\Functional\Module; use Drupal\node\Entity\NodeType; +use Drupal\Tests\node\Traits\NodeAccessTrait; use Drupal\Tests\BrowserTestBase; use Drupal\Tests\taxonomy\Traits\TaxonomyTestTrait; @@ -16,6 +17,7 @@ class PrepareUninstallTest extends BrowserTestBase { use TaxonomyTestTrait; + use NodeAccessTrait; /** * {@inheritdoc} @@ -52,7 +54,7 @@ protected function setUp(): void { $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']); node_access_rebuild(); - node_access_test_add_field(NodeType::load('article')); + $this->addPrivateField(NodeType::load('article')); \Drupal::state()->set('node_access_test.private', TRUE); // Create 10 nodes. diff --git a/core/modules/user/tests/src/Functional/UserCancelTest.php b/core/modules/user/tests/src/Functional/UserCancelTest.php index b1a2a0b5067e..d5bdb788e6a9 100644 --- a/core/modules/user/tests/src/Functional/UserCancelTest.php +++ b/core/modules/user/tests/src/Functional/UserCancelTest.php @@ -10,6 +10,7 @@ use Drupal\language\Entity\ConfigurableLanguage; use Drupal\node\Entity\Node; use Drupal\node\Entity\NodeType; +use Drupal\Tests\node\Traits\NodeAccessTrait; use Drupal\Tests\BrowserTestBase; use Drupal\user\Entity\User; @@ -21,6 +22,7 @@ class UserCancelTest extends BrowserTestBase { use CommentTestTrait; + use NodeAccessTrait; /** * {@inheritdoc} @@ -279,7 +281,7 @@ public function testUserBlockUnpublishNodeAccess(): void { // Setup node access node_access_rebuild(); - node_access_test_add_field(NodeType::load('page')); + $this->addPrivateField(NodeType::load('page')); \Drupal::state()->set('node_access_test.private', TRUE); $this->config('user.settings')->set('cancel_method', 'user_cancel_block_unpublish')->save(); -- GitLab