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

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

namespace Drupal\Tests\acquia_vwo\Functional;

use Drupal\KernelTests\AssertContentTrait;

// cspell:ignore nocontrol optout vwoid
/**
 * Acquia VWO Admin Tests.
 *
 * @group acquia_vwo
 */
class AcquiaVwoAdminTest extends AcquiaVwoTestBase {

  use AssertContentTrait;

  /**
   * Modules to enable.
   *
   * @var array
   */
  protected static $modules = [
    'help',
    'field',
    'field_ui',
  ];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'claro';

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

    $this->createAuthUser();

    $this->adminUser = $this->drupalCreateUser([
      'access content',
      'access help pages',
      'access administration pages',
      'administer site configuration',
      'administer modules',
      'administer permissions',
      'administer acquia vwo',
    ]);
  }

  /**
   * Test access to the admin pages.
   */
  public function testAdminAccess() {
    // Anonymous user.
    $this->drupalGet('/admin/config/system/acquia_vwo/field_mapping');
    $this->assertSession()->pageTextContains($this->t('Access denied'));

    // Normal user.
    $this->drupalLogin($this->authUser);
    $this->drupalGet('/admin/config/system/acquia_vwo/field_mapping');
    $this->assertSession()->pageTextContains($this->t('Access denied'));

    // Admin user.
    $this->drupalLogin($this->adminUser);
    $this->drupalGet('/admin/config/system/acquia_vwo/field_mapping');
    $this->assertSession()->pageTextNotContains($this->t('Access denied'));
    $this->assertSession()->pageTextContains($this->t('Field mapping'));
  }

  /**
   * Test links on module page.
   */
  public function testModulePage() {
    $this->drupalLogin($this->adminUser);
    $this->drupalGet('/admin/modules');

    // Test link to permissions.
    $this->assertSession()
      ->elementExists('css', 'a[href*="/admin/people/permissions/module/acquia_vwo"][id="edit-modules-acquia-vwo-links-permissions"]');

    // Test link to configure.
    $this->assertSession()
      ->elementExists('css', 'a[href*="/admin/config/system/acquia_vwo"][id="edit-modules-acquia-vwo-links-configure"]');
  }

  /**
   * Test Help strings.
   */
  public function testHelpStrings() {
    $this->drupalLogin($this->adminUser);
    $this->drupalGet('/admin/help');
    $this->clickLink('Acquia VWO');
    $this->assertSession()->pageTextContains($this->t('VWO is an easy to use A/B, split and multivariate testing tool.'));
    $this->assertSession()->pageTextContains($this->t('In order to use this module, you will need a VWO account.'));
    $this->assertSession()->pageTextContains($this->t('Sign up for a Free 30 day trial.'));
    $this->assertSession()->pageTextContains($this->t('Once the Account ID has been set on the settings page'));
    $this->assertSession()->elementExists('css', 'a[href*="https://vwo.com/free-trial"]');
    $this->assertSession()->elementExists('css', 'a[href*="/admin/config/system/acquia_vwo"]');

    $this->drupalGet('/admin/config/system/acquia_vwo');
    $this->assertSession()->pageTextContains($this->t('VWO is an easy to use A/B, split and multivariate testing tool.'));
    $this->assertSession()->pageTextContains($this->t('In order to use this module, you will need a VWO account.'));
    $this->assertSession()->elementExists('css', 'a[href*="https://vwo.com/free-trial"]');

    $this->drupalGet('/admin/config/system/acquia_vwo/vwoid');
    $this->assertSession()->pageTextContains($this->t('Your VWO Account ID can be extracted from the "VWO Smart Code"'));

    $this->drupalGet('/admin/config/system/acquia_vwo/field_mapping');
    $this->assertSession()->pageTextContains($this->t('By mapping common taxonomies from your content types to these fields'));
    $this->assertSession()->pageTextContains($this->t('This data can then be used to segment and target your audience.'));
  }

  /**
   * Test the form that extracts account Id from scripts.
   */
  public function testExtractIdForm() {
    $this->drupalLogin($this->adminUser);

    // Text regex to extract the Ids.
    $variations = [
      'var _vis_opt_account_id=123;' => '123',
      'var _vis_opt_account_id = 1234;' => '1234',
      'var account_id=12345;' => '12345',
      'var account_id = 123456;' => '123456',
    ];

    foreach ($variations as $script => $expected_value) {
      // Set the script value.
      $this->drupalGet('/admin/config/system/acquia_vwo/vwoid');
      $page = $this->getSession()->getPage();
      $page->findField('VWO Smart Code')->setValue($script);
      $page->findButton('Extract Account ID from pasted VWO Smart Code')->click();

      // Check account Id.
      $this->drupalGet('/admin/config/system/acquia_vwo/');
      $this->assertSession()->fieldValueEquals('Account', $expected_value);
      $page = $this->getSession()->getPage();
      $field_value = $page->findField('Account')->getValue();
      $this->assertEquals($expected_value, $field_value, 'The account Id is correct.');
    }
  }

  /**
   * Tests the field mapping form.
   */
  public function testFieldMapping() {
    $this->adminUser = $this->drupalCreateUser([
      'access content',
      'administer site configuration',
      'administer node fields',
      'administer node display',
      'access administration pages',
      'administer acquia vwo',
    ]);

    $this->drupalLogin($this->adminUser);

    // Check that the fields are created properly on content type.
    $this->drupalGet('admin/structure/types/manage/vwo_article/fields');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()->pageTextContains('field_vwo_keywords');
    $this->assertSession()->pageTextContains('field_vwo_persona');
    $this->assertSession()->pageTextContains('field_vwo_section');

    // Check mapping.
    $this->drupalGet('admin/config/system/acquia_vwo/field_mapping');
    $this->assertSession()->statusCodeEquals(200);

    // Update config.
    $edit = [
      'edit-content-section' => 'field_vwo_section',
      'edit-content-keywords' => 'field_vwo_keywords',
      'edit-persona' => 'field_vwo_persona',
    ];
    $this->submitForm($edit, $this->t('Save configuration'));

    $this->drupalGet('admin/config/system/acquia_vwo/field_mapping');
    $this->assertSession()
      ->fieldValueEquals('Content Section', 'field_vwo_section');
    $this->assertSession()
      ->fieldValueEquals('Content Keywords', 'field_vwo_keywords');
    $this->assertSession()->fieldValueEquals('Persona', 'field_vwo_persona');
  }

  /**
   * Test the visibility form.
   */
  public function testVisibilityForm() {
    $this->drupalLogin($this->adminUser);

    // Configure account Id.
    $this->drupalGet('/admin/config/system/acquia_vwo');
    $page = $this->getSession()->getPage();
    $page->findField('VWO Account ID')->setValue('1234');
    $page->findButton('Save configuration')->click();

    // Check visibility form.
    $this->drupalGet('/admin/config/system/acquia_vwo/visibility');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()->pageTextContains($this->t('User specific visibility settings'));

    // Turn on visibility options.
    $page = $this->getSession()->getPage();
    $page->findField('Customize scripts visibility')->selectOption('on');
    $page->findButton('Save configuration')->click();
    $this->assertSession()->pageTextContains($this->t('Request Path'));
    $this->assertSession()->pageTextContains($this->t('User Role'));
    $this->assertSession()->pageTextContains($this->t('Content Type'));

    // Check user control.
    $user_control = $page->findField('Users cannot control whether or not the VWO integration is enabled.')->getValue();
    $this->assertEquals('nocontrol', $user_control, 'Users have no control on the script visibility');

    // Visit account page.
    $this->drupalGet('/user');
    $this->clickLink('Edit');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()->elementNotExists('xpath', '//input[@id="edit-user-opt"]');

    // Turn on user control with opt out.
    $this->drupalGet('/admin/config/system/acquia_vwo/visibility');
    $page = $this->getSession()->getPage();
    $page->findField('Enabled default, but let individual users turn it off.')->selectOption('optout');
    $page->findButton('Save configuration')->click();

    // Visit account page.
    $this->drupalGet('/user');
    $this->clickLink('Edit');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()->checkboxChecked('edit-user-opt');

    // Turn on user control with opt in.
    $this->drupalGet('/admin/config/system/acquia_vwo/visibility');
    $page = $this->getSession()->getPage();
    $page->findField('Disabled by default but let individual users turn it on.')->selectOption('optin');
    $page->findButton('Save configuration')->click();

    // Visit account page.
    $this->drupalGet('/user');
    $this->clickLink('Edit');
    $this->assertSession()->statusCodeEquals(200);
    $this->assertSession()->checkboxNotChecked('edit-user-opt');
  }

}

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

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