Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
<?php

/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/

declare(strict_types=1);

namespace Piwik\Plugins\SegmentEditor\tests\Fixtures;

use Piwik\ArchiveProcessor\Rules;
use Piwik\Config;
use Piwik\Option;
use Piwik\Plugins\SegmentEditor\API as SegmentEditorAPI;
use Piwik\Tests\Fixtures\OneVisitorTwoVisits;

class SegmentManagementPageFixture extends OneVisitorTwoVisits
{
public const GLOBAL_SEGMENT_NAME = 'UI Test Global Segment';
public const GLOBAL_SEGMENT_DEFINITION = 'countryCode==fr';

public const SITE_SEGMENT_NAME = 'UI Test Site Segment';
public const SITE_SEGMENT_DEFINITION = 'visitCount>=1';

public const XSS_SEGMENT_NAME = '<script>alert("testsegment");</script>';
public const XSS_SEGMENT_DEFINITION = 'browserCode==FF';

public const REALTIME_SEGMENT_NAME = 'UI Test Realtime Segment';
public const REALTIME_SEGMENT_DEFINITION = 'browserCode==FF';

public const COMPLEX_DASHBOARD_SEGMENT_NAME = 'UI Test Complex Dashboard Segment';
public const COMPLEX_DASHBOARD_SEGMENT_DEFINITION = 'browserName!=s%2525232%252526%252523--_*%25252B%25253F%252523%252520%252520%2525235%252522%2527%252526%25253C%25253E.22%25252C3,browserName==s%2525232%252526%252523--_*%25252B%25253F%252523%252520%252520%2525235%252522%2527%252526%25253C%25253E.22%25252C3;browserName!=s%2525232%252526%252523--_*%25252B%25253F%252523%252520%252520%2525235%252522%2527%252526%25253C%25253E.22%25252C3';

public function setUp(): void
{
parent::setUp();

$this->setUpSegments();
}

private function setUpSegments(): void
{
$originalEnableBrowserArchivingTriggering = Config::getInstance()->General['enable_browser_archiving_triggering'];
$originalBrowserArchivingDisabledEnforce = Config::getInstance()->General['browser_archiving_disabled_enforce'];
$originalBrowserTriggerOption = Option::get(Rules::OPTION_BROWSER_TRIGGER_ARCHIVING);

try {
Config::getInstance()->General['browser_archiving_disabled_enforce'] = 1;
Config::getInstance()->General['enable_browser_archiving_triggering'] = 0;
Rules::setBrowserTriggerArchiving(false);

$api = SegmentEditorAPI::getInstance();
$api->add(self::GLOBAL_SEGMENT_NAME, self::GLOBAL_SEGMENT_DEFINITION, null, true, true);
$api->add(self::SITE_SEGMENT_NAME, self::SITE_SEGMENT_DEFINITION, $this->idSite, true, true);
$api->add(self::XSS_SEGMENT_NAME, self::XSS_SEGMENT_DEFINITION, $this->idSite, true, true);
$api->add(self::REALTIME_SEGMENT_NAME, self::REALTIME_SEGMENT_DEFINITION, $this->idSite, false, true);
$api->add(self::COMPLEX_DASHBOARD_SEGMENT_NAME, self::COMPLEX_DASHBOARD_SEGMENT_DEFINITION, $this->idSite, true, true);
} finally {
Config::getInstance()->General['browser_archiving_disabled_enforce'] = $originalBrowserArchivingDisabledEnforce;
Config::getInstance()->General['enable_browser_archiving_triggering'] = $originalEnableBrowserArchivingTriggering;

if ($originalBrowserTriggerOption === false) {
Option::delete(Rules::OPTION_BROWSER_TRIGGER_ARCHIVING);
} else {
Rules::setBrowserTriggerArchiving((bool) $originalBrowserTriggerOption);
}
}
}
}
128 changes: 35 additions & 93 deletions plugins/SegmentEditor/tests/UI/SegmentManagementPage_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
*/

describe("SegmentManagementPageTest", function () {
this.fixture = 'Piwik\\Tests\\Fixtures\\OneVisitorTwoVisits';
this.fixture = 'Piwik\\Plugins\\SegmentEditor\\tests\\Fixtures\\SegmentManagementPageFixture';

var generalParams = 'idSite=1&period=range&date=2010-03-06,2010-03-08';
var url = '?module=CoreHome&action=index&' + generalParams + '#?' + generalParams + '&category=General_Visitors&subcategory=CoreHome_Segments';
Expand Down Expand Up @@ -39,95 +39,9 @@ describe("SegmentManagementPageTest", function () {
};

before(async function () {
testEnvironment.configOverride.General = {
browser_archiving_disabled_enforce: '1',
enable_browser_archiving_triggering: '0',
};
testEnvironment.optionsOverride = {
enableBrowserTriggerArchiving: '0',
};
await testEnvironment.save();

const globalSegmentResult = await testEnvironment.callApi('SegmentEditor.add', {
name: globalSegment.name,
definition: globalSegment.definition,
idSite: 0,
autoArchive: 1,
enabledAllUsers: 1,
});

const siteSegmentResult = await testEnvironment.callApi('SegmentEditor.add', {
name: siteSegment.name,
definition: siteSegment.definition,
idSite: 1,
autoArchive: 1,
enabledAllUsers: 1,
});

const xssSegmentResult = await testEnvironment.callApi('SegmentEditor.add', {
name: xssSegment.name,
definition: xssSegment.definition,
idSite: 1,
autoArchive: 1,
enabledAllUsers: 1,
});

const realtimeSegmentResult = await testEnvironment.callApi('SegmentEditor.add', {
name: realtimeSegment.name,
definition: realtimeSegment.definition,
idSite: 1,
autoArchive: 0,
enabledAllUsers: 1,
});

const complexDashboardSegmentResult = await testEnvironment.callApi('SegmentEditor.add', {
name: complexDashboardSegment.name,
definition: complexDashboardSegment.definition,
idSite: 1,
autoArchive: 1,
enabledAllUsers: 1,
});

globalSegment.id = extractSegmentId(globalSegmentResult);
siteSegment.id = extractSegmentId(siteSegmentResult);
xssSegment.id = extractSegmentId(xssSegmentResult);
realtimeSegment.id = extractSegmentId(realtimeSegmentResult);
complexDashboardSegment.id = extractSegmentId(complexDashboardSegmentResult);

testEnvironment.configOverride.General = {
browser_archiving_disabled_enforce: '0',
enable_browser_archiving_triggering: '1',
};
testEnvironment.optionsOverride = {
enableBrowserTriggerArchiving: '1',
};
await testEnvironment.save();

await testEnvironment.callApi('VisitsSummary.get', {
idSite: 1,
period: 'range',
date: '2010-03-06,2010-03-08',
segment: siteSegment.definition,
});
});

after(async function () {
if (globalSegment.id) {
await testEnvironment.callApi('SegmentEditor.delete', { idSegment: globalSegment.id });
}
if (siteSegment.id) {
await testEnvironment.callApi('SegmentEditor.delete', { idSegment: siteSegment.id });
}
if (xssSegment.id) {
await testEnvironment.callApi('SegmentEditor.delete', { idSegment: xssSegment.id });
}
if (realtimeSegment.id) {
await testEnvironment.callApi('SegmentEditor.delete', { idSegment: realtimeSegment.id });
}
});

afterEach(async function () {
await switchToAdminUser();
const allSegmentsResponse = await testEnvironment.callApi('SegmentEditor.getAll', {});
assignSegmentIdsFromApiResponse(allSegmentsResponse);
});

it("should load correctly", async function() {
Expand Down Expand Up @@ -556,11 +470,39 @@ describe("SegmentManagementPageTest", function () {
expect(alertCount).to.equal(0);
});

function extractSegmentId(result) {
if (result && typeof result === 'object' && typeof result.value !== 'undefined') {
return parseInt(result.value, 10) || 0;
function assignSegmentIdsFromApiResponse(response) {
const segments = normalizeSegmentsResponse(response);

const findSegmentId = (target) => {
const expectedSite = target === globalSegment ? 0 : 1;
const match = segments.find((segment) => {
const segmentSite = parseInt(segment && segment.enable_only_idsite, 10) || 0;
return segment
&& segment.definition === target.definition
&& segmentSite === expectedSite;
});

return parseInt(match && (match.idsegment || match.idSegment), 10) || 0;
};

globalSegment.id = findSegmentId(globalSegment);
siteSegment.id = findSegmentId(siteSegment);
xssSegment.id = findSegmentId(xssSegment);
realtimeSegment.id = findSegmentId(realtimeSegment);
complexDashboardSegment.id = findSegmentId(complexDashboardSegment);
}

function normalizeSegmentsResponse(segments) {
if (Array.isArray(segments)) {
return segments;
}
if (segments && Array.isArray(segments.value)) {
return segments.value;
}
if (segments && typeof segments === 'object') {
return Object.values(segments).filter((value) => value && typeof value === 'object');
}
return parseInt(result, 10) || 0;
return [];
}

async function getSegmentRowNumericData(segmentName) {
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.