From f4b7793327385962bb281c918befc62145759b1d Mon Sep 17 00:00:00 2001 From: Andy Broomfield Date: Thu, 9 Jan 2025 20:57:02 +0000 Subject: [PATCH] Fix alert banner cookie path (#402) --- js/alert_banner.js | 2 +- .../AlertBannerHideTest.php | 29 ++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/js/alert_banner.js b/js/alert_banner.js index 0c46528..c62c52c 100644 --- a/js/alert_banner.js +++ b/js/alert_banner.js @@ -12,7 +12,7 @@ function setAlertBannerHideCookie(cookieTokens, token) { const expiry = Date.now() + 30 * 24 * 60 * 60 * 1000; document.cookie = `hide-alert-banner-token=${newCookie}; expires=${new Date( expiry - ).toUTCString()}; SameSite=Lax;`; + ).toUTCString()}; path=/; SameSite=Lax;`; } (function localgovAlertBannerScript(Drupal) { diff --git a/tests/src/FunctionalJavascript/AlertBannerHideTest.php b/tests/src/FunctionalJavascript/AlertBannerHideTest.php index d3b041f..f3931ac 100644 --- a/tests/src/FunctionalJavascript/AlertBannerHideTest.php +++ b/tests/src/FunctionalJavascript/AlertBannerHideTest.php @@ -61,7 +61,7 @@ public function testAlertBannerHide() { $this->assertSession()->pageTextNotContains($alert_message); // Test on login page. - $this->drupalGet('/user'); + $this->drupalGet('/user/login'); $this->assertSession()->pageTextNotContains($alert_message); // Update alert message. @@ -117,6 +117,33 @@ public function testAlertBannerHide() { $this->assertSession()->pageTextNotContains($alert_message); $this->assertSession()->pageTextNotContains($alert_message_2); + // Set up a third alert banner. + $title_3 = $this->randomMachineName(8); + $alert_message_3 = 'Alert message: ' . $this->randomMachineName(16); + $alert_3 = $this->container->get('entity_type.manager')->getStorage('localgov_alert_banner') + ->create([ + 'type' => 'localgov_alert_banner', + 'title' => $title_3, + 'short_description' => $alert_message_3, + 'type_of_alert' => 'minor', + 'moderation_state' => 'published', + ]); + $alert_3->save(); + + // Hide the banner on the /user/login page. + // This is to test the cookie is set for the site and not just the path. + // @see https://github.com/localgovdrupal/localgov_alert_banner/issues/401 + $this->drupalGet('/user/login'); + $page = $this->getSession()->getPage(); + $button_3 = $page->find('css', '[data-dismiss-alert-token="' . $alert_3->getToken() . '"] button'); + $button_3->click(); + + // Reload home page. + $this->drupalGet(''); + + // Test banner is not present. + $this->assertSession()->pageTextNotContains($alert_message_3); + } }