etracker-8.x-3.x-dev/modules/cookies_etracker/tests/src/Functional/EtrackerCookiesFunctionalTest.php
modules/cookies_etracker/tests/src/Functional/EtrackerCookiesFunctionalTest.php
<?php declare(strict_types=1); namespace Drupal\Tests\cookies_etracker\Functional; use Drupal\Tests\BrowserTestBase; use Drupal\Tests\block\Traits\BlockCreationTrait; use Drupal\etracker\Helper\Constants; /** * Tests basic cookies_etracker functionalities. * * @group cookies_etracker */ class EtrackerCookiesFunctionalTest extends BrowserTestBase { use BlockCreationTrait; /** * {@inheritdoc} */ protected static $modules = [ 'cookies', 'etracker', 'cookies_etracker', 'test_page_test', 'block', ]; /** * Default theme. * * @var string */ protected $defaultTheme = 'stark'; /** * A test administrator. * * @var \Drupal\user\UserInterface */ protected $adminUser; /** * A regular authenticated user. * * @var \Drupal\user\UserInterface */ protected $user; /** * The eTracker dummy account key for testing. * * @var string */ protected $eTrackerAccountKey = 'xxxxxx'; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); // Use the test page as the front page. $this->config('system.site')->set('page.front', '/test-page')->save(); // Set account key: $this->config(Constants::ETRACKER_SETTINGS_CONFIG_NAME)->set('account_key', $this->eTrackerAccountKey)->save(); // Create users: $this->createAdminRole('administrator', 'administrator'); $this->adminUser = $this->drupalCreateUser(); $this->adminUser->addRole('administrator'); $this->adminUser->save(); $this->drupalLogin($this->adminUser); } /** * Tests if the required library exists. */ public function testLibraryExists() { $library = \Drupal::service('library.discovery')->getLibraryByName('cookies', 'cookiesjsr'); // If library does not exist, $library will be false: $this->assertNotEquals($library, FALSE); // Library path is stored in data: if (!file_exists($library['js'][0]['data'])) { $this->assertTrue(FALSE); } } /** * Tests the script is in header and its type is "text/plain" before consent. */ public function testScriptIsTextPlainBeforeConsentInHeader() { $session = $this->assertSession(); // Set the required settings: $this->config(Constants::ETRACKER_SETTINGS_CONFIG_NAME)->set('etracker_scope_script', 'header')->save(); $etracker_values = [ 'data_respect_dnt' => TRUE, 'data_block_cookies' => TRUE, ]; $this->config('etracker.settings')->set('etracker_script_settings', $etracker_values)->save(); $this->config('cookies_etracker.settings')->set('knockout_mode', 'knockout_without_consent_block_cookies_false')->save(); // Place the Cookie UI Block: $this->placeBlock('cookies_ui_block'); // Check script type before consent: $this->drupalLogout(); // Clear caches, otherwise the cached script is returned: drupal_flush_all_caches(); $this->drupalGet('<front>'); $this->assertSession()->statusCodeEquals(200); $session->elementExists('css', 'head script#_etLoader'); // Check if the block is placed: $session->elementExists('css', '#cookiesjsr'); // Check if script is "knocked-out": $session->elementAttributeContains('css', 'script#_etLoader', 'type', 'application/json'); } /** * Tests the script is in footer and its type is "text/plain" before consent. */ public function testScriptIsTextPlainBeforeConsentInFooter() { $session = $this->assertSession(); // Set the required settings: $this->config(Constants::ETRACKER_SETTINGS_CONFIG_NAME)->set('etracker_scope_script', 'footer')->save(); $etracker_values = [ 'data_respect_dnt' => TRUE, 'data_block_cookies' => TRUE, ]; $this->config('etracker.settings')->set('etracker_script_settings', $etracker_values)->save(); $this->config('cookies_etracker.settings')->set('knockout_mode', 'knockout_without_consent_block_cookies_false')->save(); // Place the Cookie UI Block: $this->drupalPlaceBlock('cookies_ui_block', ['region' => 'content']); // Check script type before consent: $this->drupalLogout(); // Clear caches, otherwise the cached script is returned: drupal_flush_all_caches(); $this->drupalGet('<front>'); $this->assertSession()->statusCodeEquals(200); $session->elementExists('css', 'body script#_etLoader'); // Check if the block is placed: $session->elementExists('css', '#cookiesjsr'); // Check if script is "knocked-out": $session->elementAttributeContains('css', 'script#_etLoader', 'type', 'application/json'); } }