class FieldAccessTest

Same name in this branch
  1. 9 core/tests/Drupal/KernelTests/Core/Field/FieldAccessTest.php \Drupal\KernelTests\Core\Field\FieldAccessTest
Same name and namespace in other branches
  1. 11.x core/modules/field/tests/src/Functional/FieldAccessTest.php \Drupal\Tests\field\Functional\FieldAccessTest
  2. 11.x core/tests/Drupal/KernelTests/Core/Field/FieldAccessTest.php \Drupal\KernelTests\Core\Field\FieldAccessTest
  3. 10 core/modules/field/tests/src/Functional/FieldAccessTest.php \Drupal\Tests\field\Functional\FieldAccessTest
  4. 10 core/tests/Drupal/KernelTests/Core/Field/FieldAccessTest.php \Drupal\KernelTests\Core\Field\FieldAccessTest
  5. 8.9.x core/modules/field/tests/src/Functional/FieldAccessTest.php \Drupal\Tests\field\Functional\FieldAccessTest
  6. 8.9.x core/tests/Drupal/KernelTests/Core/Field/FieldAccessTest.php \Drupal\KernelTests\Core\Field\FieldAccessTest

Tests Field access.

@group field

Hierarchy

Expanded class hierarchy of FieldAccessTest

File

core/modules/field/tests/src/Functional/FieldAccessTest.php, line 13

Namespace

Drupal\Tests\field\Functional
View source
class FieldAccessTest extends FieldTestBase {
  
  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = [
    'node',
    'field_test',
  ];
  
  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';
  
  /**
   * Node entity to use in this test.
   *
   * @var \Drupal\node\Entity\Node
   */
  protected $node;
  
  /**
   * Field value to test display on nodes.
   *
   * @var string
   */
  protected $testViewFieldValue;
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $web_user = $this->drupalCreateUser([
      'view test_view_field content',
    ]);
    $this->drupalLogin($web_user);
    // Create content type.
    $content_type_info = $this->drupalCreateContentType();
    $content_type = $content_type_info->id();
    $field_storage = [
      'field_name' => 'test_view_field',
      'entity_type' => 'node',
      'type' => 'text',
    ];
    FieldStorageConfig::create($field_storage)->save();
    $field = [
      'field_name' => $field_storage['field_name'],
      'entity_type' => 'node',
      'bundle' => $content_type,
    ];
    FieldConfig::create($field)->save();
    // Assign display properties for the 'default' and 'teaser' view modes.
    foreach ([
      'default',
      'teaser',
    ] as $view_mode) {
      \Drupal::service('entity_display.repository')->getViewDisplay('node', $content_type, $view_mode)
        ->setComponent($field_storage['field_name'])
        ->save();
    }
    // Create test node.
    $this->testViewFieldValue = 'This is some text';
    $settings = [];
    $settings['type'] = $content_type;
    $settings['title'] = 'Field view access test';
    $settings['test_view_field'] = [
      [
        'value' => $this->testViewFieldValue,
      ],
    ];
    $this->node = $this->drupalCreateNode($settings);
  }
  
  /**
   * Tests that hook_entity_field_access() is called.
   */
  public function testFieldAccess() {
    // Assert the text is visible.
    $this->drupalGet('node/' . $this->node
      ->id());
    $this->assertSession()
      ->pageTextContains($this->testViewFieldValue);
    // Assert the text is not visible for anonymous users.
    // The field_test module implements hook_entity_field_access() which will
    // specifically target the 'test_view_field' field.
    $this->drupalLogout();
    $this->drupalGet('node/' . $this->node
      ->id());
    $this->assertSession()
      ->pageTextNotContains($this->testViewFieldValue);
  }

}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.