1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-24 16:07:37 +00:00
Files
matomo/plugins/PrivacyManager/tests/Integration/Model/LogDataAnonymizationsTest.php
Stefan Giehl d6d72d1fa7 [Coding Style] Enable rule PSR1.Methods.CamelCapsMethodName.NotCamelCaps (#22144)
* [Coding Style] Enable rule PSR1.Methods.CamelCapsMethodName.NotCamelCaps

* [Coding Style] Use camel case for method names in API plugin tests (#22145)

* [Coding Style] Use camel case for method names in Core* plugin tests (#22147)

* [Coding Style] Use camel case for method names in core Unit tests (#22149)

* [Coding Style] Use camel case for method names in Actions and BulkTracking plugin tests (#22146)

* [Coding Style] Use camel case for method names in CustomDimensions and CustomJSTracker plugin tests (#22148)

* [Coding Style] Use camel case for method names in core Integration tests (#22151)

* [Coding Style] Use camel case for method names in more core plugin tests (#22153)

* [Coding Style] Use camel case for method names in more core plugin tests (#22157)

* [Coding Style] Use camel case for method names in more core plugin tests

* Update plugins/Monolog/tests/Unit/Processor/ExceptionToTextProcessorTest.php

Co-authored-by: Michal Kleiner <michal@innocraft.com>

---------

Co-authored-by: Michal Kleiner <michal@innocraft.com>

* [Coding Style] Use camel case for method names in more core plugin tests (#22159)

* [Coding Style] Use camel case for method names in remaining tests (#22160)

* [Coding Style] Use camel case for method names in remaining tests

* rename expected test files

---------

Co-authored-by: Michal Kleiner <michal@innocraft.com>
2024-04-25 20:57:55 +02:00

319 خطوط
12 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\Plugins\PrivacyManager\tests\Integration\Model;
use Piwik\DbHelper;
use Piwik\Plugins\PrivacyManager\Dao\LogDataAnonymizer;
use Piwik\Plugins\PrivacyManager\Model\LogDataAnonymizations;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
/**
* Class LogDataAnonymizationsTest
*
* @group Plugins
*/
class LogDataAnonymizationsTest extends IntegrationTestCase
{
/**
* @var LogDataAnonymizations
*/
private $dao;
private $tableName;
public function setUp(): void
{
parent::setUp();
$this->tableName = LogDataAnonymizations::getDbTableName();
$this->dao = new LogDataAnonymizations(new LogDataAnonymizer());
}
public function testShouldInstallTable()
{
$columns = DbHelper::getTableColumns($this->tableName);
$columns = array_keys($columns);
$this->assertEquals(array('idlogdata_anonymization', 'idsites', 'date_start', 'date_end', 'anonymize_ip', 'anonymize_location', 'anonymize_userid', 'unset_visit_columns', 'unset_link_visit_action_columns', 'output', 'scheduled_date', 'job_start_date', 'job_finish_date', 'requester'), $columns);
}
public function testShouldBeAbleToUninstallTable()
{
$this->expectException(\Zend_Db_Statement_Exception::class);
$this->expectExceptionMessage('privacy_logdata_anonymizations');
$this->dao->uninstall();
try {
DbHelper::getTableColumns($this->tableName);
$this->fail('Did not uninstall privacy_logdata_anonymizations table');
} catch (\Zend_Db_Statement_Exception $e) {
$this->dao->install();
throw $e;
}
$this->dao->install();
}
public function testScheduleEntryFailsWhenNoDateGiven()
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('General_ValidatorErrorEmptyValue');
$this->scheduleEntry(null, null);
}
public function testScheduleEntryFailsWhenInvalidDateGiven()
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('General_ExceptionInvalidDateFormat');
$this->scheduleEntry(null, 'foobar');
}
public function testScheduleEntryFailsWhenInvalidVisitColumnsGiven()
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('The column "visitor_foobar_Baz" seems to not exist in log_visit');
$this->scheduleEntry(null, '2018-01-02', false, false, false, ['visitor_localtime', 'visitor_foobar_Baz', 'config_device_type']);
}
public function testScheduleEntryFailsWhenInvalidLinkVisitActionColumnsGiven()
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('The column "idaction_foobar_baz" seems to not exist in log_link_visit_action');
$this->scheduleEntry(null, '2018-01-02', false, false, false, [], ['idaction_event_category', 'idaction_foobar_baz']);
}
public function testScheduleEntryFailsWhenNoWorkScheduled()
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('Nothing is selected to be anonymized');
$this->scheduleEntry(null, '2018-01-02', false, false, false, [], []);
}
public function testScheduleEntrySuccess()
{
$id = $this->scheduleEntry(null, '2017-01-03', true, true, true, ['visitor_localtime', 'config_device_type'], ['idaction_event_category'], 'mylogin');
$this->assertSame(1, $id);
$entry = $this->dao->getEntry($id);
$this->assertNotEmpty($entry['scheduled_date']);
unset($entry['scheduled_date']);
$this->assertSame(array(
'idlogdata_anonymization' => 1,
'idsites' => null,
'date_start' => '2017-01-03 00:00:00',
'date_end' => '2017-01-03 23:59:59',
'anonymize_ip' => true,
'anonymize_location' => true,
'anonymize_userid' => true,
'unset_visit_columns' => array ('visitor_localtime','config_device_type'),
'unset_link_visit_action_columns' => array('idaction_event_category'),
'output' => null,
'job_start_date' => null,
'job_finish_date' => null,
'requester' => 'mylogin',
'sites' => array ('All Websites')
), $entry);
}
public function testScheduleEntrySuccessStartDirectlySetsDateAndAlsoTestingDifferentSettings()
{
$id = $this->scheduleStartedEntry(null, '2017-03-01,2018-04-06', false, true, false, [], false, 'mylogin2');
$entry = $this->dao->getEntry($id);
$this->assertNotEmpty($entry['scheduled_date']);
$this->assertNotEmpty($entry['job_start_date']);
$this->assertSame($entry['job_start_date'], $entry['scheduled_date']);
unset($entry['scheduled_date']);
unset($entry['job_start_date']);
$this->assertSame(array(
'idlogdata_anonymization' => 1,
'idsites' => null,
'date_start' => '2017-03-01 00:00:00',
'date_end' => '2018-04-06 23:59:59',
'anonymize_ip' => false,
'anonymize_location' => true,
'anonymize_userid' => false,
'unset_visit_columns' => array (),
'unset_link_visit_action_columns' => array(),
'output' => null,
'job_finish_date' => null,
'requester' => 'mylogin2',
'sites' => array ('All Websites')
), $entry);
}
public function testScheduleEntryFailsInvalidDateRange()
{
$this->expectException(\Exception::class);
$this->expectExceptionMessage('Specified date range is invalid.');
$this->scheduleStartedEntry(null, '2018-04-06,2017-03-01', false, true, [], false, 'mylogin2');
}
public function testScheduleEntrySuccessIdSites()
{
$id = $this->scheduleEntry(['4', 5, 10, '402foo']);
$entry = $this->dao->getEntry($id);
$this->assertSame([4,5,10,402], $entry['idsites']);
$this->assertSame(['Site ID: 4', 'Site ID: 5', 'Site ID: 10', 'Site ID: 402'], $entry['sites']);
}
public function testScheduleEntrySuccessIncreasesId()
{
$id = $this->scheduleEntry();
$this->assertSame(1, $id);
$id = $this->scheduleEntry();
$this->assertSame(2, $id);
}
public function testGetAllEntriesReturnsEmptyArrayWhenNoEntriesExist()
{
$this->assertSame(array(), $this->dao->getAllEntries());
}
public function testGetAllEntriesReturnsAllEntriesThatExist()
{
$id1 = $this->scheduleEntry();
$id2 = $this->scheduleEntry();
$entries = $this->dao->getAllEntries();
$this->assertCount(2, $entries);
$this->assertDefaultEntry($entries[0], $id1);
$this->assertDefaultEntry($entries[1], $id2);
}
public function testGetEntryDoesNotFindEntryWhenNoEntryExists()
{
$this->assertFalse($this->dao->getEntry(5));
}
public function testGetEntryDoesNotFindEntryWhenNotExists()
{
$this->scheduleEntry();
$this->assertFalse($this->dao->getEntry(999));
}
public function testGetEntrySuccessFindsEntryAndFormatsIt()
{
$id = $this->scheduleEntry();
$entry = $this->dao->getEntry($id);
$this->assertDefaultEntry($entry, 1);
}
public function testGetNextScheduledAnonymizationIdReturnsNoEntryWhenNoEntryExists()
{
$this->assertFalse($this->dao->getNextScheduledAnonymizationId());
}
public function testGetNextScheduledAnonymizationIdReturnsNoEntryWhenOnlyStartedEntriesExist()
{
$this->scheduleStartedEntry();
$this->scheduleStartedEntry();
$this->assertFalse($this->dao->getNextScheduledAnonymizationId());
}
public function testGetNextScheduledAnonymizationIdReturnsNextUnstartedEntry()
{
$this->scheduleStartedEntry();
$id1 = $this->scheduleEntry();
$this->scheduleStartedEntry();
$id2 = $this->scheduleEntry();
$this->assertSame($id1, $this->dao->getNextScheduledAnonymizationId());
// returns it again when calling it again
$this->assertSame($id1, $this->dao->getNextScheduledAnonymizationId());
// now we execute the task
$this->dao->executeScheduledEntry($id1);
// should return next id
$this->assertSame($id2, $this->dao->getNextScheduledAnonymizationId());
}
public function testExecuteScheduledEntrySimpleExecutionWithAllFeaturesEnabledWhenNoTrackedDataOtherTestsBeDoneInSystemTests()
{
$id = $this->scheduleEntry(null, '2017-01-03', true, true, true, ['visitor_localtime', 'config_device_type'], ['idaction_event_category'], 'mylogin');
// now we execute the task
$this->dao->executeScheduledEntry($id);
$entry = $this->dao->getEntry($id);
$this->assertNotEmpty($entry['scheduled_date']);
$this->assertNotEmpty($entry['job_start_date']);
$this->assertNotEmpty($entry['job_finish_date']);
$this->assertSame($entry['job_start_date'], $entry['scheduled_date']);
unset($entry['scheduled_date']);
unset($entry['job_start_date']);
unset($entry['job_finish_date']);
$this->assertSame(array(
'idlogdata_anonymization' => 1,
'idsites' => null,
'date_start' => '2017-01-03 00:00:00',
'date_end' => '2017-01-03 23:59:59',
'anonymize_ip' => true,
'anonymize_location' => true,
'anonymize_userid' => true,
'unset_visit_columns' => array ('visitor_localtime','config_device_type'),
'unset_link_visit_action_columns' => array('idaction_event_category'),
'output' => "Running behaviour on all sites.
Applying this to visits between '2017-01-03 00:00:00' and '2017-01-03 23:59:59'.
Starting to anonymize visit information.
Number of anonymized IP and/or location and/or User ID: 0
Starting to unset log_visit table entries.
Number of unset log_visit table entries: 0
Starting to unset log_conversion table entries (if possible).
Number of unset log_conversion table entries: 0
Starting to unset log_link_visit_action table entries.
Number of unset log_link_visit_action table entries: 0
",
'requester' => 'mylogin',
'sites' => array ('All Websites')
), $entry);
}
private function assertDefaultEntry($entry, $expectedId)
{
$this->assertNotEmpty($entry['scheduled_date']);
unset($entry['scheduled_date']);
$this->assertSame(array(
'idlogdata_anonymization' => $expectedId,
'idsites' => null,
'date_start' => '2018-01-01 00:00:00',
'date_end' => '2018-01-01 23:59:59',
'anonymize_ip' => true,
'anonymize_location' => false,
'anonymize_userid' => false,
'unset_visit_columns' => array (),
'unset_link_visit_action_columns' => array(),
'output' => null,
'job_start_date' => null,
'job_finish_date' => null,
'requester' => 'CLI',
'sites' => array ('All Websites')
), $entry);
}
private function scheduleEntry($idSites = null, $dateString = '2018-01-01', $anonymizeIp = true, $anonymizeLocation = false, $anonymizeUserId = false, $unsetVisitColumns = [], $unsetLinkVisitActionColumns = [], $requester = 'CLI')
{
return $this->dao->scheduleEntry($requester, $idSites, $dateString, $anonymizeIp, $anonymizeLocation, $anonymizeUserId, $unsetVisitColumns, $unsetLinkVisitActionColumns, $start = false);
}
private function scheduleStartedEntry($idSites = null, $dateString = '2018-01-01', $anonymizeIp = true, $anonymizeLocation = false, $anonymizeUserId = false, $unsetVisitColumns = [], $unsetLinkVisitActionColumns = [], $requester = 'CLI')
{
return $this->dao->scheduleEntry($requester, $idSites, $dateString, $anonymizeIp, $anonymizeLocation, $anonymizeUserId, $unsetVisitColumns, $unsetLinkVisitActionColumns, $start = true);
}
}