function NodeAccessLanguageTest::testNodeAccess

Runs tests for node_access function with multiple languages.

File

drupal/core/modules/node/lib/Drupal/node/Tests/NodeAccessLanguageTest.php, line 54
Definition of Drupal\node\Tests\NodeAccessLanguageTest.

Class

NodeAccessLanguageTest
Verifies node_access() functionality for multiple languages.

Namespace

Drupal\node\Tests

Code

function testNodeAccess() {

  // Add Hungarian and Catalan.
  $language = new Language(array(
    'langcode' => 'hu',
  ));
  language_save($language);
  $language = new Language(array(
    'langcode' => 'ca',
  ));
  language_save($language);

  // Tests the default access provided for a published Hungarian node.
  $web_user = $this
    ->drupalCreateUser(array(
    'access content',
  ));
  $node = $this
    ->drupalCreateNode(array(
    'body' => array(
      'hu' => array(
        array(),
      ),
    ),
    'langcode' => 'hu',
  ));
  $this
    ->assertTrue($node->langcode == 'hu', 'Node created as Hungarian.');
  $expected_node_access = array(
    'view' => TRUE,
    'update' => FALSE,
    'delete' => FALSE,
  );
  $this
    ->assertNodeAccess($expected_node_access, $node, $web_user);

  // Tests that Hungarian provided specifically results in the same.
  $this
    ->assertNodeAccess($expected_node_access, $node, $web_user, 'hu');

  // There is no specific Catalan version of this node and Croatian is not
  // even set up on the system in this scenario, so these languages will not
  // play a role in the node's permissions.
  $this
    ->assertNodeAccess($expected_node_access, $node, $web_user, 'ca');
  $this
    ->assertNodeAccess($expected_node_access, $node, $web_user, 'hr');

  // Reset the node access cache and turn on our test node_access() code.
  drupal_static_reset('node_access');
  variable_set('node_access_test_secret_catalan', 1);

  // Tests that Hungarian is still accessible.
  $this
    ->assertNodeAccess($expected_node_access, $node, $web_user, 'hu');

  // Tests that Catalan is not accessible anymore.
  $this
    ->assertNodeAccess(array(
    'view' => FALSE,
    'update' => FALSE,
    'delete' => FALSE,
  ), $node, $web_user, 'ca');
}