config('system.site')->set('page.front', '/test-page')->save(); // Create Basic page and Article node types. if ($this->profile != 'standard') { $this->drupalCreateContentType([ 'type' => 'page', 'name' => 'Basic page', 'display_submitted' => FALSE, ]); $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']); } } /** * Tests the interface to manage metatag defaults. */ public function testDefaults() { // Save the default title to test the Revert operation at the end. $metatag_defaults = \Drupal::config('metatag.metatag_defaults.global'); $default_title = $metatag_defaults->get('tags')['title']; // Initiate session with a user who can manage metatags. $permissions = ['administer site configuration', 'administer meta tags']; $account = $this->drupalCreateUser($permissions); $this->drupalLogin($account); // Check that the user can see the list of metatag defaults. $this->drupalGet('admin/config/search/metatag'); $this->assertResponse(200); // Check that the Global defaults were created. $this->assertLinkByHref('admin/config/search/metatag/global', 0, t('Global defaults were created on installation.')); // Check that Global and entity defaults can't be deleted. $this->assertNoLinkByHref('admin/config/search/metatag/global/delete', 0, t('Global defaults can\'t be deleted')); $this->assertNoLinkByHref('admin/config/search/metatag/node/delete', 0, t('Entity defaults can\'t be deleted')); // Check that the module defaults were injected into the Global config // entity. $this->drupalGet('admin/config/search/metatag/global'); $this->assertResponse(200); $this->assertFieldById('edit-title', $metatag_defaults->get('title'), t('Metatag defaults were injected into the Global configuration entity.')); // Update the Global defaults and test them. $this->drupalGet('admin/config/search/metatag/global'); $this->assertResponse(200); $values = [ 'title' => 'Test title', 'description' => 'Test description', ]; $this->drupalPostForm(NULL, $values, 'Save'); $this->assertText('Saved the Global Metatag defaults.'); $this->drupalGet('hit-a-404'); $this->assertResponse(404); foreach ($values as $metatag => $value) { $this->assertRaw($value, t('Updated metatag @tag was found in the HEAD section of the page.', ['@tag' => $metatag])); } // Check that tokens are processed. $this->drupalGet('admin/config/search/metatag/global'); $this->assertResponse(200); $values = [ 'title' => '[site:name] | Test title', 'description' => '[site:name] | Test description', ]; $this->drupalPostForm(NULL, $values, 'Save'); $this->assertText('Saved the Global Metatag defaults.'); drupal_flush_all_caches(); $this->drupalGet('hit-a-404'); $this->assertResponse(404); foreach ($values as $metatag => $value) { $processed_value = \Drupal::token()->replace($value); $this->assertRaw($processed_value, t('Processed token for metatag @tag was found in the HEAD section of the page.', ['@tag' => $metatag])); } // Test the Robots plugin. $this->drupalGet('admin/config/search/metatag/global'); $this->assertResponse(200); $robots_values = ['index', 'follow', 'noydir']; $values = []; foreach ($robots_values as $value) { $values['robots[' . $value . ']'] = TRUE; } $this->drupalPostForm(NULL, $values, 'Save'); $this->assertText('Saved the Global Metatag defaults.'); drupal_flush_all_caches(); // Trigger a 404 request. $this->drupalGet('hit-a-404'); $this->assertResponse(404); $robots_value = implode(', ', $robots_values); $this->assertRaw($robots_value, t('Robots metatag has the expected values.')); // Test reverting global configuration to its defaults. $this->drupalGet('admin/config/search/metatag/global/revert'); $this->assertResponse(200); $this->drupalPostForm(NULL, [], 'Revert'); $this->assertText('Reverted Global defaults.'); $this->assertText($default_title, 'Global title was reverted to its default value.'); $this->drupalLogout(); } /** * Confirm the available entity types show on the add-default page. */ public function testAvailableConfigEntities() { // Initiate session with a user who can manage metatags. $permissions = [ 'administer site configuration', 'administer meta tags', ]; $account = $this->drupalCreateUser($permissions); $this->drupalLogin($account); // Load the default-add page. $this->drupalGet('admin/config/search/metatag/add'); $this->assertResponse(200); // Confirm the 'type' field exists. $this->assertFieldByName('id'); // Compile a list of entities from the list. $xpath = $this->xpath("//select[@name='id']"); $this->verbose('
' . print_r($xpath, TRUE) . '
'); $types = []; foreach ($xpath[0]->children() as $item) { if (!empty($item->option)) { $data = (array)$item->option; // $this->verbose('
' . print_r($data, TRUE) . '
'); $types[$data['@attributes']['value']] = $data[0]; } } $this->verbose('
' . print_r($types, TRUE) . '
'); // Check through the values that are in the 'select' list, make sure that // unwanted items are not present. $this->assertFalse(isset($types['block_content']), 'Custom block entities are not supported.'); $this->assertFalse(isset($types['comment']), 'Comment entities are not supported.'); $this->assertFalse(isset($types['menu_link_content']), 'Menu link entities are not supported.'); $this->assertFalse(isset($types['shortcut']), 'Shortcut entities are not supported.'); $this->assertTrue(isset($types['node__page']), 'Nodes are supported.'); $this->assertTrue(isset($types['user__user']), 'Users are supported.'); $this->assertTrue(isset($types['entity_test']), 'Test entities are supported.'); } /** * Tests special pages. */ public function testSpecialPages() { // Initiate session with a user who can manage metatags. $permissions = ['administer site configuration', 'administer meta tags']; $account = $this->drupalCreateUser($permissions); $this->drupalLogin($account); // Adjust the front page and test it. $this->drupalGet('admin/config/search/metatag/front'); $this->assertResponse(200); $values = [ 'description' => 'Front page description', ]; $this->drupalPostForm(NULL, $values, 'Save'); $this->assertText('Saved the Front page Metatag defaults.'); $this->drupalGet(''); $this->assertResponse(200); $this->assertRaw($values['description'], t('Front page defaults are used at the front page.')); // Adjust the 403 page and test it. $this->drupalGet('admin/config/search/metatag/403'); $this->assertResponse(200); $values = [ 'description' => '403 page description.', ]; $this->drupalPostForm(NULL, $values, 'Save'); $this->assertText('Saved the 403 access denied Metatag defaults.'); $this->drupalLogout(); $this->drupalGet('admin/config/search/metatag'); $this->assertResponse(403); $this->assertRaw($values['description'], t('403 page defaults are used at 403 pages.')); // Adjust the 404 page and test it. $this->drupalLogin($account); $this->drupalGet('admin/config/search/metatag/404'); $this->assertResponse(200); $values = [ 'description' => '404 page description.', ]; $this->drupalPostForm(NULL, $values, 'Save'); $this->assertText('Saved the 404 page not found Metatag defaults.'); $this->drupalGet('foo'); $this->assertResponse(404); $this->assertRaw($values['description'], t('404 page defaults are used at 404 pages.')); $this->drupalLogout(); } /** * Tests entity and bundle overrides. */ public function testOverrides() { // Initiate session with a user who can manage metatags. $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); // Update the Metatag Node defaults. $this->drupalGet('admin/config/search/metatag/node'); $this->assertResponse(200); $values = [ 'title' => 'Test title for a node.', 'description' => 'Test description for a node.', ]; $this->drupalPostForm(NULL, $values, 'Save'); $this->assertText('Saved the Content Metatag defaults.'); // Create a test node. $node = $this->drupalCreateNode([ 'title' => t('Hello, world!'), 'type' => 'article', ]); // Check that the new values are found in the response. $this->drupalGet('node/' . $node->id()); $this->assertResponse(200); foreach ($values as $metatag => $value) { $this->assertRaw($value, t('Node metatag @tag overrides Global defaults.', ['@tag' => $metatag])); } /** * Check that when the node defaults don't define a metatag, the Global one * is used. */ // First unset node defaults. $this->drupalGet('admin/config/search/metatag/node'); $this->assertResponse(200); $values = [ 'title' => '', 'description' => '', ]; $this->drupalPostForm(NULL, $values, 'Save'); $this->assertText('Saved the Content Metatag defaults.'); // Then, set global ones. $this->drupalGet('admin/config/search/metatag/global'); $this->assertResponse(200); $values = [ 'title' => 'Global title', 'description' => 'Global description', ]; $this->drupalPostForm(NULL, $values, 'Save'); $this->assertText('Saved the Global Metatag defaults.'); // Next, test that global defaults are rendered since node ones are empty. // We are creating a new node as doing a get on the previous one would // return cached results. // @todo BookTest.php resets the cache of a single node, which is way more // performant than creating a node for every set of assertions. // @see BookTest::testDelete(). $node = $this->drupalCreateNode([ 'title' => t('Hello, world!'), 'type' => 'article', ]); $this->drupalGet('node/' . $node->id()); $this->assertResponse(200); foreach ($values as $metatag => $value) { $this->assertRaw($value, t('Found global @tag tag as Node does not set it.', ['@tag' => $metatag])); } // Now create article overrides and then test them. $this->drupalGet('admin/config/search/metatag/add'); $this->assertResponse(200); $values = [ 'id' => 'node__article', 'title' => 'Article title override', 'description' => 'Article description override', ]; $this->drupalPostForm(NULL, $values, 'Save'); $this->assertText(strip_tags(t('Created the %label Metatag defaults.', ['%label' => 'Content: Article']))); // Confirm the fields load properly on the node/add/article page. $node = $this->drupalCreateNode([ 'title' => t('Hello, world!'), 'type' => 'article', ]); $this->drupalGet('node/' . $node->id()); $this->assertResponse(200); unset($values['id']); foreach ($values as $metatag => $value) { $this->assertRaw($value, t('Found bundle override for tag @tag.', ['@tag' => $metatag])); } // Test deleting the article defaults. $this->drupalGet('admin/config/search/metatag/node__article/delete'); $this->assertResponse(200); $this->drupalPostForm(NULL, [], 'Delete'); $this->assertText(t('Deleted @label defaults.', ['@label' => 'Content: Article'])); } /** * Test that the entity default values load on the entity form, and that they * can then be overridden correctly. */ public function testEntityDefaultInheritence() { // Initiate session with a user who can manage metatags and content type // fields. $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); // Add a Metatag field to the Article content type. $this->drupalGet('admin/structure/types/manage/article/fields/add-field'); $this->assertResponse(200); $edit = [ 'new_storage_type' => 'metatag', 'label' => 'Meta tags', 'field_name' => 'meta_tags', ]; $this->drupalPostForm(NULL, $edit, t('Save and continue')); $this->drupalPostForm(NULL, [], t('Save field settings')); $this->assertText(strip_tags(t('Updated field %label field settings.', ['%label' => 'Meta tags']))); $this->drupalPostForm(NULL, [], t('Save settings')); $this->assertText(strip_tags(t('Saved %label configuration.', ['%label' => 'Meta tags']))); // Try creating an article, confirm the fields are present. This should be // the node default values that are shown. $this->drupalGet('node/add/article'); $this->assertResponse(200); $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]'); $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]'); // Customize the Article content type defaults. $this->drupalGet('admin/config/search/metatag/add'); $this->assertResponse(200); $values = [ 'id' => 'node__article', 'title' => 'Article title override', 'description' => 'Article description override', ]; $this->drupalPostForm(NULL, $values, 'Save'); $this->assertText(strip_tags(t('Created the %label Metatag defaults.', ['%label' => 'Content: Article']))); // Try creating an article, this time with the overridden defaults. $this->drupalGet('node/add/article'); $this->assertResponse(200); $this->assertFieldByName('field_meta_tags[0][basic][title]', 'Article title override'); $this->assertFieldByName('field_meta_tags[0][basic][description]', 'Article description override'); } }