acquia_vwo-1.0.x-dev/tests/src/Functional/AcquiaVwoIntegrationTest.php

tests/src/Functional/AcquiaVwoIntegrationTest.php
<?php

namespace Drupal\Tests\acquia_vwo\Functional;

use Drupal\language\Entity\ConfigurableLanguage;

// cspell:ignore user_opt nocontrol Pathconfig
// cspell:ignore Teste Pessoa Sessao Novo optout
/**
 * Acquia VWO Integration Tests.
 *
 * @group acquia_vwo
 */
class AcquiaVwoIntegrationTest extends AcquiaVwoTestBase {

  use AcquiaVwoContentTrait;
  use AcquiaVwoConfigTrait;

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = [
    'language',
    'locale',
  ];

  /**
   * {@inheritdoc}
   */
  public function setUp(): void {
    parent::setUp();

    $this->createAuthUser();
    $this->createAdminUser();

    // Add a second language.
    $language = ConfigurableLanguage::createFromLangcode('pt-br');
    $language->save();
  }

  /**
   * Test visibility settings.
   */
  public function testVisibility() {
    // Create initial config.
    $this->setInitialConfig();
    $this->drupalLogin($this->adminUser);
    $this->drupalGet('/admin/config/system/acquia_vwo/visibility');
    $page = $this->getSession()->getPage();
    $page->findButton('Save configuration')->click();

    // Set Mapping.
    $this->setFieldMapping();

    // Create content.
    $this->createNodes();

    // Check caches for anonymous user.
    $this->checkCachesAnonymous();

    // Test path based visibility.
    $this->checkPathConfiguration();

    // Test Scripts.
    $this->checkScripts();

    // Check caches for authenticated user.
    $this->checkCachesAuthUser();

    // Test scripts on node type basis.
    $this->checkNodeTypeVisibility();

    // Test role level visibility.
    $this->checkRoles();
  }

  /**
   * Test scripts on the page.
   */
  private function checkScripts() {
    // Check scripts.
    $this->drupalLogin($this->authUser);
    $this->drupalGet('node/1');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()->responseContains('window._vwo_code || (function');
    $this->assertSession()->responseContains('var account_id=123456');
    $this->assertSession()->responseContains('settings_tolerance=2000');
    $this->assertSession()->responseContains('v=d.querySelector(\'#vwoCode\')');
    $this->assertSession()
      ->responseContains('window.VWO.data = window.VWO.data || {};');
    $this->assertSession()->responseContains('window.VWO.data.acquia={');
    $this->assertSession()
      ->responseContains('{"drupal":{"title":"Test article","content_type":"vwo_article","taxonomy"');
    $this->assertSession()
      ->responseContains('taxonomy":{"content_section":["Section 1"],"content_keywords":["Foo","Bar"],"persona":["Persona 1"]}}}');

    // Check that when we re-save the node, the changes will reflect.
    $this->updateContent();
    $this->drupalGet('node/1');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->responseContains('{"drupal":{"title":"Updated title');

    // Test script with translated content.
    $this->drupalGet('/pt-br/teste_vwo');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()->responseContains('var account_id=123456');
    $this->assertSession()
      ->responseContains('window.VWO.data = window.VWO.data || {};');
    $this->assertSession()->responseContains('window.VWO.data.acquia={');
    $this->assertSession()
      ->responseContains('{"drupal":{"title":"Teste","content_type":"vwo_article","taxonomy"');
    $this->assertSession()
      ->responseContains('taxonomy":{"content_section":["Sessao 1"],"content_keywords":["Foo","Bar"],"persona":["Pessoa 1"]}}}');
  }

  /**
   * Tests cache tags and Drupal cache.
   */
  private function checkCachesAnonymous() {
    $this->drupalLogout();
    $this->assertCacheTag('config:acquia_vwo.settings');
    $this->assertHeader('X-Drupal-Cache', 'MISS');
    $this->getSession()->reload();
    $this->assertHeader('X-Drupal-Cache', 'HIT');
  }

  /**
   * Tests cache tags and dynamic cache.
   */
  private function checkCachesAuthUser() {
    $this->assertCacheTag('config:acquia_vwo.settings');
    $this->assertHeader('X-Drupal-Dynamic-Cache', 'MISS');
    $this->getSession()->reload();
    $this->assertHeader('X-Drupal-Dynamic-Cache', 'HIT');
  }

  /**
   * Helper to test content type visibility.
   */
  private function checkNodeTypeVisibility() {
    // Visibility filters for content type are disabled by default.
    // The Vwo scripts are added to all content types.
    $this->drupalGet('node/1');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->responseContains('window.VWO.data = window.VWO.data || {};');
    $this->assertCacheTag('config:acquia_vwo.settings');

    // Enable integration on VWO Blog content type only.
    $this->drupalLogin($this->adminUser);
    $this->drupalGet('/admin/config/system/acquia_vwo/visibility');
    $this->assertSession()->statusCodeEquals(200);
    $page = $this->getSession()->getPage();
    $page->findField('VWO Blog')->selectOption('vwo_blog');
    $page->findButton('Save configuration')->click();

    // Test integration on VWO article.
    $this->drupalGet('node/1');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->responseNotContains('window.VWO.data = window.VWO.data || {};');
    $this->assertCacheTag('config:acquia_vwo.settings');

    // Enable integration on VWO Article content type.
    $this->drupalGet('/admin/config/system/acquia_vwo/visibility');
    $this->assertSession()->statusCodeEquals(200);
    $page = $this->getSession()->getPage();
    $page->findField('VWO Article')->selectOption('vwo_article');
    $page->findButton('Save configuration')->click();

    // Test integration on VWO article.
    $this->drupalLogin($this->authUser);
    $this->drupalGet('node/1');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->responseContains('window.VWO.data = window.VWO.data || {};');
    $this->assertCacheTag('config:acquia_vwo.settings');
    // Make sure cache tags for current user are not added to content.
    $current_user = \Drupal::currentUser();
    $this->assertNoCacheTag('user:' . $current_user->id());
  }

  /**
   * Helper to test role level visibility.
   */
  private function checkRoles() {
    // Set visibility only for anonymous users.
    $this->drupalLogin($this->adminUser);
    $this->drupalGet('/admin/config/system/acquia_vwo/visibility');
    $this->assertSession()->statusCodeEquals(200);
    $page = $this->getSession()->getPage();
    $page->findField('Anonymous user')->selectOption('anonymous');
    $page->findButton('Save configuration')->click();

    // Test integration on VWO article.
    $this->drupalGet('node/1');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->responseNotContains('window.VWO.data = window.VWO.data || {};');
    $this->assertCacheContext('user.roles:authenticated');

    // Check script as anonymous.
    $this->drupalLogout();
    $this->drupalGet('node/1');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->responseContains('window.VWO.data = window.VWO.data || {};');
    // Check cache contexts.
    $this->assertNoCacheContext('user');
    // $this->assertCacheContext('user.roles');
    $this->assertCacheContext('user.roles:authenticated');

    // Check as authenticated user again.
    $this->drupalLogin($this->authUser);
    $this->drupalGet('node/1');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->responseNotContains('window.VWO.data = window.VWO.data || {};');
    // Check cache contexts.
    $this->assertNoCacheContext('user');
    $this->assertCacheContext('user.roles:authenticated');

    // Add authenticated role.
    $this->drupalLogin($this->adminUser);
    $this->drupalGet('/admin/config/system/acquia_vwo/visibility');
    $this->assertSession()->statusCodeEquals(200);
    $page = $this->getSession()->getPage();
    $page->findField('Authenticated user')->selectOption('authenticated');
    $page->findButton('Save configuration')->click();

    // Check as authenticated user again.
    $this->drupalLogin($this->authUser);
    $this->drupalGet('node/1');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->responseContains('window.VWO.data = window.VWO.data || {};');
    // Check cache contexts.
    $this->assertNoCacheContext('user');
    $this->assertCacheContext('user.roles:authenticated');
  }

  /**
   * Helper to test visibility based on paths.
   */
  private function checkPathConfiguration() {
    // Admin routes are excluded by default.
    $this->drupalLogin($this->adminUser);
    $this->drupalGet('/admin/config/system/acquia_vwo');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()
      ->responseNotContains('window.VWO.data = window.VWO.data || {};');
  }

}

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

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