public function DomainSourceEntityReferenceTest::testDomainSourceFieldStorage in Domain Access 8
Tests the storage of the domain source field.
File
- domain_source/
tests/ src/ Functional/ DomainSourceEntityReferenceTest.php, line 58
Class
- DomainSourceEntityReferenceTest
- Tests the domain source entity reference field type.
Namespace
Drupal\Tests\domain_source\FunctionalCode
public function testDomainSourceFieldStorage() {
$this->admin_user = $this
->drupalCreateUser([
'administer content types',
'administer node fields',
'administer node display',
'administer domains',
'administer menu',
]);
$this
->drupalLogin($this->admin_user);
// Create 5 domains.
$this
->domainCreateTestDomains(5);
// Visit the article field display administration page.
$this
->drupalGet('node/add/article');
$this
->assertResponse(200);
// Check the new field exists on the page.
$this
->assertText('Domain Source', 'Found the domain field instance.');
// We expect to find 5 domain options + none.
$domains = \Drupal::entityTypeManager()
->getStorage('domain')
->loadMultiple();
foreach ($domains as $domain) {
$string = 'value="' . $domain
->id() . '"';
$this
->assertRaw($string, 'Found the domain option.');
if (!isset($one)) {
$one = $domain
->id();
continue;
}
if (!isset($two)) {
$two = $domain
->id();
$two_path = $domain
->getPath();
}
}
$this
->assertRaw('value="_none"', 'Found the _none_ option.');
$node_storage = \Drupal::entityTypeManager()
->getStorage('node');
// Try to post a node, assigned to the second domain.
$edit['title[0][value]'] = 'Test node';
$edit['field_domain_source'] = $two;
$this
->drupalGet('node/add/article');
$this
->submitForm($edit, 'Save');
$this
->assertResponse(200);
$node = $node_storage
->load(1);
// Check that the value is set.
$value = domain_source_get($node);
$this
->assertEquals($two, $value, 'Node saved with proper source record.');
// Test the URL.
$url = $node
->toUrl()
->toString();
$expected_url = $two_path . 'node/1';
$this
->assertEquals($expected_url, $url, 'URL rewritten correctly.');
// Try to post a node, assigned to no domain.
$edit['title[0][value]'] = 'Test node';
$edit["field_domain_source"] = '_none';
$this
->drupalGet('node/add/article');
$this
->submitForm($edit, 'Save');
$this
->assertResponse(200);
$node = $node_storage
->load(2);
// Check that the value is set.
$value = domain_source_get($node);
$this
->assertNull($value, 'Node saved with proper source record.');
// Test the url.
$url = $node
->toUrl()
->toString();
$expected_url = base_path() . 'node/2';
$this
->assertEquals($expected_url, $url, 'URL rewritten correctly.');
// Place the menu block.
$this
->drupalPlaceBlock('system_menu_block:main');
// Enable main menu as available menu.
$edit = [
'menu_options[main]' => 1,
'menu_parent' => 'main:',
];
$this
->drupalGet('admin/structure/types/manage/article');
$this
->submitForm($edit, 'Save content type');
// Create a third node that is assigned to a menu.
$edit = [
'title[0][value]' => 'Node 3',
'menu[enabled]' => 1,
'menu[title]' => 'Test preview',
'field_domain_source' => $two,
];
$this
->drupalGet('node/add/article');
$this
->submitForm($edit, 'Save');
// Test the URL against expectations, and the rendered menu link.
$node = $node_storage
->load(3);
$url = $node
->toUrl()
->toString();
$expected_url = $two_path . 'node/3';
$this
->assertEquals($expected_url, $url, 'URL rewritten correctly.');
// Load the page with a menu and check that link.
$this
->drupalGet('node/3');
$this
->assertRaw('href="' . $url, 'Menu link rewritten correctly.');
// Remove the field from the node type and make sure nothing breaks.
// See https://www.drupal.org/node/2892612
$id = 'node.article.field_domain_source';
if ($field = \Drupal::entityTypeManager()
->getStorage('field_config')
->load($id)) {
$field
->delete();
field_purge_batch(10, $field
->uuid());
drupal_flush_all_caches();
}
// Visit the article field display administration page.
$this
->drupalGet('node/add/article');
$this
->assertResponse(200);
// Try to post a node, assigned to no domain.
$edit2['title[0][value]'] = 'Test node';
$this
->drupalGet('node/add/article');
$this
->submitForm($edit2, 'Save');
// Test the URL against expectations, and the rendered menu link.
$node = $node_storage
->load(4);
$url = $node
->toUrl()
->toString();
$expected_url = base_path() . 'node/4';
$this
->assertEquals($expected_url, $url, 'No URL rewrite performed.');
}