You are here

public function DomainAliasEnvironmentTest::testDomainAliasEnvironments in Domain Access 8

Test for environment matching.

File

domain_alias/tests/src/Functional/DomainAliasEnvironmentTest.php, line 35

Class

DomainAliasEnvironmentTest
Tests behavior for the domain alias environment handler.

Namespace

Drupal\Tests\domain_alias\Functional

Code

public function testDomainAliasEnvironments() {
  $domain_storage = \Drupal::entityTypeManager()
    ->getStorage('domain');
  $alias_loader = \Drupal::entityTypeManager()
    ->getStorage('domain_alias');
  $domains = $domain_storage
    ->loadMultipleSorted(NULL, TRUE);

  // Our patterns should map to example.com, one.example.com, two.example.com.
  $patterns = [
    '*.' . $this->baseHostname,
    'four.' . $this->baseHostname,
    'five.' . $this->baseHostname,
  ];
  foreach ($domains as $domain) {
    $values = [
      'domain_id' => $domain
        ->id(),
      'pattern' => array_shift($patterns),
      'redirect' => 0,
      'environment' => 'local',
    ];
    $this
      ->createDomainAlias($values);
  }

  // Test the environment loader.
  $local = $alias_loader
    ->loadByEnvironment('local');
  $this
    ->assert(count($local) == 3, 'Three aliases set to local');

  // Test the environment matcher. $domain here is two.example.com.
  $match = $alias_loader
    ->loadByEnvironmentMatch($domain, 'local');
  $this
    ->assert(count($match) == 1, 'One environment match loaded');
  $alias = current($match);
  $this
    ->assert($alias
    ->getPattern() == 'five.' . $this->baseHostname, 'Proper pattern match loaded.');

  // Set one alias to a different environment.
  $alias
    ->set('environment', 'testing')
    ->save();
  $local = $alias_loader
    ->loadByEnvironment('local');
  $this
    ->assert(count($local) == 2, 'Two aliases set to local');

  // Test the environment matcher. $domain here is two.example.com.
  $matches = $alias_loader
    ->loadByEnvironmentMatch($domain, 'local');
  $this
    ->assert(count($matches) == 0, 'No environment matches loaded');

  // Test the environment matcher. $domain here is one.example.com.
  $domain = $domain_storage
    ->load('one_example_com');
  $matches = $alias_loader
    ->loadByEnvironmentMatch($domain, 'local');
  $this
    ->assert(count($matches) == 1, 'One environment match loaded');
  $alias = current($matches);
  $this
    ->assert($alias
    ->getPattern() == 'four.' . $this->baseHostname, 'Proper pattern match loaded.');

  // Now load a page and check things.
  // Since we cannot read the service request, we place a block
  // which shows links to all domains.
  $this
    ->drupalPlaceBlock('domain_switcher_block');

  // To get around block access, let the anon user view the block.
  user_role_grant_permissions(RoleInterface::ANONYMOUS_ID, [
    'administer domains',
  ]);

  // For a non-aliased request, the url list should be normal.
  $this
    ->drupalGet($domain
    ->getPath());
  foreach ($domains as $domain) {
    $this
      ->assertSession()
      ->assertEscaped($domain
      ->getHostname());
    $this
      ->assertSession()
      ->linkByHrefExists($domain
      ->getPath(), 0, 'Link found: ' . $domain
      ->getPath());
  }

  // For an aliased request (four.example.com), the list should be aliased.
  $url = $domain
    ->getScheme() . $alias
    ->getPattern();
  $this
    ->drupalGet($url);
  foreach ($matches as $match) {
    $this
      ->assertSession()
      ->assertEscaped($match
      ->getPattern());
  }
}