View source
<?php
namespace Drupal\Tests\metatag\Functional;
use Drupal\metatag\MetatagManager;
use Drupal\metatag\Entity\MetatagDefaults;
use Drupal\Tests\BrowserTestBase;
use Drupal\Core\StringTranslation\StringTranslationTrait;
class MetatagAdminTest extends BrowserTestBase {
use MetatagHelperTrait;
use StringTranslationTrait;
protected static $modules = [
'block',
'block_content',
'comment',
'contact',
'field_ui',
'menu_link_content',
'menu_ui',
'node',
'shortcut',
'taxonomy',
'entity_test',
'test_page_test',
'token',
'metatag',
];
protected $defaultTheme = 'stark';
protected function setUp() {
parent::setUp();
$this
->config('system.site')
->set('page.front', '/test-page')
->save();
if ($this->profile != 'standard') {
$this
->drupalCreateContentType([
'type' => 'page',
'name' => 'Basic page',
'display_submitted' => FALSE,
]);
$this
->drupalCreateContentType([
'type' => 'article',
'name' => 'Article',
]);
}
}
public function testDefaults() {
$metatag_defaults = \Drupal::config('metatag.metatag_defaults.global');
$default_title = $metatag_defaults
->get('tags')['title'];
$permissions = [
'administer site configuration',
'administer meta tags',
];
$account = $this
->drupalCreateUser($permissions);
$this
->drupalLogin($account);
$this
->drupalGet('admin/config/search/metatag');
$session = $this
->assertSession();
$session
->statusCodeEquals(200);
$session
->linkByHrefExists('admin/config/search/metatag/global');
$session
->linkByHrefNotExists('admin/config/search/metatag/global/delete');
$session
->linkByHrefNotExists('admin/config/search/metatag/node/delete');
$this
->drupalGet('admin/config/search/metatag/global');
$session
->statusCodeEquals(200);
$this
->assertFieldById('edit-title', $metatag_defaults
->get('title'), $this
->t('Metatag defaults were injected into the Global configuration entity.'));
$this
->drupalGet('admin/config/search/metatag/global');
$session
->statusCodeEquals(200);
$values = [
'title' => 'Test title',
'description' => 'Test description',
];
$this
->drupalPostForm(NULL, $values, 'Save');
$session
->pageTextContains('Saved the Global Metatag defaults.');
$this
->drupalGet('hit-a-404');
$session
->statusCodeEquals(404);
foreach ($values as $metatag => $value) {
$session
->responseContains($value, $this
->t('Updated metatag @tag was found in the HEAD section of the page.', [
'@tag' => $metatag,
]));
}
$this
->drupalGet('admin/config/search/metatag/global');
$session
->statusCodeEquals(200);
$values = [
'title' => '[site:name] | Test title',
'description' => '[site:name] | Test description',
];
$this
->drupalPostForm(NULL, $values, 'Save');
$session
->pageTextContains('Saved the Global Metatag defaults.');
drupal_flush_all_caches();
$this
->drupalGet('hit-a-404');
$session
->statusCodeEquals(404);
foreach ($values as $metatag => $value) {
$processed_value = \Drupal::token()
->replace($value);
$session
->responseContains($processed_value, $this
->t('Processed token for metatag @tag was found in the HEAD section of the page.', [
'@tag' => $metatag,
]));
}
$this
->drupalGet('admin/config/search/metatag/global');
$session
->statusCodeEquals(200);
$robots_values = [
'index',
'follow',
'noydir',
];
$values = [];
foreach ($robots_values as $value) {
$values['robots[' . $value . ']'] = TRUE;
}
$this
->drupalPostForm(NULL, $values, 'Save');
$session
->pageTextContains('Saved the Global Metatag defaults.');
drupal_flush_all_caches();
$this
->drupalGet('hit-a-404');
$session
->statusCodeEquals(404);
$robots_value = implode(', ', $robots_values);
$session
->responseContains($robots_value, $this
->t('Robots metatag has the expected values.'));
$this
->drupalGet('admin/config/search/metatag/global/revert');
$session
->statusCodeEquals(200);
$this
->drupalPostForm(NULL, [], 'Revert');
$session
->pageTextContains('Reverted Global defaults.');
$session
->pageTextContains($default_title);
$this
->drupalLogout();
}
public function testAvailableConfigEntities() {
$permissions = [
'administer site configuration',
'administer meta tags',
];
$account = $this
->drupalCreateUser($permissions);
$this
->drupalLogin($account);
$this
->drupalGet('admin/config/search/metatag/add');
$session = $this
->assertSession();
$session
->statusCodeEquals(200);
$session
->fieldExists('id');
$options = $this
->cssSelect('select[name="id"] option');
$types = [];
foreach ($options as $option) {
$types[$option
->getAttribute('value')] = $option
->getAttribute('value');
}
$this
->assertArrayNotHasKey('block_content', $types, 'Custom block entities are not supported.');
$this
->assertArrayNotHasKey('comment', $types, 'Comment entities are not supported.');
$this
->assertArrayNotHasKey('menu_link_content', $types, 'Menu link entities are not supported.');
$this
->assertArrayNotHasKey('shortcut', $types, 'Shortcut entities are not supported.');
$this
->assertArrayHasKey('node__page', $types, 'Nodes are supported.');
$this
->assertArrayHasKey('user__user', $types, 'Users are supported.');
$this
->assertArrayHasKey('entity_test', $types, 'Test entities are supported.');
}
public function testSpecialPages() {
$permissions = [
'administer site configuration',
'administer meta tags',
];
$account = $this
->drupalCreateUser($permissions);
$this
->drupalLogin($account);
$this
->drupalGet('admin/config/search/metatag/front');
$session = $this
->assertSession();
$session
->statusCodeEquals(200);
$values = [
'description' => 'Front page description',
];
$this
->drupalPostForm(NULL, $values, 'Save');
$session
->pageTextContains('Saved the Front page Metatag defaults.');
$this
->drupalGet('<front>');
$session
->statusCodeEquals(200);
$session
->responseContains($values['description'], $this
->t('Front page defaults are used at the front page.'));
$this
->drupalGet('admin/config/search/metatag/403');
$session
->statusCodeEquals(200);
$values = [
'description' => '403 page description.',
];
$this
->drupalPostForm(NULL, $values, 'Save');
$session
->pageTextContains('Saved the 403 access denied Metatag defaults.');
$this
->drupalLogout();
$this
->drupalGet('admin/config/search/metatag');
$session
->statusCodeEquals(403);
$session
->responseContains($values['description'], $this
->t('403 page defaults are used at 403 pages.'));
$this
->drupalLogin($account);
$this
->drupalGet('admin/config/search/metatag/404');
$session
->statusCodeEquals(200);
$values = [
'description' => '404 page description.',
];
$this
->drupalPostForm(NULL, $values, 'Save');
$session
->pageTextContains('Saved the 404 page not found Metatag defaults.');
$this
->drupalGet('foo');
$session
->statusCodeEquals(404);
$session
->responseContains($values['description'], $this
->t('404 page defaults are used at 404 pages.'));
$this
->drupalLogout();
}
public function testOverrides() {
$permissions = [
'administer site configuration',
'administer meta tags',
'access content',
'create article content',
'administer nodes',
'create article content',
'create page content',
];
$account = $this
->drupalCreateUser($permissions);
$this
->drupalLogin($account);
$this
->drupalGet('admin/config/search/metatag/node');
$session = $this
->assertSession();
$session
->statusCodeEquals(200);
$values = [
'title' => 'Test title for a node.',
'description' => 'Test description for a node.',
];
$this
->drupalPostForm(NULL, $values, 'Save');
$session
->pageTextContains('Saved the Content Metatag defaults.');
$node = $this
->drupalCreateNode([
'title' => $this
->t('Hello, world!'),
'type' => 'article',
]);
$this
->drupalGet('node/' . $node
->id());
$session
->statusCodeEquals(200);
foreach ($values as $metatag => $value) {
$session
->responseContains($value, $this
->t('Node metatag @tag overrides Global defaults.', [
'@tag' => $metatag,
]));
}
$this
->drupalGet('admin/config/search/metatag/node');
$session
->statusCodeEquals(200);
$values = [
'title' => '',
'description' => '',
];
$this
->drupalPostForm(NULL, $values, 'Save');
$session
->pageTextContains('Saved the Content Metatag defaults.');
$this
->drupalGet('admin/config/search/metatag/global');
$session
->statusCodeEquals(200);
$values = [
'title' => 'Global title',
'description' => 'Global description',
];
$this
->drupalPostForm(NULL, $values, 'Save');
$session
->pageTextContains('Saved the Global Metatag defaults.');
$node = $this
->drupalCreateNode([
'title' => $this
->t('Hello, world!'),
'type' => 'article',
]);
$this
->drupalGet('node/' . $node
->id());
$session
->statusCodeEquals(200);
foreach ($values as $metatag => $value) {
$session
->responseContains($value, $this
->t('Found global @tag tag as Node does not set it.', [
'@tag' => $metatag,
]));
}
$this
->drupalGet('admin/config/search/metatag/add');
$session
->statusCodeEquals(200);
$values = [
'id' => 'node__article',
'title' => 'Article title override',
'description' => 'Article description override',
];
$this
->drupalPostForm(NULL, $values, 'Save');
$session
->pageTextContains(strip_tags('Created the Content: Article Metatag defaults.'));
$node = $this
->drupalCreateNode([
'title' => $this
->t('Hello, world!'),
'type' => 'article',
]);
$this
->drupalGet('node/' . $node
->id());
$session
->statusCodeEquals(200);
unset($values['id']);
foreach ($values as $metatag => $value) {
$session
->responseContains($value, $this
->t('Found bundle override for tag @tag.', [
'@tag' => $metatag,
]));
}
$this
->drupalGet('admin/config/search/metatag/node__article/delete');
$session
->statusCodeEquals(200);
$this
->drupalPostForm(NULL, [], 'Delete');
$session
->pageTextContains('Deleted Content: Article defaults.');
}
public function testEntityDefaultInheritence() {
$permissions = [
'administer site configuration',
'administer meta tags',
'access content',
'administer node fields',
'create article content',
'administer nodes',
'create article content',
'create page content',
];
$account = $this
->drupalCreateUser($permissions);
$this
->drupalLogin($account);
$this
->drupalGet('admin/structure/types/manage/article/fields/add-field');
$session = $this
->assertSession();
$session
->statusCodeEquals(200);
$edit = [
'new_storage_type' => 'metatag',
'label' => 'Meta tags',
'field_name' => 'meta_tags',
];
$this
->drupalPostForm(NULL, $edit, $this
->t('Save and continue'));
$this
->drupalPostForm(NULL, [], $this
->t('Save field settings'));
$session
->pageTextContains(strip_tags('Updated field Meta tags field settings.'));
$this
->drupalPostForm(NULL, [], $this
->t('Save settings'));
$session
->pageTextContains(strip_tags('Saved Meta tags configuration.'));
$this
->drupalGet('node/add/article');
$session
->statusCodeEquals(200);
$session
->fieldValueEquals('field_meta_tags[0][basic][title]', '[node:title] | [site:name]');
$session
->fieldValueEquals('field_meta_tags[0][basic][description]', '[node:summary]');
$this
->drupalGet('admin/config/search/metatag/add');
$session
->statusCodeEquals(200);
$values = [
'id' => 'node__article',
'title' => 'Article title override',
'description' => 'Article description override',
];
$this
->drupalPostForm(NULL, $values, 'Save');
$session
->pageTextContains(strip_tags('Created the Content: Article Metatag defaults.'));
$this
->drupalGet('node/add/article');
$session
->statusCodeEquals(200);
$session
->fieldValueEquals('field_meta_tags[0][basic][title]', 'Article title override');
$session
->fieldValueEquals('field_meta_tags[0][basic][description]', 'Article description override');
}
public function testDefaultProtected() {
$permissions = [
'administer site configuration',
'administer meta tags',
];
$account = $this
->drupalCreateUser($permissions);
$this
->drupalLogin($account);
$session = $this
->assertSession();
$edit = [
'id' => 'node__article',
];
$this
->drupalPostForm('/admin/config/search/metatag/add', $edit, 'Save');
foreach (MetatagManager::protectedDefaults() as $protected) {
$session
->linkByHrefExists('/admin/config/search/metatag/' . $protected);
$session
->linkByHrefExists('/admin/config/search/metatag/' . $protected . '/revert');
$session
->linkByHrefNotExists('/admin/config/search/metatag/' . $protected . '/delete');
}
$session
->linkByHrefExists('/admin/config/search/metatag/node__article');
$session
->linkByHrefNotExists('/admin/config/search/metatag/node__article/revert');
$session
->linkByHrefExists('/admin/config/search/metatag/node__article/delete');
foreach (MetatagManager::protectedDefaults() as $protected) {
$this
->drupalGet('/admin/config/search/metatag/' . $protected);
$session
->linkNotExists('Delete');
}
$this
->drupalGet('/admin/config/search/metatag/node__article');
$session
->linkExists('Delete');
}
public function testListPager() {
$this
->loginUser1();
$session = $this
->assertSession();
$this
->drupalGet('admin/config/search/metatag');
$session
->statusCodeEquals(200);
$session
->linkByHrefExists('/admin/config/search/metatag/global');
$session
->linkByHrefExists('/admin/config/search/metatag/front');
$session
->linkByHrefExists('/admin/config/search/metatag/403');
$session
->linkByHrefExists('/admin/config/search/metatag/404');
$session
->linkByHrefExists('/admin/config/search/metatag/node');
$session
->linkByHrefExists('/admin/config/search/metatag/taxonomy_term');
$session
->linkByHrefExists('/admin/config/search/metatag/user');
for ($i = 0; $i < 50; $i++) {
$vocabulary = $this
->createVocabulary();
MetatagDefaults::create([
'id' => 'taxonomy_term__' . $vocabulary
->id(),
'label' => 'Taxonomy term: ' . $vocabulary
->label(),
])
->save();
}
$this
->drupalGet('admin/config/search/metatag');
$session
->linkByHrefExists('/admin/config/search/metatag/global');
$session
->linkByHrefExists('/admin/config/search/metatag/front');
$session
->linkByHrefExists('/admin/config/search/metatag/403');
$session
->linkByHrefExists('/admin/config/search/metatag/404');
$session
->linkByHrefExists('/admin/config/search/metatag/node');
$session
->linkByHrefExists('/admin/config/search/metatag/taxonomy_term');
$session
->linkByHrefNotExists('/admin/config/search/metatag/user');
$this
->clickLink('Next');
$session
->linkByHrefExists('/admin/config/search/metatag/global');
$session
->linkByHrefExists('/admin/config/search/metatag/taxonomy_term');
$session
->linkByHrefNotExists('/admin/config/search/metatag/front');
$session
->linkByHrefNotExists('/admin/config/search/metatag/403');
$session
->linkByHrefNotExists('/admin/config/search/metatag/404');
$session
->linkByHrefNotExists('/admin/config/search/metatag/node');
$session
->linkByHrefExists('/admin/config/search/metatag/user');
}
}