View source
<?php
namespace Drupal\optimizely\Tests;
use Drupal\simpletest\WebTestBase;
use Drupal\Core\Language\LanguageInterface;
class OptimizelyPageSnippetTest extends WebTestBase {
protected $addUpdatePage = 'admin/config/system/optimizely/add_update';
protected $update2Page = 'admin/config/system/optimizely/add_update/2';
protected $update3Page = 'admin/config/system/optimizely/add_update/3';
protected $update4Page = 'admin/config/system/optimizely/add_update/4';
protected $update5Page = 'admin/config/system/optimizely/add_update/5';
protected $listingPage = 'admin/config/system/optimizely';
protected $addAliasPage = 'admin/config/search/path/add';
protected $anonymousUser;
protected $privilegedUser;
protected $optimizelyPermission = 'administer optimizely';
protected $projectCode;
protected $projectPaths;
protected $projectNodes;
protected $projectAliases;
public static $modules = [
'optimizely',
'node',
'path',
];
public static function getInfo() {
return [
'name' => 'Optimizely Presence of Javascript Snippet',
'description' => 'Test the presence of the Optimizely snippet
(Javascript call) on pages (paths) defined in project entries.',
'group' => 'Optimizely',
];
}
public function setUp() {
parent::setUp();
$this
->drupalCreateContentType([
'type' => 'page',
'name' => 'Basic page',
]);
$this->anonymousUser = $this
->drupalCreateUser([
'access content',
]);
$this->privilegedUser = $this
->drupalCreateUser([
'access content',
'create page content',
'administer url aliases',
'create url aliases',
$this->optimizelyPermission,
]);
$this->projectNodes = [];
$this->projectAliases = [];
$this->projectPaths = [];
$subpath = '';
$this
->drupalLogin($this->privilegedUser);
for ($project_count = 0; $project_count < 4; $project_count++) {
$this->projectPaths[$project_count] = '';
for ($page_count = 0; $page_count < 5; $page_count++) {
$settings = [
'type' => 'page',
'title' => $this
->randomMachineName(32),
'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
'body' => [
[
'value' => $this
->randomMachineName(64),
'format' => filter_default_format(),
],
],
];
$node = $this
->drupalCreateNode($settings);
$this->projectNodes[] = $node
->id();
$random_alias_node = mt_rand(0, 1);
if ($random_alias_node) {
$alias = '/' . $this
->randomMachineName(10);
$random_subalias_node = mt_rand(0, 1);
if ($random_subalias_node) {
$subpath = '/' . $this
->randomMachineName(10);
$alias = $subpath . $alias;
}
$edit_node = [];
$edit_node['source'] = '/node/' . $node
->id();
$edit_node['alias'] = $alias;
$this
->drupalPostForm($this->addAliasPage, $edit_node, t('Save'));
$this->projectAliases[] = $alias;
$random_project_wildcard = mt_rand(0, 1);
if ($random_project_wildcard && $subpath != '') {
$edit_node['alias'] = $subpath . '/*';
$subpath = '';
if (!empty($this->projectPaths[$project_count])) {
$this->projectPaths[$project_count] = $edit_node['alias'] . "\n" . $this->projectPaths[$project_count];
}
else {
$this->projectPaths[$project_count] = $edit_node['alias'];
}
}
elseif ($subpath == '') {
if (!empty($this->projectPaths[$project_count])) {
$this->projectPaths[$project_count] = $edit_node['alias'] . "\n" . $this->projectPaths[$project_count];
}
else {
$this->projectPaths[$project_count] = $edit_node['alias'];
}
}
}
else {
if (!empty($this->projectPaths[$project_count])) {
$this->projectPaths[$project_count] = '/node/' . $node
->id() . "\n" . $this->projectPaths[$project_count];
}
else {
$this->projectPaths[$project_count] = '/node/' . $node
->id();
}
}
}
$this->projectCode[$project_count] = mt_rand(0, 10000);
$edit = [
'optimizely_project_title' => $this
->randomMachineName(8),
'optimizely_project_code' => $this->projectCode[$project_count],
'optimizely_path' => $this->projectPaths[$project_count],
'optimizely_enabled' => 0,
];
$this
->drupalPostForm($this->addUpdatePage, $edit, t('Add'));
}
}
public function testPageSnippetPresence() {
$this
->drupalLogin($this->privilegedUser);
$edit = [
'optimizely_enabled' => 1,
];
$this
->drupalPostForm($this->update2Page, $edit, t('Update'));
$this
->drupalPostForm($this->update3Page, $edit, t('Update'));
$this
->drupalPostForm($this->update4Page, $edit, t('Update'));
$this
->drupalPostForm($this->update5Page, $edit, t('Update'));
$this
->drupalGet($this->listingPage);
$this
->assertRaw('name="project-2" checked="checked"', '<strong>Project 2 is enabled, ready to test path settings for presence of snippet.</strong>', 'Optimizely');
$this
->drupalLogout();
$this
->drupalLogin($this->anonymousUser);
$num_projects = count($this->projectCode);
for ($project_count = 0; $project_count <= $num_projects; $project_count++) {
if (!empty($this->projectPaths[$project_count])) {
$paths = explode("\n", $this->projectPaths[$project_count]);
}
else {
$paths = [];
}
foreach ($paths as $path) {
if ($path == '') {
break;
}
if (strpos($path, '/*') === FALSE) {
$this
->drupalGet($path);
$target_html = '"//cdn.optimizely.com/js/' . $this->projectCode[$project_count] . '.js"';
$this
->assertRaw("src={$target_html}", "<strong>Optimizely snippet call {$target_html} found</strong> at: " . $path, 'Optimizely');
}
}
}
}
}