domainTableIsEmpty(); // Create four new domains programmatically. $this->domainCreateTestDomains(4); // Since we cannot read the service request, we place a block // which shows the current domain token information. $this->drupalPlaceBlock('domain_token_block'); // To get around block access, let the anon user view the block. user_role_grant_permissions(AccountInterface::ANONYMOUS_ROLE, ['view domain information']); // Test the response of the default home page. foreach (\Drupal::entityTypeManager()->getStorage('domain')->loadMultiple() as $domain) { $this->drupalGet($domain->getPath()); $this->assertRaw($domain->label(), 'Loaded the proper domain.'); $this->assertRaw('Token', 'Token values printed.'); foreach ($this->tokenList() as $token => $callback) { $this->assertRaw("$token", "$token found correctly."); // The URL token is sensitive to the path, which is /user, but that // does not come across when making the callback outside of a request // context. $value = $domain->{$callback}(); if ($token == '[domain:url]') { $value = str_replace('user', '', $value); if (substr($value, -1) != '/') { $value .= '/'; } } $this->assertRaw('' . $value . '', 'Value set correctly to ' . $value); } } } /** * Gets the list of tokens and value callbacks used by the test. * * @return array * An array keyed by token string, with value of expected domain value. */ private function tokenList() { $tokens = []; foreach (\Drupal::service('domain.token')->getCallbacks() as $key => $callback) { $name = "[domain:$key]"; $tokens[$name] = $callback; } return $tokens; } }