You are here

public function DomainAccessElementTest::runInstalledTest in Domain Access 8

Basic test setup.

1 call to DomainAccessElementTest::runInstalledTest()
DomainAccessElementTest::testDomainAccessElement in domain_access/tests/src/Functional/DomainAccessElementTest.php
Test runner.

File

domain_access/tests/src/Functional/DomainAccessElementTest.php, line 50

Class

DomainAccessElementTest
Tests behavior for the domain access field element.

Namespace

Drupal\Tests\domain_access\Functional

Code

public function runInstalledTest($node_type) {
  $admin = $this
    ->drupalCreateUser([
    'bypass node access',
    'administer content types',
    'administer node fields',
    'administer node display',
    'administer domains',
    'publish to any domain',
  ]);
  $this
    ->drupalLogin($admin);
  $this
    ->drupalGet('node/add/' . $node_type);
  $this
    ->assertSession()
    ->statusCodeEquals(200);

  // Set the title, so the node can be saved.
  $this
    ->fillField('title[0][value]', 'Test node');

  // We expect to find 5 domain options. We set two as selected.
  $domains = \Drupal::entityTypeManager()
    ->getStorage('domain')
    ->loadMultiple();
  $count = 0;
  $ids = [
    'example_com',
    'one_example_com',
    'two_example_com',
  ];
  foreach ($domains as $domain) {
    $locator = DomainAccessManagerInterface::DOMAIN_ACCESS_FIELD . '[' . $domain
      ->id() . ']';
    $this
      ->findField($locator);
    if (in_array($domain
      ->id(), $ids)) {
      $this
        ->checkField($locator);
    }
  }

  // Find the all affiliates field.
  $locator = DomainAccessManagerInterface::DOMAIN_ACCESS_ALL_FIELD . '[value]';
  $this
    ->findField($locator);

  // Set all affiliates to TRUE.
  $this
    ->checkField($locator);

  // Save the form.
  $this
    ->pressButton('edit-submit');
  $this
    ->assertSession()
    ->statusCodeEquals(200);

  // Get node data. Note that we create one new node for each test case.
  $storage = \Drupal::entityTypeManager()
    ->getStorage('node');
  $nid = $node_type == 'article' ? 1 : 2;
  $node = $storage
    ->load($nid);

  // Check that two values are set.
  $manager = \Drupal::service('domain_access.manager');
  $values = $manager
    ->getAccessValues($node);
  $this
    ->assert(count($values) == 3, 'Node saved with three domain records.');
  $value = $manager
    ->getAllValue($node);
  $this
    ->assert($value == 1, 'Node saved to all affiliates.');

  // Now login as a user with limited rights.
  $account = $this
    ->drupalCreateUser([
    'create ' . $node_type . ' content',
    'edit any ' . $node_type . ' content',
    'publish to any assigned domain',
  ]);
  $ids = [
    'example_com',
    'one_example_com',
  ];
  $this
    ->addDomainsToEntity('user', $account
    ->id(), $ids, DomainAccessManagerInterface::DOMAIN_ACCESS_FIELD);
  $user_storage = \Drupal::entityTypeManager()
    ->getStorage('user');
  $user = $user_storage
    ->load($account
    ->id());
  $values = $manager
    ->getAccessValues($user);
  $this
    ->assert(count($values) == 2, 'User saved with two domain records.');
  $value = $manager
    ->getAllValue($user);
  $this
    ->assert($value == 0, 'User not saved to all affiliates.');
  $this
    ->drupalLogin($account);
  $this
    ->drupalGet('node/' . $node
    ->id() . '/edit');
  $this
    ->assertSession()
    ->statusCodeEquals(200);
  foreach ($domains as $domain) {
    $locator = DomainAccessManagerInterface::DOMAIN_ACCESS_FIELD . '[' . $domain
      ->id() . ']';
    $this
      ->findField($locator);
    if ($domain
      ->id() == 'example_com') {
      $this
        ->checkField($locator);
    }
    elseif ($domain
      ->id() == 'one_example_com') {
      $this
        ->uncheckField($locator);
    }
    else {
      $this
        ->assertSession()
        ->fieldNotExists($locator);
    }
  }
  $locator = DomainAccessManagerInterface::DOMAIN_ACCESS_ALL_FIELD . '[value]';
  $this
    ->assertSession()
    ->fieldNotExists($locator);

  // Save the form.
  $this
    ->pressButton('edit-submit');
  $this
    ->assertSession()
    ->statusCodeEquals(200);

  // Now, check the node.
  $storage
    ->resetCache([
    $node
      ->id(),
  ]);
  $node = $storage
    ->load($node
    ->id());

  // Check that two values are set.
  $values = $manager
    ->getAccessValues($node);
  $this
    ->assert(count($values) == 2, 'Node saved with two domain records.');
  $value = $manager
    ->getAllValue($node);
  $this
    ->assert($value == 1, 'Node saved to all affiliates.');
}