1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-22 06:57:53 +00:00
Files
matomo/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
Stefan Giehl bc57393e16 Adds new hits metric to Actions.get report and All Websites Dashboard (#22731)
* Adds RecordBuilder to archive hits metric

* Add hits metric to Actions.get report

* Adds update script to automatically rearchive hits metric for current year

* Add hits metric to all websites dashboard

* Adjust some broken tests

* updates expected test files

* apply review feedback
2024-11-11 22:17:29 +01:00

311 خطوط
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\Tests\System;
use Piwik\Common;
use Piwik\Db;
use Piwik\Plugin\Manager;
use Piwik\Plugins\VisitFrequency\API as VisitFrequencyApi;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
use Piwik\Tests\Fixtures\SqlDump;
use Piwik\Tests\Framework\Fixture;
/**
* Tests that Piwik 2.0 works w/ data from Piwik 1.12.
*
* @group BackwardsCompatibility1XTest
* @group Core
*/
class BackwardsCompatibility1XTest extends SystemTestCase
{
public const FIXTURE_LOCATION = '/tests/resources/piwik-1.13-dump.sql';
/** @var SqlDump $fixture */
public static $fixture = null; // initialized below class
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
$installedPlugins = Manager::getInstance()->getInstalledPluginsName();
// ensure all plugins are installed correctly (some plugins database tables would be missing otherwise)
foreach ($installedPlugins as $installedPlugin) {
\Piwik\Plugin\Manager::getInstance()->loadPlugin($installedPlugin)->install();
}
$result = Fixture::updateDatabase();
if ($result === false) {
throw new \Exception("Failed to update pre-2.0 database (nothing to update).");
}
// truncate log tables so old data won't be re-archived
foreach (['log_visit', 'log_link_visit_action', 'log_conversion', 'log_conversion_item'] as $table) {
Db::query("TRUNCATE TABLE " . Common::prefixTable($table));
}
self::trackTwoVisitsOnSameDay();
// launch archiving
VisitFrequencyApi::getInstance()->get(1, 'year', '2012-12-29');
}
/**
* add two visits from same visitor on dec. 29
*/
private static function trackTwoVisitsOnSameDay()
{
$t = Fixture::getTracker(1, '2012-12-29 01:01:30', $defaultInit = true, $useLocal = true);
$t->enableBulkTracking();
$t->setUrl('http://site.com/index.htm');
$t->setIp('136.5.3.2');
$t->doTrackPageView('incredible title!');
$t->setForceVisitDateTime('2012-12-29 03:01:30');
$t->setUrl('http://site.com/other/index.htm');
$t->doTrackPageView('other incredible title!');
$t->doBulkTrack();
}
/**
* @dataProvider getApiForTesting
*/
public function testApi($api, $params)
{
// note: not sure why I have to manually activate plugin in order for `./console tests:run BackwardsCompatibility1XTest` to work
try {
\Piwik\Plugin\Manager::getInstance()->activatePlugin('DevicesDetection');
} catch (\Exception $e) {
}
$this->runApiTests($api, $params);
}
public function getApiForTesting()
{
$idSite = 1;
$dateTime = '2012-03-06 11:22:33';
// page performance metrics added in Matomo 4
$performanceMetrics = [
'sum_time_generation',
'nb_hits_with_time_generation',
'min_time_generation',
'max_time_generation',
'sum_time_network',
'nb_hits_with_time_network',
'min_time_network',
'max_time_network',
'sum_time_server',
'nb_hits_with_time_server',
'min_time_server',
'max_time_server',
'sum_time_transfer',
'nb_hits_with_time_transfer',
'min_time_transfer',
'max_time_transfer',
'sum_time_dom_processing',
'nb_hits_with_time_dom_processing',
'min_time_dom_processing',
'max_time_dom_processing',
'sum_time_dom_completion',
'nb_hits_with_time_dom_completion',
'min_time_dom_completion',
'max_time_dom_completion',
'sum_time_on_load',
'nb_hits_with_time_on_load',
'min_time_on_load',
'max_time_on_load',
'avg_time_generation',
'avg_time_network',
'avg_time_server',
'avg_time_transfer',
'avg_time_dom_processing',
'avg_time_dom_completion',
'avg_time_on_load',
'avg_page_load_time',
];
$defaultOptions = [
'idSite' => $idSite,
'date' => $dateTime,
'disableArchiving' => true,
'otherRequestParameters' => [
// when changing this, might also need to change the same line in OneVisitorTwoVisitsTest.php
'hideColumns' => 'nb_users,sum_bandwidth,nb_hits_with_bandwidth,min_bandwidth,max_bandwidth'
],
'xmlFieldsToRemove' => array_merge([
'entry_sum_visit_length',
'sum_visit_length',
'nb_visits_converted',
'interactionPosition',
'pageviewPosition',
], $performanceMetrics),
];
/**
* When Piwik\Tests\System\BackwardsCompatibility1XTest is failing,
* as this test compares fixtures to OneVisitorTwoVisits* fixtures,
* sometimes for a given API method that fails to generate the same output as OneVisitorTwoVisits does,
* we need to add the API below which will cause the fixtures for this API to be created in processed/
*/
$reportsToCompareSeparately = [
// those reports generate a different segment as a different raw value was stored that time
'DevicesDetection.getOsVersions',
'DevicesDetection.getBrowserVersions',
'DevicesDetection.getBrowserEngines',
'DevicesDetection.getBrowsers',
'Goals.get',
// Following #9345
'Actions.getPageUrls',
'Actions.getDownloads',
'Actions.getDownload',
'Actions.getEntryPageUrls',
'Actions.getExitPageUrls',
'Actions.getPageTitle',
// new flag dimensions
'UserCountry.getCountry',
'Tour.getLevel',
'Tour.getChallenges'
];
$apiNotToCall = [
// in the SQL dump, a referrer is named referer.com, but now in OneVisitorTwoVisits it is referrer.com
'Referrers',
// changes made to SQL dump to test VisitFrequency change the day of week
'VisitTime.getByDayOfWeek',
// did not exist in Piwik 1.X
'DevicesDetection.getBrowserEngines',
// now enriched with goal metrics
'DevicesDetection.getType',
'DevicesDetection.getBrand',
'DevicesDetection.getModel',
// different result as some plugins have been removed in Matomo 4
'DevicePlugins.getPlugin',
// has different output before and after
'PrivacyManager.getAvailableVisitColumnsToAnonymize',
// we test VisitFrequency explicitly
'VisitFrequency.get',
// do not test as label formats have changed
'VisitTime.getVisitInformationPerLocalTime',
'VisitTime.getVisitInformationPerServerTime',
// the Actions.getPageTitles test fails for unknown reason, so skipping it
// @todo check if that still the case
'Actions.getPageTitles',
'Actions.getEntryPageTitles', // segment values can differ due to missing metadata in old reports
'Actions.getExitPageTitles',
// Outlinks now tracked with URL Fragment which was not the case in 1.X
'Actions.get',
'Actions.getOutlink',
'Actions.getOutlinks',
// system settings such as enable_plugin_update_communication are enabled by default in newest version,
// but ugpraded Piwik are not
'CorePluginsAdmin.getSystemSettings',
// visit length changes slightly with change to previous visitor detection in #13935
'VisitsSummary.getSumVisitsLength',
'VisitsSummary.getSumVisitsLengthPretty',
// did not exist before Matomo 4
'PagePerformance.get',
// Did not exist before Matomo 4.11.
'MultiSites.getAllWithGroups',
// compare separately, as changes in columns
'MultiSites.getAll',
'MultiSites.getOne',
];
if (!Manager::getInstance()->isPluginActivated('CustomVariables')) {
// includes some columns that are not available when CustomVariables plugin is not available
$apiNotToCall[] = 'PrivacyManager.getAvailableLinkVisitActionColumnsToAnonymize';
}
$apiNotToCall = array_merge($apiNotToCall, $reportsToCompareSeparately);
$allReportsOptions = $defaultOptions;
$allReportsOptions['compareAgainst'] = 'OneVisitorTwoVisits';
$allReportsOptions['apiNotToCall'] = $apiNotToCall;
return [
['all', $allReportsOptions],
['MultiSites.getAll', array_merge($defaultOptions, ['xmlFieldsToRemove' => ['hits', 'hits_evolution', 'hits_evolution_trend']])],
['MultiSites.getOne', array_merge($allReportsOptions, ['apiNotToCall' => '', 'xmlFieldsToRemove' => ['hits', 'hits_evolution', 'hits_evolution_trend']])],
['VisitFrequency.get', ['idSite' => $idSite, 'date' => '2012-03-03', 'setDateLastN' => true,
'disableArchiving' => true, 'testSuffix' => '_multipleDates']],
['VisitFrequency.get', ['idSite' => $idSite, 'date' => $dateTime,
'periods' => ['day', 'week', 'month', 'year'],
'disableArchiving' => false]],
['VisitFrequency.get', ['idSite' => $idSite, 'date' => '2012-03-06,2012-12-31',
'periods' => ['range'], 'disableArchiving' => true]],
['Actions.getPageUrls', ['idSite' => $idSite, 'date' => '2012-03-06,2012-12-31',
'otherRequestParameters' => ['expanded' => '1'],
'xmlFieldsToRemove' => $performanceMetrics,
'testSuffix' => '_expanded',
'periods' => ['range'], 'disableArchiving' => true]],
['Actions.getPageUrls', ['idSite' => $idSite, 'date' => '2012-03-06,2012-12-31',
'otherRequestParameters' => ['flat' => '1'],
'xmlFieldsToRemove' => $performanceMetrics,
'testSuffix' => '_flat',
'periods' => ['range'], 'disableArchiving' => true]],
['Actions.getPageUrls', ['idSite' => $idSite, 'date' => '2012-03-06',
'otherRequestParameters' => ['idSubtable' => '30'],
'xmlFieldsToRemove' => $performanceMetrics,
'testSuffix' => '_subtable',
'periods' => ['day'], 'disableArchiving' => true]],
['VisitFrequency.get', ['idSite' => $idSite, 'date' => '2012-03-03,2012-12-12', 'periods' => ['month'],
'testSuffix' => '_multipleOldNew', 'disableArchiving' => true]],
[$reportsToCompareSeparately, $defaultOptions],
];
}
public function provideContainerConfig()
{
return [
'Piwik\Config' => \Piwik\DI::decorate(function ($previous) {
$general = $previous->General;
$general['action_title_category_delimiter'] = "/";
$previous->General = $general;
return $previous;
}),
];
}
}
BackwardsCompatibility1XTest::$fixture = new SqlDump();
BackwardsCompatibility1XTest::$fixture->dumpUrl = PIWIK_INCLUDE_PATH . BackwardsCompatibility1XTest::FIXTURE_LOCATION;
BackwardsCompatibility1XTest::$fixture->tablesPrefix = '';