View source
<?php
namespace Drupal\Tests\domain\Functional;
use Drupal\domain\DomainInterface;
class DomainListBuilderTest extends DomainTestBase {
public static $modules = [
'domain',
'user',
];
protected function setUp() {
parent::setUp();
$this
->domainCreateTestDomains(150);
}
public function testDomainListBuilder() {
$admin = $this
->drupalCreateUser([
'bypass node access',
'administer content types',
'administer node fields',
'administer node display',
'administer domains',
]);
$this
->drupalLogin($admin);
$this
->drupalGet('admin/config/domain');
$this
->assertSession()
->statusCodeEquals(200);
foreach ($this
->getPaginatedDomains() as $domain) {
$href = 'admin/config/domain/edit/' . $domain
->id();
$this
->assertSession()
->linkByHrefExists($href, 0, 'Link found ' . $href);
$this
->assertSession()
->assertEscaped($domain
->label());
$this
->checkPagination();
}
$this
->clickLink('Next');
foreach ($this
->getPaginatedDomains(1) as $domain) {
$href = 'admin/config/domain/edit/' . $domain
->id();
$this
->assertSession()
->linkByHrefExists($href, 0, 'Link found ' . $href);
$this
->assertSession()
->assertEscaped($domain
->label());
$this
->checkPagination();
}
$account = $this
->drupalCreateUser([
'create article content',
'edit any article content',
'edit assigned domains',
'view domain list',
]);
$ids = [
'example_com',
'one_example_com',
];
$this
->addDomainsToEntity('user', $account
->id(), $ids, DomainInterface::DOMAIN_ADMIN_FIELD);
$user_storage = \Drupal::entityTypeManager()
->getStorage('user');
$user = $user_storage
->load($account
->id());
$manager = \Drupal::service('domain.element_manager');
$values = $manager
->getFieldValues($user, DomainInterface::DOMAIN_ADMIN_FIELD);
$this
->assert(count($values) == 2, 'User saved with two domain records.');
$this
->drupalLogin($account);
$this
->drupalGet('admin/config/domain');
$this
->assertSession()
->statusCodeEquals(200);
$path = 'admin/config/domain';
$this
->drupalGet($path);
foreach ($this
->getPaginatedDomains() as $domain) {
$href = 'admin/config/domain/edit/' . $domain
->id();
if (in_array($domain
->id(), $ids)) {
$this
->assertSession()
->linkByHrefExists($href, 0, 'Link found');
$this
->assertSession()
->assertEscaped($domain
->label());
}
else {
$this
->assertSession()
->linkByHrefNotExists($href, 'Link not found');
$this
->assertSession()
->assertEscaped($domain
->label());
}
$this
->checkPagination();
}
foreach ($this
->getPaginatedDomains() as $domain) {
$path = 'admin/config/domain/edit/' . $domain
->id();
$this
->drupalGet($path);
if (in_array($domain
->id(), $ids)) {
$this
->assertSession()
->statusCodeEquals(200);
}
else {
$this
->assertSession()
->statusCodeEquals(403);
}
}
$this
->drupalGet('admin/config/domain');
$this
->clickLink('Next');
foreach ($this
->getPaginatedDomains(1) as $domain) {
$href = 'admin/config/domain/edit/' . $domain
->id();
if (in_array($domain
->id(), $ids)) {
$this
->assertSession()
->linkByHrefExists($href, 0, 'Link found');
$this
->assertSession()
->assertEscaped($domain
->label());
}
else {
$this
->assertSession()
->linkByHrefNotExists($href, 'Link not found');
$this
->assertSession()
->assertEscaped($domain
->label());
}
$this
->checkPagination();
}
$account2 = $this
->drupalCreateUser([
'create article content',
'edit any article content',
'edit assigned domains',
'view assigned domains',
]);
$ids = [
'example_com',
'one_example_com',
];
$this
->addDomainsToEntity('user', $account2
->id(), $ids, DomainInterface::DOMAIN_ADMIN_FIELD);
$user_storage = \Drupal::entityTypeManager()
->getStorage('user');
$user = $user_storage
->load($account2
->id());
$manager = \Drupal::service('domain.element_manager');
$values = $manager
->getFieldValues($user, DomainInterface::DOMAIN_ADMIN_FIELD);
$this
->assert(count($values) == 2, 'User saved with two domain records.');
$this
->drupalLogin($account2);
$this
->drupalGet('admin/config/domain');
$this
->assertSession()
->statusCodeEquals(200);
$path = 'admin/config/domain';
$this
->drupalGet($path);
foreach ($this
->getPaginatedDomains() as $domain) {
$href = 'admin/config/domain/edit/' . $domain
->id();
if (in_array($domain
->id(), $ids)) {
$this
->assertSession()
->linkByHrefExists($href, 0, 'Link found');
$this
->assertSession()
->assertEscaped($domain
->label());
}
else {
$this
->assertSession()
->linkByHrefNotExists($href, 'Link not found');
$this
->assertSession()
->assertNoEscaped($domain
->label());
}
$this
->checkNoPagination();
}
foreach ($this
->getPaginatedDomains() as $domain) {
$path = 'admin/config/domain/edit/' . $domain
->id();
$this
->drupalGet($path);
if (in_array($domain
->id(), $ids)) {
$this
->assertSession()
->statusCodeEquals(200);
}
else {
$this
->assertSession()
->statusCodeEquals(403);
}
}
}
private function getPaginatedDomains($page = 0) {
$limit = 50;
$offset = $page * $limit;
return array_slice($this
->getDomainsSorted(), $offset, $limit);
}
private function checkPagination() {
foreach ([
'?page=0',
'?page=1',
'?page=2',
] as $href) {
$this
->assertSession()
->linkByHrefExists($href, 0, 'Link found');
}
}
private function checkNoPagination() {
foreach ([
'?page=0',
'?page=1',
'?page=2',
] as $href) {
$this
->assertSession()
->linkByHrefNotExists($href, 0, 'Link not found');
}
}
}