From 662fae297f2e3abf7eb6791b224631ecabfc0298 Mon Sep 17 00:00:00 2001 From: AKHIL BABU <akhilbabui1998@gmail.com> Date: Wed, 5 Feb 2025 14:02:05 +0530 Subject: [PATCH 1/2] Issues/3502659: Add test for front page meta tag. --- .../src/Functional/ContentMetaTagsTest.php | 189 +++++++++++++----- 1 file changed, 136 insertions(+), 53 deletions(-) diff --git a/recipes/drupal_cms_seo_tools/tests/src/Functional/ContentMetaTagsTest.php b/recipes/drupal_cms_seo_tools/tests/src/Functional/ContentMetaTagsTest.php index 961b20e4..216dc139 100644 --- a/recipes/drupal_cms_seo_tools/tests/src/Functional/ContentMetaTagsTest.php +++ b/recipes/drupal_cms_seo_tools/tests/src/Functional/ContentMetaTagsTest.php @@ -24,10 +24,13 @@ class ContentMetaTagsTest extends BrowserTestBase { */ protected $defaultTheme = 'stark'; + /** + * Create an image media to use in the test. + */ private function generateImage(string $extension): Media { $random = $this->getRandomGenerator(); - $uri = uniqid('public://') . '.' . $extension; + $uri = uniqid('public://') . '.' . $extension; $uri = $random->image($uri, '100x100', '200x200'); $this->assertFileExists($uri); $file = File::create(['uri' => $uri]); @@ -76,12 +79,6 @@ class ContentMetaTagsTest extends BrowserTestBase { $assert_session = $this->assertSession(); $assert_session->statusCodeEquals(200); - $save_node = function () use ($node): void { - $node->save(); - $this->container->get('cache.page')->deleteAll(); - $this->getSession()->reload(); - }; - // Assert the meta tags which are static, or don't have any configured // overrides. $absolute_node_url = $node_url->setAbsolute()->toString(); @@ -99,62 +96,148 @@ class ContentMetaTagsTest extends BrowserTestBase { // Re-saving the node should update the og:updated_time meta tag. $updated_changed_time = $original_changed_time + 30; - $node->setChangedTime($updated_changed_time); - $save_node(); - $assert_session->elementAttributeContains('css', 'meta[property="og:updated_time"]', 'content', date('c', $updated_changed_time)); + $node->setChangedTime($updated_changed_time)->save(); + // Reload the page. + $this->drupalGet($node_url); + $this->assertSession()->elementAttributeContains('css', 'meta[property="og:updated_time"]', 'content', date('c', $updated_changed_time)); + + $node_relative_url = $node_url->toString(); // Assert the meta tags for field_featured_image, and that field_seo_image // takes precedence over it. - $assert_image = function (Media $image) use ($assert_session): void { - /** @var \Drupal\file\FileInterface $file */ - $file = $image->field_media_image->entity; - $name = $file->getFilename(); - - $facebook_dimensions = []; - ImageStyle::load('social_media_facebook') - ?->transformDimensions($facebook_dimensions, $file->getFileUri()); - $this->assertArrayHasKey('width', $facebook_dimensions); - $this->assertArrayHasKey('height', $facebook_dimensions); - - $assert_session->elementAttributeContains('css', 'link[rel="image_src"]', 'href', $name); - $assert_session->elementAttributeContains('css', 'meta[property="og:image"]', 'content', $name); - $alt_text = $image->field_media_image->alt; - $assert_session->elementAttributeContains('css', 'meta[property="og:image:alt"]', 'content', $alt_text); - $assert_session->elementAttributeContains('css', 'meta[property="og:image:width"]', 'content', (string) $facebook_dimensions['width']); - $assert_session->elementAttributeContains('css', 'meta[property="og:image:height"]', 'content', (string) $facebook_dimensions['height']); - $assert_session->elementAttributeContains('css', 'meta[property="og:image:type"]', 'content', 'image/webp'); - $assert_session->elementAttributeContains('css', 'meta[name="twitter:image"]', 'content', $name); - $assert_session->elementAttributeContains('css', 'meta[name="twitter:image:alt"]', 'content', $alt_text); - }; - $assert_image($node->field_featured_image->entity); - $node->set('field_seo_image', $this->generateImage('jpg')); - $save_node(); - $assert_image($node->field_seo_image->entity); + $this->assertImage($node_relative_url, $node->field_featured_image->entity); + $node->set('field_seo_image', $this->generateImage('jpg'))->save(); + $this->assertImage($node_relative_url, $node->field_seo_image->entity); // Assert the meta tags for the node title and that field_seo_title takes // precedence over it. - $assert_title = function (string $title) use ($assert_session, $site_name): void { - $assert_session->elementAttributeContains('css', 'meta[property="og:title"]', 'content', $title); - $assert_session->elementAttributeContains('css', 'meta[name="twitter:title"]', 'content', $title); - $assert_session->titleEquals("$title | $site_name"); - }; - $assert_title($node->getTitle()); + $this->assertTitle($node_relative_url, $node->getTitle()); $seo_title = $this->randomMachineName(); - $node->set('field_seo_title', $seo_title); - $save_node(); - $assert_title($seo_title); + $node->set('field_seo_title', $seo_title)->save(); + $this->assertTitle($node_relative_url, $seo_title); // Assert the meta tags for field_description and that field_seo_description // takes precedence over it. - $assert_description = function (string $description) use ($assert_session): void { - $assert_session->elementAttributeContains('css', 'meta[name="description"]', 'content', $description); - $assert_session->elementAttributeContains('css', 'meta[property="og:description"]', 'content', $description); - $assert_session->elementAttributeContains('css', 'meta[name="twitter:description"]', 'content', $description); - }; - $assert_description($node->field_description->value); - $node->set('field_seo_description', $random->sentences(4)); - $save_node(); - $assert_description($node->field_seo_description->value); + $this->assertDescription($node_relative_url, $node->field_description->value); + $node->set('field_seo_description', $random->sentences(4))->save(); + $this->assertDescription($node_relative_url, $node->field_seo_description->value); + } + + /** + * Test the meta tags for front page. + */ + public function testFrontPageMetaTags(): void { + // Apply drupal_cms_page recipe to add the page content type. + $this->applyRecipe(InstalledVersions::getInstallPath('drupal/drupal_cms_page')); + + // Apply this recipe. + $dir = realpath(__DIR__ . '/../../..'); + $this->applyRecipe($dir); + + // Create a node and assign it as the front page. + $random = $this->getRandomGenerator(); + $front_page_node = $this->drupalCreateNode([ + 'type' => 'page', + 'field_featured_image' => $this->generateImage('png'), + 'field_description' => $random->sentences(4), + 'moderation_state' => 'published', + ]); + $this->config('system.site')->set('page.front', $front_page_node->toUrl()->toString())->save(); + + // Access the front page. + $this->drupalGet('<front>'); + $session = $this->assertSession(); + + // Assert the meta tags which are static, or don't have any configured + // overrides. + $front_page_url = Url::fromRoute('<front>')->setAbsolute()->toString(); + $session->elementAttributeContains('css', 'link[rel="canonical"]', 'href', $front_page_url); + $site_name = $this->config('system.site')->get('name'); + $session->elementAttributeContains('css', 'meta[property="og:site_name"]', 'content', $site_name); + $session->elementAttributeContains('css', 'meta[property="og:type"]', 'content', 'article'); + $session->elementAttributeContains('css', 'meta[property="og:url"]', 'content', $front_page_url); + $session->elementAttributeContains('css', 'meta[name="referrer"]', 'content', 'unsafe-url'); + $session->elementAttributeContains('css', 'link[rel="shortlink"]', 'href', $front_page_url); + $session->elementAttributeContains('css', 'meta[name="rights"]', 'content', sprintf('Copyright ©%s All rights reserved.', date('Y'))); + $session->elementAttributeContains('css', 'meta[name="twitter:card"]', 'content', 'summary_large_image'); + $original_changed_time = $front_page_node->getChangedTime(); + $session->elementAttributeContains('css', 'meta[property="og:updated_time"]', 'content', date('c', $original_changed_time)); + + // Re-saving the node should update the og:updated_time meta tag. + $updated_changed_time = $original_changed_time + 30; + $front_page_node->setChangedTime($updated_changed_time)->save(); + // Reload the front page. + $this->drupalGet('<front>'); + $this->assertSession()->elementAttributeContains('css', 'meta[property="og:updated_time"]', 'content', date('c', $updated_changed_time)); + + // Assert the meta tags for field_description and that field_seo_description + // takes precedence over it. + $this->assertDescription('<front>', $front_page_node->field_description->value); + $front_page_node->set('field_seo_description', $random->sentences(4))->save(); + $this->assertDescription('<front>', $front_page_node->field_seo_description->value); + + // Assert the meta tags for the node title and that field_seo_title takes + // precedence over it. + $this->assertTitle('<front>', $front_page_node->getTitle()); + $seo_title = $this->randomMachineName(); + $front_page_node->set('field_seo_title', $seo_title)->save(); + $this->assertTitle('<front>', $seo_title); + + // Assert the meta tags for field_featured_image, and that field_seo_image + // takes precedence over it. + $this->assertImage('<front>', $front_page_node->field_featured_image->entity); + $front_page_node->set('field_seo_image', $this->generateImage('jpg'))->save(); + $this->assertImage('<front>', $front_page_node->field_seo_image->entity); + } + + /** + * Asserts the description meta tags. + */ + public function assertDescription(string $path, string $expected_description): void { + $this->drupalGet($path); + $session = $this->assertSession(); + $session->elementAttributeContains('css', 'meta[name="description"]', 'content', $expected_description); + $session->elementAttributeContains('css', 'meta[property="og:description"]', 'content', $expected_description); + $session->elementAttributeContains('css', 'meta[name="twitter:description"]', 'content', $expected_description); + } + + /** + * Asserts the title meta tags. + */ + public function assertTitle(string $path, string $title): void { + $this->drupalGet($path); + $session = $this->assertSession(); + $session->elementAttributeContains('css', 'meta[property="og:title"]', 'content', $title); + $session->elementAttributeContains('css', 'meta[name="twitter:title"]', 'content', $title); + $site_name = $this->config('system.site')->get('name'); + $session->titleEquals("$title | $site_name"); + } + + /** + * Asserts the image meta tags. + */ + public function assertImage(string $path, Media $image): void { + $this->drupalGet($path); + $session = $this->assertSession(); + /** @var \Drupal\file\FileInterface $file */ + $file = $image->field_media_image->entity; + $name = $file->getFilename(); + + $facebook_dimensions = []; + ImageStyle::load('social_media_facebook') + ?->transformDimensions($facebook_dimensions, $file->getFileUri()); + $this->assertArrayHasKey('width', $facebook_dimensions); + $this->assertArrayHasKey('height', $facebook_dimensions); + + $session->elementAttributeContains('css', 'link[rel="image_src"]', 'href', $name); + $session->elementAttributeContains('css', 'meta[property="og:image"]', 'content', $name); + $alt_text = $image->field_media_image->alt; + $session->elementAttributeContains('css', 'meta[property="og:image:alt"]', 'content', $alt_text); + $session->elementAttributeContains('css', 'meta[property="og:image:width"]', 'content', (string) $facebook_dimensions['width']); + $session->elementAttributeContains('css', 'meta[property="og:image:height"]', 'content', (string) $facebook_dimensions['height']); + $session->elementAttributeContains('css', 'meta[property="og:image:type"]', 'content', $file->getMimeType()); + $session->elementAttributeContains('css', 'meta[name="twitter:image"]', 'content', $name); + $session->elementAttributeContains('css', 'meta[name="twitter:image:alt"]', 'content', $alt_text); } } -- GitLab From 8064759ee7192094cc7e19fd02a06cad494eb752 Mon Sep 17 00:00:00 2001 From: AKHIL BABU <akhilbabui1998@gmail.com> Date: Wed, 5 Feb 2025 15:30:38 +0530 Subject: [PATCH 2/2] Add tests for front page meta tags. --- .../config/metatag.metatag_defaults.front.yml | 16 +- .../src/Functional/ContentMetaTagsTest.php | 154 +++++++++--------- 2 files changed, 88 insertions(+), 82 deletions(-) diff --git a/recipes/drupal_cms_seo_tools/config/metatag.metatag_defaults.front.yml b/recipes/drupal_cms_seo_tools/config/metatag.metatag_defaults.front.yml index 3bbddf2f..66bd5e18 100644 --- a/recipes/drupal_cms_seo_tools/config/metatag.metatag_defaults.front.yml +++ b/recipes/drupal_cms_seo_tools/config/metatag.metatag_defaults.front.yml @@ -5,13 +5,13 @@ label: 'Front page' tags: canonical_url: '[site:url]' description: '[node:field_seo_description|node:field_description]' - image_src: '[node:field_seo_image:entity:field_media_image:social_media_facebook|node:field_image:entity:field_media_image:social_media_facebook]' + image_src: '[node:field_seo_image:entity:field_media_image:social_media_facebook|node:field_featured_image:entity:field_media_image:social_media_facebook]' og_description: '[node:field_seo_description|node:field_description]' - og_image: '[node:field_seo_image:entity:field_media_image:social_media_facebook|node:field_image:entity:field_media_image:social_media_facebook]' - og_image_alt: '[node:field_seo_image:entity:field_media_image:alt|node:field_image:entity:field_media_image:alt]' - og_image_height: '[node:field_seo_image:entity:field_media_image:social_media_facebook:height|node:field_image:entity:field_media_image:social_media_facebook:height]' - og_image_type: '[node:field_seo_image:entity:field_media_image:social_media_facebook:mimetype|node:field_image:entity:field_media_image:social_media_facebook:mimetype]' - og_image_width: '[node:field_seo_image:entity:field_media_image:social_media_facebook:width|node:field_image:entity:field_media_image:social_media_facebook:width]' + og_image: '[node:field_seo_image:entity:field_media_image:social_media_facebook|node:field_featured_image:entity:field_media_image:social_media_facebook]' + og_image_alt: '[node:field_seo_image:entity:field_media_image:alt|node:field_featured_image:entity:field_media_image:alt]' + og_image_height: '[node:field_seo_image:entity:field_media_image:social_media_facebook:height|node:field_featured_image:entity:field_media_image:social_media_facebook:height]' + og_image_type: '[node:field_seo_image:entity:field_media_image:social_media_facebook:mimetype|node:field_featured_image:entity:field_media_image:social_media_facebook:mimetype]' + og_image_width: '[node:field_seo_image:entity:field_media_image:social_media_facebook:width|node:field_featured_image:entity:field_media_image:social_media_facebook:width]' og_site_name: '[site:name]' og_title: '[node:field_seo_title|node:title]' og_type: website @@ -22,7 +22,7 @@ tags: shortlink: '[site:url]' title: '[node:field_seo_title|node:title] | [site:name]' twitter_cards_description: '[node:field_seo_description|node:field_description]' - twitter_cards_image: '[node:field_seo_image:entity:field_media_image:social_media_x:url|node:field_image:entity:field_media_image:social_media_x:url]' - twitter_cards_image_alt: '[node:field_seo_image:entity:field_media_image:alt|node:field_image:entity:field_media_image:alt]' + twitter_cards_image: '[node:field_seo_image:entity:field_media_image:social_media_x:url|node:field_featured_image:entity:field_media_image:social_media_x:url]' + twitter_cards_image_alt: '[node:field_seo_image:entity:field_media_image:alt|node:field_featured_image:entity:field_media_image:alt]' twitter_cards_title: '[node:field_seo_title|node:title]' twitter_cards_type: summary_large_image diff --git a/recipes/drupal_cms_seo_tools/tests/src/Functional/ContentMetaTagsTest.php b/recipes/drupal_cms_seo_tools/tests/src/Functional/ContentMetaTagsTest.php index 216dc139..5fc99cd4 100644 --- a/recipes/drupal_cms_seo_tools/tests/src/Functional/ContentMetaTagsTest.php +++ b/recipes/drupal_cms_seo_tools/tests/src/Functional/ContentMetaTagsTest.php @@ -10,6 +10,7 @@ use Drupal\file\Entity\File; use Drupal\FunctionalTests\Core\Recipe\RecipeTestTrait; use Drupal\image\Entity\ImageStyle; use Drupal\media\Entity\Media; +use Drupal\node\NodeInterface; use Drupal\Tests\BrowserTestBase; /** @@ -24,13 +25,10 @@ class ContentMetaTagsTest extends BrowserTestBase { */ protected $defaultTheme = 'stark'; - /** - * Create an image media to use in the test. - */ private function generateImage(string $extension): Media { $random = $this->getRandomGenerator(); - $uri = uniqid('public://') . '.' . $extension; + $uri = uniqid('public://') . '.' . $extension; $uri = $random->image($uri, '100x100', '200x200'); $this->assertFileExists($uri); $file = File::create(['uri' => $uri]); @@ -96,31 +94,31 @@ class ContentMetaTagsTest extends BrowserTestBase { // Re-saving the node should update the og:updated_time meta tag. $updated_changed_time = $original_changed_time + 30; - $node->setChangedTime($updated_changed_time)->save(); - // Reload the page. - $this->drupalGet($node_url); - $this->assertSession()->elementAttributeContains('css', 'meta[property="og:updated_time"]', 'content', date('c', $updated_changed_time)); - - $node_relative_url = $node_url->toString(); + $node->setChangedTime($updated_changed_time); + $this->saveNode($node); + $assert_session->elementAttributeContains('css', 'meta[property="og:updated_time"]', 'content', date('c', $updated_changed_time)); // Assert the meta tags for field_featured_image, and that field_seo_image // takes precedence over it. - $this->assertImage($node_relative_url, $node->field_featured_image->entity); - $node->set('field_seo_image', $this->generateImage('jpg'))->save(); - $this->assertImage($node_relative_url, $node->field_seo_image->entity); + $this->assertImage($node->field_featured_image->entity); + $node->set('field_seo_image', $this->generateImage('jpg')); + $this->saveNode($node); + $this->assertImage($node->field_seo_image->entity); // Assert the meta tags for the node title and that field_seo_title takes // precedence over it. - $this->assertTitle($node_relative_url, $node->getTitle()); + $this->assertTitle($node->getTitle(), $site_name); $seo_title = $this->randomMachineName(); - $node->set('field_seo_title', $seo_title)->save(); - $this->assertTitle($node_relative_url, $seo_title); + $node->set('field_seo_title', $seo_title); + $this->saveNode($node); + $this->assertTitle($seo_title, $site_name); // Assert the meta tags for field_description and that field_seo_description // takes precedence over it. - $this->assertDescription($node_relative_url, $node->field_description->value); - $node->set('field_seo_description', $random->sentences(4))->save(); - $this->assertDescription($node_relative_url, $node->field_seo_description->value); + $this->assertDescription($node->field_description->value); + $node->set('field_seo_description', $random->sentences(4)); + $this->saveNode($node); + $this->assertDescription($node->field_seo_description->value); } /** @@ -146,79 +144,67 @@ class ContentMetaTagsTest extends BrowserTestBase { // Access the front page. $this->drupalGet('<front>'); - $session = $this->assertSession(); + $assert_session = $this->assertSession(); + $assert_session->statusCodeEquals(200); // Assert the meta tags which are static, or don't have any configured // overrides. $front_page_url = Url::fromRoute('<front>')->setAbsolute()->toString(); - $session->elementAttributeContains('css', 'link[rel="canonical"]', 'href', $front_page_url); + $assert_session->elementAttributeContains('css', 'link[rel="canonical"]', 'href', $front_page_url); $site_name = $this->config('system.site')->get('name'); - $session->elementAttributeContains('css', 'meta[property="og:site_name"]', 'content', $site_name); - $session->elementAttributeContains('css', 'meta[property="og:type"]', 'content', 'article'); - $session->elementAttributeContains('css', 'meta[property="og:url"]', 'content', $front_page_url); - $session->elementAttributeContains('css', 'meta[name="referrer"]', 'content', 'unsafe-url'); - $session->elementAttributeContains('css', 'link[rel="shortlink"]', 'href', $front_page_url); - $session->elementAttributeContains('css', 'meta[name="rights"]', 'content', sprintf('Copyright ©%s All rights reserved.', date('Y'))); - $session->elementAttributeContains('css', 'meta[name="twitter:card"]', 'content', 'summary_large_image'); + $assert_session->elementAttributeContains('css', 'meta[property="og:site_name"]', 'content', $site_name); + $assert_session->elementAttributeContains('css', 'meta[property="og:type"]', 'content', 'website'); + $assert_session->elementAttributeContains('css', 'meta[property="og:url"]', 'content', $front_page_url); + $assert_session->elementAttributeContains('css', 'meta[name="referrer"]', 'content', 'unsafe-url'); + $assert_session->elementAttributeContains('css', 'link[rel="shortlink"]', 'href', $front_page_url); + $assert_session->elementAttributeContains('css', 'meta[name="rights"]', 'content', sprintf('Copyright ©%s All rights reserved.', date('Y'))); + $assert_session->elementAttributeContains('css', 'meta[name="twitter:card"]', 'content', 'summary_large_image'); $original_changed_time = $front_page_node->getChangedTime(); - $session->elementAttributeContains('css', 'meta[property="og:updated_time"]', 'content', date('c', $original_changed_time)); + $assert_session->elementAttributeContains('css', 'meta[property="og:updated_time"]', 'content', date('c', $original_changed_time)); // Re-saving the node should update the og:updated_time meta tag. $updated_changed_time = $original_changed_time + 30; - $front_page_node->setChangedTime($updated_changed_time)->save(); - // Reload the front page. - $this->drupalGet('<front>'); - $this->assertSession()->elementAttributeContains('css', 'meta[property="og:updated_time"]', 'content', date('c', $updated_changed_time)); + $front_page_node->setChangedTime($updated_changed_time); + $this->saveNode($front_page_node); + $assert_session->elementAttributeContains('css', 'meta[property="og:updated_time"]', 'content', date('c', $updated_changed_time)); - // Assert the meta tags for field_description and that field_seo_description + // Assert the meta tags for field_featured_image, and that field_seo_image // takes precedence over it. - $this->assertDescription('<front>', $front_page_node->field_description->value); - $front_page_node->set('field_seo_description', $random->sentences(4))->save(); - $this->assertDescription('<front>', $front_page_node->field_seo_description->value); + $this->assertImage($front_page_node->field_featured_image->entity); + $front_page_node->set('field_seo_image', $this->generateImage('jpg')); + $this->saveNode($front_page_node); + $this->assertImage($front_page_node->field_seo_image->entity); // Assert the meta tags for the node title and that field_seo_title takes // precedence over it. - $this->assertTitle('<front>', $front_page_node->getTitle()); + $this->assertTitle($front_page_node->getTitle(), $site_name); $seo_title = $this->randomMachineName(); - $front_page_node->set('field_seo_title', $seo_title)->save(); - $this->assertTitle('<front>', $seo_title); + $front_page_node->set('field_seo_title', $seo_title); + $this->saveNode($front_page_node); + $this->assertTitle($seo_title, $site_name); - // Assert the meta tags for field_featured_image, and that field_seo_image + // Assert the meta tags for field_description and that field_seo_description // takes precedence over it. - $this->assertImage('<front>', $front_page_node->field_featured_image->entity); - $front_page_node->set('field_seo_image', $this->generateImage('jpg'))->save(); - $this->assertImage('<front>', $front_page_node->field_seo_image->entity); - } - - /** - * Asserts the description meta tags. - */ - public function assertDescription(string $path, string $expected_description): void { - $this->drupalGet($path); - $session = $this->assertSession(); - $session->elementAttributeContains('css', 'meta[name="description"]', 'content', $expected_description); - $session->elementAttributeContains('css', 'meta[property="og:description"]', 'content', $expected_description); - $session->elementAttributeContains('css', 'meta[name="twitter:description"]', 'content', $expected_description); + $this->assertDescription($front_page_node->field_description->value); + $front_page_node->set('field_seo_description', $random->sentences(4)); + $this->saveNode($front_page_node); + $this->assertDescription($front_page_node->field_seo_description->value); } /** - * Asserts the title meta tags. + * Saves a node. */ - public function assertTitle(string $path, string $title): void { - $this->drupalGet($path); - $session = $this->assertSession(); - $session->elementAttributeContains('css', 'meta[property="og:title"]', 'content', $title); - $session->elementAttributeContains('css', 'meta[name="twitter:title"]', 'content', $title); - $site_name = $this->config('system.site')->get('name'); - $session->titleEquals("$title | $site_name"); + protected function saveNode(NodeInterface $node) { + $node->save(); + $this->container->get('cache.page')->deleteAll(); + $this->getSession()->reload(); } /** * Asserts the image meta tags. */ - public function assertImage(string $path, Media $image): void { - $this->drupalGet($path); - $session = $this->assertSession(); + protected function assertImage(Media $image): void { + $assert_session = $this->assertSession(); /** @var \Drupal\file\FileInterface $file */ $file = $image->field_media_image->entity; $name = $file->getFilename(); @@ -229,15 +215,35 @@ class ContentMetaTagsTest extends BrowserTestBase { $this->assertArrayHasKey('width', $facebook_dimensions); $this->assertArrayHasKey('height', $facebook_dimensions); - $session->elementAttributeContains('css', 'link[rel="image_src"]', 'href', $name); - $session->elementAttributeContains('css', 'meta[property="og:image"]', 'content', $name); + $assert_session->elementAttributeContains('css', 'link[rel="image_src"]', 'href', $name); + $assert_session->elementAttributeContains('css', 'meta[property="og:image"]', 'content', $name); $alt_text = $image->field_media_image->alt; - $session->elementAttributeContains('css', 'meta[property="og:image:alt"]', 'content', $alt_text); - $session->elementAttributeContains('css', 'meta[property="og:image:width"]', 'content', (string) $facebook_dimensions['width']); - $session->elementAttributeContains('css', 'meta[property="og:image:height"]', 'content', (string) $facebook_dimensions['height']); - $session->elementAttributeContains('css', 'meta[property="og:image:type"]', 'content', $file->getMimeType()); - $session->elementAttributeContains('css', 'meta[name="twitter:image"]', 'content', $name); - $session->elementAttributeContains('css', 'meta[name="twitter:image:alt"]', 'content', $alt_text); + $assert_session->elementAttributeContains('css', 'meta[property="og:image:alt"]', 'content', $alt_text); + $assert_session->elementAttributeContains('css', 'meta[property="og:image:width"]', 'content', (string) $facebook_dimensions['width']); + $assert_session->elementAttributeContains('css', 'meta[property="og:image:height"]', 'content', (string) $facebook_dimensions['height']); + $assert_session->elementAttributeContains('css', 'meta[property="og:image:type"]', 'content', 'image/webp'); + $assert_session->elementAttributeContains('css', 'meta[name="twitter:image"]', 'content', $name); + $assert_session->elementAttributeContains('css', 'meta[name="twitter:image:alt"]', 'content', $alt_text); + } + + /** + * Asserts the title meta tags. + */ + protected function assertTitle(string $title, string $site_name): void { + $assert_session = $this->assertSession(); + $assert_session->elementAttributeContains('css', 'meta[property="og:title"]', 'content', $title); + $assert_session->elementAttributeContains('css', 'meta[name="twitter:title"]', 'content', $title); + $assert_session->titleEquals("$title | $site_name"); + } + + /** + * Asserts the description meta tags. + */ + protected function assertDescription(string $description): void { + $assert_session = $this->assertSession(); + $assert_session->elementAttributeContains('css', 'meta[name="description"]', 'content', $description); + $assert_session->elementAttributeContains('css', 'meta[property="og:description"]', 'content', $description); + $assert_session->elementAttributeContains('css', 'meta[name="twitter:description"]', 'content', $description); } } -- GitLab