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