cookies-1.0.3/modules/cookies_asset_injector/tests/src/FunctionalJavascript/TestCookiesAssetInjectorFunctionalJavascript.php

modules/cookies_asset_injector/tests/src/FunctionalJavascript/TestCookiesAssetInjectorFunctionalJavascript.php
<?php

namespace Drupal\Tests\cookies_asset_injector\FunctionalJavascript;

use Drupal\cookies\Entity\CookiesServiceEntity;
use Drupal\cookies\Entity\CookiesServiceGroup;
use Drupal\Core\Cache\Cache;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\cookies\FunctionalJavascript\CookiesFunctionalJsTestBase;
use Drupal\Tests\cookies_asset_injector\Traits\CookiesAssetInjectorTestHelperTrait;
use WebDriver\Exception\UnexpectedAlertOpen;

/**
 * Tests cookies_asset_injector Javascript related functionalities.
 *
 * @group cookies_asset_injector
 */
class TestCookiesAssetInjectorFunctionalJavascript extends CookiesFunctionalJsTestBase {
  use CookiesAssetInjectorTestHelperTrait;

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = [
    'asset_injector',
    'cookies_asset_injector',
    'system',
  ];

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    // Create custom service group:
    CookiesServiceGroup::create([
      'status' => TRUE,
      'id' => 'asset_injector_group',
      'label' => 'Asset Injector Group',
      'weight' => 20,
      'title' => 'Asset Injector Group',
      'details' => 'Testing for Asset Injector Group',
    ])->save();

    // Create COOKiES service with consent required:
    CookiesServiceEntity::create([
      'id' => 'consent_required_service',
      'label' => 'Consent Required Service',
      'group' => 'asset_injector_group',
      'consentRequired' => TRUE,
      'status' => TRUE,
      'info' => [
        'value' => 'Consent Required Service',
        'format' => 'plain_text',
      ],
      'purpose' => '',
      'processor' => '',
      'processorContact' => '',
      'processorUrl' => '',
      'processorPrivacyPolicyUrl' => '',
      'processorCookiePolicyUrl' => '',
      'placeholderMainText' => 'This content is blocked because Asset Injector cookies have not been accepted.',
      'placeholderAcceptText' => 'Only accept Asset Injector cookies',
    ])->save();

    // Create COOKiES service with consent unnecessary:
    CookiesServiceEntity::create([
      'id' => 'consent_unnecessary_service',
      'label' => 'Consent Unnecessary Service',
      'group' => 'asset_injector_group',
      'consentRequired' => FALSE,
      'status' => TRUE,
      'info' => [
        'value' => 'Consent Unnecessary Service',
        'format' => 'plain_text',
      ],
      'purpose' => '',
      'processor' => '',
      'processorContact' => '',
      'processorUrl' => '',
      'processorPrivacyPolicyUrl' => '',
      'processorCookiePolicyUrl' => '',
    ])->save();

    // Cache clear required:
    Cache::invalidateTags([
      'config:cookies.cookies_service',
      'config:cookies.cookies_service_group',
    ]);
  }

  /**
   * {@inheritdoc}
   */
  protected function tearDown(): void {
    // Run Grandparent teardown() here, so no unexpected alert
    // exception gets thrown inside "WebDriverTestBase":
    BrowserTestBase::tearDown();
  }

  /**
   * Tests if javascript executes if not assigned to a COOKiES service.
   */
  public function testUnassignedJsNotKnocked() {
    /**
     * @var \Behat\Mink\Driver\Selenium2Driver $driver
     */
    $driver = $this->getSession()->getDriver();

    // Create asset-injector instance:
    $this->createAssetInjector('test_injector', 'Test Injector', 'alert("hello");');

    // Go to front page and expect the alert to fire, as consent is assumed:
    try {
      $this->drupalGet('<front>');
    }
    catch (UnexpectedAlertOpen $e) {
      $this->assertTrue(TRUE);
    }
    $message = $driver->getWebDriverSession()->getAlert_text();
    $driver->getWebDriverSession()->accept_alert();
    $this->assertEquals('hello', $message);
  }

  /**
   * Tests if js won't execute if assigned to consent required COOKiES service.
   */
  public function testAssignedJsKnockedServiceConsentRequired() {
    /**
     * @var \Behat\Mink\Driver\Selenium2Driver $driver
     */
    $driver = $this->getSession()->getDriver();
    // Create asset-injector instance:
    $this->createAssetInjector('test_injector', 'Test Injector', 'alert("hello");', FALSE, FALSE, 'consent_required_service');

    // Go to front page, no alert should be shown:
    $this->drupalGet('<front>');

    // Fire consent script, accept all cookies:
    $script = "document.dispatchEvent(new CustomEvent('cookiesjsrSetService', { detail: { all: true }}));";
    $this->getSession()->getDriver()->executeScript($script);
    // Now an alert should be thrown!
    try {
      $this->drupalGet('<front>');
    }
    catch (UnexpectedAlertOpen $e) {
      $this->assertTrue(TRUE);
    }

    $message = $driver->getWebDriverSession()->getAlert_text();
    $driver->getWebDriverSession()->accept_alert();
    $this->assertEquals('hello', $message);
  }

  /**
   * Tests if js executes if assigned to consent unnecessary COOKiES service.
   */
  public function testAssignedJsKnockedServiceConsentUnnecessary() {
    /**
     * @var \Behat\Mink\Driver\Selenium2Driver $driver
     */
    $driver = $this->getSession()->getDriver();
    // Create asset-injector instance:
    $this->createAssetInjector('test_injector', 'Test Injector', 'alert("hello");', FALSE, FALSE, 'consent_unnecessary_service');
    // Go to front page and expect the alert to fire, as consent is assumed:
    try {
      $this->drupalGet('<front>');
    }
    catch (UnexpectedAlertOpen $e) {
      $this->assertTrue(TRUE);
    }
    $message = $driver->getWebDriverSession()->getAlert_text();
    $driver->getWebDriverSession()->accept_alert();
    $this->assertEquals('hello', $message);
  }

  /**
   * Tests if js won't execute if assigned to consent required COOKiES service.
   */
  public function testAssignedJsKnockedServiceConsentRequiredHeaderTrue() {
    /**
     * @var \Behat\Mink\Driver\Selenium2Driver $driver
     */
    $driver = $this->getSession()->getDriver();
    // Create asset-injector instance:
    $this->createAssetInjector('test_injector', 'Test Injector', 'alert("hello");', TRUE, FALSE, 'consent_required_service');

    // Go to front page, no alert should be shown:
    $this->drupalGet('<front>');

    // Fire consent script, accept all cookies:
    $script = "document.dispatchEvent(new CustomEvent('cookiesjsrSetService', { detail: { all: true }}));";
    $this->getSession()->getDriver()->executeScript($script);
    // Now an alert should be thrown!
    try {
      $this->drupalGet('<front>');
    }
    catch (UnexpectedAlertOpen $e) {
      $this->assertTrue(TRUE);
    }

    $message = $driver->getWebDriverSession()->getAlert_text();
    $driver->getWebDriverSession()->accept_alert();
    $this->assertEquals('hello', $message);
  }

  /**
   * Tests if js won't execute if assigned to consent required COOKiES service.
   */
  public function testAssignedJsKnockedServiceConsentRequiredAllTrue() {
    /**
     * @var \Behat\Mink\Driver\Selenium2Driver $driver
     */
    $driver = $this->getSession()->getDriver();

    // We need to enable js preprocessing, before we can "preprocess" inside the
    // asset injector:
    $this->config('system.performance')->set('js.preprocess', TRUE)->save();
    // Create asset-injector instance:
    $this->createAssetInjector('test_injector', 'Test Injector', 'alert("hello");', TRUE, TRUE, 'consent_required_service');

    // Go to front page, no alert should be shown:
    $this->drupalGet('<front>');

    // Fire consent script, accept all cookies:
    $script = "document.dispatchEvent(new CustomEvent('cookiesjsrSetService', { detail: { all: true }}));";
    // // Now an alert should be thrown!
    $this->getSession()->getDriver()->executeScript($script);
    try {
      $this->drupalGet('<front>');
    }
    catch (UnexpectedAlertOpen $e) {
      $this->assertTrue(TRUE);
    }

    $message = $driver->getWebDriverSession()->getAlert_text();
    $driver->getWebDriverSession()->accept_alert();
    $this->assertEquals('hello', $message);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc