1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-24 16:07:37 +00:00
Files
matomo/tests/PHPUnit/Integration/Segment/SegmentUnavailableTest.php
Michal Kleiner 9a3ef94df6 [Coding Style] Enable rule PSR12.Files.FileHeader + unify file headers (#22132)
* [Coding Style] Enable rule PSR12.Files.FileHeader

* Apply CS

* Replace Piwik with Matomo in file headers

* Unify file headers (position, no. of lines, https links)

* Rebuild dist files

* Apply CS

* Fix system test that relies on line numbers in a file that had the file header updated

---------

Co-authored-by: Stefan Giehl <stefan@matomo.org>
2024-04-20 20:50:47 +02:00

187 خطوط
5.9 KiB
PHP

<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Tests\Integration\Segment;
use Piwik\ArchiveProcessor\Rules;
use Piwik\Cache;
use Piwik\Date;
use Piwik\Option;
use Piwik\Plugins\Live\SystemSettings;
use Piwik\Tests\Framework\Mock\FakeAccess;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
use Piwik\Plugins\SegmentEditor\API;
use Piwik\Plugins\SitesManager\API as APISitesManager;
/**
* @group Segment
* @group SegmentUnavailableTest
*/
class SegmentUnavailableTest extends IntegrationTestCase
{
protected $idSite = 1;
public function setUp(): void
{
parent::setUp();
// Setup test site
Date::$now = strtotime('2020-03-01 00:00:00');
FakeAccess::setIdSitesView([1, 2]);
FakeAccess::setIdSitesAdmin([3, 4]);
FakeAccess::$superUser = true;
FakeAccess::$superUserLogin = 'superusertest';
APISitesManager::getInstance()->addSite('test', 'http://example.org');
Option::set(Rules::OPTION_BROWSER_TRIGGER_ARCHIVING, 0);
}
public function tearDown(): void
{
parent::tearDown();
Option::set(Rules::OPTION_BROWSER_TRIGGER_ARCHIVING, 1);
}
public function testvisitorIdSegmentIsDisabledWhenVisitorProfileUnavailable()
{
// Create a new segment that uses the visitorId property
$definition = 'visitorId==4b3d9389bae51466';
$name = 'visitorId';
$visitorSegmentId = API::getInstance()->add($name, $definition, $this->idSite, $autoArchive = 1, $enabledAllUsers = 1);
// Check it is returned by the API get all segment call
$this->checkSegmentAvailable($definition, $name, true);
// Disable the visitor progile
$this->disableVisitorProfile(true);
// Check that the new segment is no longer returned by the API
$this->checkSegmentAvailable($definition, $name, false);
// Clean up
API::getInstance()->delete($visitorSegmentId);
$this->disableVisitorProfile(false);
}
public function testUserIdSegmentIsDisabledWhenVisitorProfileUnavailable()
{
// Create a new segment that uses the userId property
$definition = 'userId==4b3d9389bae51466';
$name = 'userId';
$userSegmentId = API::getInstance()->add($name, $definition, $this->idSite, $autoArchive = 1, $enabledAllUsers = 1);
// Check it is returned by the API get all segment call
$this->checkSegmentAvailable($definition, $name, true);
// Disable the visitor progile
$this->disableVisitorProfile(true);
// Check that the new segment is no longer returned by the API
$this->checkSegmentAvailable($definition, $name, false);
// Clean up
API::getInstance()->delete($userSegmentId);
$this->disableVisitorProfile(false);
}
public function testPluginSegmentIsDisabledWhenPluginUnavailable()
{
// Create a new segment that uses the userId property
$definition = 'browserName==Chrome';
$name = 'browserName';
$browserNameSegmentId = API::getInstance()->add($name, $definition, $this->idSite, $autoArchive = 1, $enabledAllUsers = 1);
// Check it is returned by the API get all segment call
$this->checkSegmentAvailable($definition, $name, true);
// Disable the devices detection plugin so the browser name metric will be unavailable
\Piwik\Plugin\Manager::getInstance()->deactivatePlugin('DevicesDetection');
\Piwik\Plugin\Manager::getInstance()->unloadPlugin('DevicesDetection');
$this->flushCaches();
// Check that the new segment is no longer returned by the API
$this->checkSegmentAvailable($definition, $name, false);
// Clean up
\Piwik\Plugin\Manager::getInstance()->loadPlugin('DevicesDetection');
\Piwik\Plugin\Manager::getInstance()->installLoadedPlugins();
\Piwik\Plugin\Manager::getInstance()->activatePlugin('DevicesDetection');
API::getInstance()->delete($browserNameSegmentId);
$this->flushCaches();
}
/**
* Disable the visitorlog feature
*
* @param bool $status
*
* @return void
* @throws \Exception
*/
private function disableVisitorProfile(bool $status): void
{
$settings = new SystemSettings();
$settings->disableVisitorLog->setValue($status);
$settings->disableVisitorProfile->setValue($status);
$settings->save();
$this->flushCaches();
}
/**
* Flush the caches that contain cached segment data
*
* @return void
*/
private function flushCaches(): void
{
Cache::getLazyCache()->flushAll();
Cache::getEagerCache()->flushAll();
Cache::getTransientCache()->flushAll();
}
/**
* Check if a segment is available
*
* @param string $definition
* @param string $name
* @param bool $shouldBeEnabled
*
* @return void
*/
private function checkSegmentAvailable(string $definition, string $name, bool $shouldBeEnabled): void
{
$expected = [];
if ($shouldBeEnabled) {
$expected = [0 =>
[
'idsegment' => 1,
'name' => $name,
'definition' => $definition,
'hash' => md5($definition),
'login' => 'super user was set',
'enable_all_users' => 1,
'enable_only_idsite' => 1,
'auto_archive' => 1,
'ts_last_edit' => null,
'deleted' => 0,
]
];
}
$segments = API::getInstance()->getAll($this->idSite);
if (isset($segments[0]['ts_created'])) {
unset($segments[0]['ts_created']);
}
$this->assertEquals($expected, $segments);
}
}