3 namespace Drupal\metatag\Tests;
5 use Drupal\language\Entity\ConfigurableLanguage;
6 use Drupal\simpletest\WebTestBase;
9 * Ensures that meta tag values are translated correctly on nodes.
13 class MetatagNodeTranslationTest extends WebTestBase {
20 public static $modules = [
21 'content_translation',
28 * The default language code to use in this test.
32 protected $defaultLangcode = 'fr';
35 * Languages to enable.
39 protected $additionalLangcodes = ['es'];
42 * Administrator user for tests.
44 * @var \Drupal\user\UserInterface
49 * Setup basic environment.
51 protected function setUp() {
54 $admin_permissions = [
55 'administer content types',
56 'administer content translation',
57 'administer languages',
59 'administer node fields',
61 'create content translations',
62 'delete content translations',
63 'translate any entity',
64 'update content translations',
67 // Create and login user.
68 $this->adminUser = $this->drupalCreateUser($admin_permissions);
71 foreach ($this->additionalLangcodes as $langcode) {
72 ConfigurableLanguage::createFromLangcode($langcode)->save();
77 * Tests the metatag value translations.
79 public function testMetatagValueTranslation() {
80 if (floatval(\Drupal::VERSION) <= 8.3) {
81 $save_label = t('Save and publish');
82 $save_label_i18n = t('Save and keep published (this translation)');
85 $save_label = t('Save');
86 $save_label_i18n = t('Save (this translation)');
89 // Set up a content type.
90 $name = $this->randomMachineName() . ' ' . $this->randomMachineName();
91 $this->drupalLogin($this->adminUser);
92 $this->drupalCreateContentType(['type' => 'metatag_node', 'name' => $name]);
94 // Add a metatag field to the content type.
95 $this->drupalGet('admin/structure/types');
96 $this->assertResponse(200);
97 $this->drupalGet('admin/structure/types/manage/metatag_node');
98 $this->assertResponse(200);
100 'language_configuration[language_alterable]' => TRUE,
101 'language_configuration[content_translation]' => TRUE,
103 $this->drupalPostForm(NULL, $edit, t('Save content type'));
104 $this->assertResponse(200);
106 $this->drupalGet('admin/structure/types/manage/metatag_node/fields/add-field');
107 $this->assertResponse(200);
109 'label' => 'Meta tags',
110 'field_name' => 'meta_tags',
111 'new_storage_type' => 'metatag',
113 $this->drupalPostForm(NULL, $edit, t('Save and continue'));
114 $this->assertResponse(200);
115 $this->drupalPostForm(NULL, [], t('Save field settings'));
116 $this->assertResponse(200);
118 'translatable' => TRUE,
120 $this->drupalPostForm(NULL, $edit, t('Save settings'));
121 $this->assertResponse(200);
122 $this->drupalGet('admin/structure/types/manage/metatag_node/fields/node.metatag_node.field_meta_tags');
123 $this->assertResponse(200);
125 // Set up a node without explicit metatag description. This causes the
126 // global default to be used, which contains a token (node:summary). The
127 // token value should be correctly translated.
129 // Load the node form.
130 $this->drupalGet('node/add/metatag_node');
131 $this->assertResponse(200);
133 // Check the default values are correct.
134 $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]', 'Default title token is present.');
135 $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]', 'Default description token is present.');
139 'title[0][value]' => 'Node Français',
140 'body[0][value]' => 'French summary.',
142 $this->drupalPostForm(NULL, $edit, $save_label);
143 $this->assertResponse(200);
145 $xpath = $this->xpath("//meta[@name='description']");
146 $this->assertEqual(count($xpath), 1, 'Exactly one description meta tag found.');
147 $value = (string) $xpath[0]['content'];
148 $this->assertEqual($value, 'French summary.');
150 $this->drupalGet('node/1/translations/add/en/es');
151 $this->assertResponse(200);
152 // Check the default values are there.
153 $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]', 'Default title token is present.');
154 $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]', 'Default description token is present.');
157 'title[0][value]' => 'Node Español',
158 'body[0][value]' => 'Spanish summary.',
160 $this->drupalPostForm(NULL, $edit, $save_label_i18n);
161 $this->assertResponse(200);
163 $this->drupalGet('es/node/1');
164 $this->assertResponse(200);
165 $xpath = $this->xpath("//meta[@name='description']");
166 $this->assertEqual(count($xpath), 1, 'Exactly one description meta tag found.');
167 $value = (string) $xpath[0]['content'];
168 $this->assertEqual($value, 'Spanish summary.');
169 $this->assertNotEqual($value, 'French summary.');
171 $this->drupalGet('node/1/edit');
172 $this->assertResponse(200);
173 // Check the default values are there.
174 $this->assertFieldByName('field_meta_tags[0][basic][title]', '[node:title] | [site:name]', 'Default title token is present.');
175 $this->assertFieldByName('field_meta_tags[0][basic][description]', '[node:summary]', 'Default description token is present.');
177 // Set explicit values on the description metatag instead using the
179 $this->drupalGet('node/1/edit');
180 $this->assertResponse(200);
182 'field_meta_tags[0][basic][description]' => 'Overridden French description.',
184 $this->drupalPostForm(NULL, $edit, $save_label_i18n);
185 $this->assertResponse(200);
187 $xpath = $this->xpath("//meta[@name='description']");
188 $this->assertEqual(count($xpath), 1, 'Exactly one description meta tag found.');
189 $value = (string) $xpath[0]['content'];
190 $this->assertEqual($value, 'Overridden French description.');
191 $this->assertNotEqual($value, 'Spanish summary.');
192 $this->assertNotEqual($value, 'French summary.');
194 $this->drupalGet('es/node/1/edit');
195 $this->assertResponse(200);
197 'field_meta_tags[0][basic][description]' => 'Overridden Spanish description.',
199 $this->drupalPostForm(NULL, $edit, $save_label_i18n);
200 $this->assertResponse(200);
202 $xpath = $this->xpath("//meta[@name='description']");
203 $this->assertEqual(count($xpath), 1, 'Exactly one description meta tag found.');
204 $value = (string) $xpath[0]['content'];
205 $this->assertEqual($value, 'Overridden Spanish description.');
206 $this->assertNotEqual($value, 'Spanish summary.');
207 $this->assertNotEqual($value, 'French summary.');