diff --git a/.github/workflows/matomo-tests.yml b/.github/workflows/matomo-tests.yml index a74c3cb..72982a5 100644 --- a/.github/workflows/matomo-tests.yml +++ b/.github/workflows/matomo-tests.yml @@ -1,7 +1,7 @@ # Action for running tests # This file has been automatically created. # To recreate it you can run this command -# ./console generate:test-action --plugin="MarketingCampaignsReporting" --php-versions="7.2,8.3" --schedule-cron="55 2 * * 6" +# ./console generate:test-action --plugin="MarketingCampaignsReporting" --php-versions="matomo5_min_php,matomo5_max_php" --schedule-cron="55 2 * * 6" name: Plugin MarketingCampaignsReporting Tests @@ -33,19 +33,17 @@ concurrency: jobs: PluginTests: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 strategy: fail-fast: false matrix: - php: [ '7.2', '8.3' ] + php: [ 'matomo5_min_php', 'matomo5_max_php' ] target: ['minimum_required_matomo', 'maximum_supported_matomo'] steps: - uses: actions/checkout@v3 with: lfs: true persist-credentials: false - - name: Install package ripgrep - run: sudo apt-get install ripgrep - name: Run tests uses: matomo-org/github-action-tests@main with: @@ -54,9 +52,9 @@ jobs: test-type: 'PluginTests' matomo-test-branch: ${{ matrix.target }} artifacts-pass: ${{ secrets.ARTIFACTS_PASS }} - upload-artifacts: ${{ matrix.php == '7.2' && matrix.target == 'maximum_supported_matomo' }} + upload-artifacts: ${{ matrix.php == 'matomo5_min_php' && matrix.target == 'maximum_supported_matomo' }} UI: - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v3 with: @@ -68,7 +66,7 @@ jobs: plugin-name: 'MarketingCampaignsReporting' matomo-test-branch: 'maximum_supported_matomo' test-type: 'UI' - php-version: '7.2' + php-version: 'matomo5_min_php' node-version: '16' artifacts-pass: ${{ secrets.ARTIFACTS_PASS }} upload-artifacts: true diff --git a/.github/workflows/phpcs.yml b/.github/workflows/phpcs.yml new file mode 100644 index 0000000..d03b651 --- /dev/null +++ b/.github/workflows/phpcs.yml @@ -0,0 +1,43 @@ +name: PHPCS check + +on: pull_request + +permissions: + actions: read + checks: read + contents: read + deployments: none + issues: read + packages: none + pull-requests: read + repository-projects: none + security-events: none + statuses: read + +jobs: + phpcs: + name: PHPCS + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + with: + lfs: false + persist-credentials: false + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '7.4' + tools: cs2pr + - name: Install dependencies + run: + composer init --name=matomo/marketingcampaignsreporting --quiet; + composer --no-plugins config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true -n; + composer config repositories.matomo-coding-standards vcs https://github.com/matomo-org/matomo-coding-standards -n; + composer require matomo-org/matomo-coding-standards:dev-master; + composer install --dev --prefer-dist --no-progress --no-suggest + - name: Check PHP code styles + id: phpcs + run: ./vendor/bin/phpcs --report-full --standard=phpcs.xml --report-checkstyle=./phpcs-report.xml + - name: Show PHPCS results in PR + if: ${{ always() && steps.phpcs.outcome == 'failure' }} + run: cs2pr ./phpcs-report.xml --prepend-filename diff --git a/API.php b/API.php index 39d94ff..0a5ed27 100644 --- a/API.php +++ b/API.php @@ -1,4 +1,5 @@ getRowsCount() == 0; - } else if ($dataTable instanceof DataTable\Map) { + } elseif ($dataTable instanceof DataTable\Map) { foreach ($dataTable->getDataTables() as $label => $childTable) { if ($this->isTableEmpty($childTable)) { return true; @@ -168,9 +169,10 @@ private function isTableEmpty(DataTable\DataTableInterface $dataTable) } } - private function mergeDataTableMaps(DataTable\DataTableInterface $dataTable, - DataTable\DataTableInterface $referrersDataTable) - { + private function mergeDataTableMaps( + DataTable\DataTableInterface $dataTable, + DataTable\DataTableInterface $referrersDataTable + ) { if ($dataTable instanceof DataTable) { if ($this->isTableEmpty($dataTable)) { $referrersDataTable->setAllTableMetadata($dataTable->getAllTableMetadata()); @@ -178,7 +180,7 @@ private function mergeDataTableMaps(DataTable\DataTableInterface $dataTable, } else { return $dataTable; } - } else if ($dataTable instanceof DataTable\Map) { + } elseif ($dataTable instanceof DataTable\Map) { foreach ($dataTable->getDataTables() as $label => $childTable) { $newTable = $this->mergeDataTableMaps($childTable, $referrersDataTable->getTable($label)); $dataTable->addTable($newTable, $label); @@ -188,5 +190,4 @@ private function mergeDataTableMaps(DataTable\DataTableInterface $dataTable, throw new \Exception("Sanity check: unknown datatable type '" . get_class($dataTable) . "'."); } } - } diff --git a/Archiver.php b/Archiver.php index 081e808..501f852 100644 --- a/Archiver.php +++ b/Archiver.php @@ -1,4 +1,5 @@ visitProperties->getProperties(); + // @todo Not using Common::REFERRER_TYPE_AI_ASSISTANT for BC reasons. Can be changed with Matomo 6 + if ($visitProperties['referer_type'] === 8) { + return null; // skip campaign detection when a AI assistant was detected as referrer by core + } + $campaignDimensions = $campaignDetector->detectCampaignFromRequest( $request, $campaignParameters @@ -52,7 +58,6 @@ public function onNewVisit(Request $request, Visitor $visitor, $action) // If for some reason a campaign was detected in Core Tracker // but not here, copy that campaign to the Advanced Campaign if ($visitProperties['referer_type'] == Common::REFERRER_TYPE_CAMPAIGN) { - $campaignDimensions = array( (new CampaignName())->getColumnName() => $visitProperties['referer_name'] ); @@ -82,6 +87,11 @@ public function onAnyGoalConversion(Request $request, Visitor $visitor, $action) $visitProperties = $visitor->visitProperties->getProperties(); + // @todo Not using Common::REFERRER_TYPE_AI_ASSISTANT for BC reasons. Can be changed with Matomo 6 + if ($visitProperties['referer_type'] === 8) { + return null; // skip campaign detection when a AI assistant was detected as referrer by core + } + $campaignDimensions = $campaignDetector->detectCampaignFromVisit( $visitProperties, $campaignParameters diff --git a/Columns/CampaignContent.php b/Columns/CampaignContent.php index 19a169f..941cbef 100644 --- a/Columns/CampaignContent.php +++ b/Columns/CampaignContent.php @@ -1,4 +1,5 @@ getVisitorColumn('referer_type') === 8 && !empty($campaignDimensions) && count($campaignDimensions) === 1) { + $paramValue = reset($campaignDimensions); + if (class_exists('Piwik\Plugins\Referrers\AIAssistant') && \Piwik\Plugins\Referrers\AIAssistant::getInstance()->getAIAssistantFromDomain($paramValue)) { + return false; + } + } + // we force a new visit if the referrer is a campaign and it's different than the currently recorded referrer. // if the current referrer is 'direct entry', however, we assume the referrer information was sent in a later request, and // we just update the existing referrer information instead of creating a visit. - if (!empty($campaignDimensions) + if ( + !empty($campaignDimensions) && $this->isCampaignInformationNew($visitor, $campaignDimensions) ) { Common::printDebug("Existing visit detected, but creating new visit because campaign information is different than last action."); diff --git a/Columns/CampaignPlacement.php b/Columns/CampaignPlacement.php index 5ad93be..9c693af 100644 --- a/Columns/CampaignPlacement.php +++ b/Columns/CampaignPlacement.php @@ -1,4 +1,5 @@ 'removeOriginalCampaignReport', 'Insights.addReportToOverview' => 'addReportToInsightsOverview', 'AssetManager.getStylesheetFiles' => 'getStylesheetFiles', + 'Plugin.shouldLowerCampaignCase' => 'shouldLowerCampaignCase', ); } @@ -119,4 +121,10 @@ public function isTrackerPlugin() { return true; } + + public function shouldLowerCampaignCase($pluginName, &$shouldLowerCampaignCase) + { + $systemSettings = StaticContainer::get(SystemSettings::class); + $shouldLowerCampaignCase = !$systemSettings->doNotChangeCaseOfUtmParameters->getValue(); + } } diff --git a/README.md b/README.md index 3882de1..47275b4 100644 --- a/README.md +++ b/README.md @@ -87,30 +87,8 @@ campaign_placement = "mtm_placement" ``` For example, by default parameter `campaign_name` track following parameters if they are found in URL: `'mtm_campaign', 'matomo_campaign', 'mtm_cpn', 'utm_campaign'`. If you configure `campaign_name` like this `campaign_name="mtm_campaign,custom_name_parameter"`, then parameter `campaign_name` will detect only presence of `mtm_campaign` and `custom_name_parameter` in URL. `matomo_campaign`, `mtm_cpn`, `utm_campaign` will be ignored until they are present in config. -All parameter are case-insensitiv except optional mtm_clid. - -## Changelog -* 5.0.2 (Oct 09th 2023) Archiving: Ensure parameter is provided in correct type -* 5.0.1 (Aug 09th 2023) Compatability with Matomo 5 -* 5.0.0-b1 (May 05th 2023) Compatability with Matomo 5 -* 4.1.3 (Aug 01st 2022) Translation changes -* 4.1.2 (Dec 20th 2021) Allowed creating new visit when campaign changes to be different per site if necessary -* 4.1.1 (Nov 15th 2021) Fixed deprecation warnings for PHP 8.1 -* 4.1.0 (Nov 10th 2020) Additional dimensions for campaign group and placement -* 4.0.0 (July 29th 2020) Compatibility with Matomo 4 and translation updates -* 3.1.1 (June 18th 2018) Rebrand and translation updates -* 3.1.0 (Sept 5th 2017) Show campaign information in visitor log and profile -* 3.0.1 (Mar 16th 2017) Enables segmented visitorlog for campaign reports -* 3.0.0 (March 2017) Plugin forked by Piwik team + Renamed + Compatibility with Piwik 3 -* 1.4.0 Added possibility to configure custom campaign parameters names -* 1.3.1 Better support for campaign parameters behind hash tag (#) -* 1.3.0 Compatibility with Piwik 2.16.0 -* 1.2.0 (Nov 10th 2015) - Plugin comaptibility with Piwik 2.15.0 -* 1.1.1 (Sept 3rd 2015) - Campaign reports now display your campaign report data even for campaign data before you activated AdvancedCampaignReporting -* 1.1.0 (July 28th 2015) -* 1.0.8 (Apr 1st 2015) - Exclude Google Analytics campaign parameters from the Page URLs -* 1.0.6 (Nov 17th 2014) - Documentation -* 1.0.5 (Nov 14th 2014) - Detect new URL parameters: piwik_campaign, pk_cpn and for Keywords: pk_kwd, piwik_keyword -* 1.0.4 (Nov 4th 2014) - View Goals by Campaign Dimension in the Goals & Ecommerce reports -* 1.0.3 (Oct 1st 2014) - Released for free on the [Piwik Marketplace](http://plugins.piwik.org/) + +All parameter keys are case‑sensitive. For example, if you set `campaign_group = "mtm_group"`, it will match only `mtm_group`, not `MTM_GROUP`. + +All Parameter values are case‑insensitive unless the `Keep campaign parameter capitalisation` setting is enabled. For example, when the setting is disabled, values like `SummerSale` and `summersale` are treated as identical. diff --git a/RecordBuilders/CampaignReporting.php b/RecordBuilders/CampaignReporting.php index a9d62ae..cfebb64 100644 --- a/RecordBuilders/CampaignReporting.php +++ b/RecordBuilders/CampaignReporting.php @@ -1,4 +1,5 @@ doNotChangeCaseOfUtmParameters->getValue()) { + $newDimensions = []; + foreach ($dimensions as $dimension) { + $lowerDimensionColumn = $table . '.' . $dimension; + $newDimensions[$dimension] = "LOWER($lowerDimensionColumn)"; + } + $dimensions = $newDimensions; + } + $whereClause = $table . ".referer_type = " . Common::REFERRER_TYPE_CAMPAIGN; - $query = $logAggregator->$aggregatorMethod($dimensions, $whereClause); + $query = $aggregatorMethod === 'queryConversionsByDimension' && version_compare(Version::VERSION, '5.2.0-b6', '>=') + ? $logAggregator->$aggregatorMethod($dimensions, $whereClause, [], [], false, false, true) + : $logAggregator->$aggregatorMethod($dimensions, $whereClause); $recordToDimensions = $this->getRecordToDimensions(); @@ -101,7 +117,7 @@ protected function aggregateFromLogs(LogAggregator $logAggregator, array $record Metrics::INDEX_BOUNCE_COUNT => $row[Metrics::INDEX_BOUNCE_COUNT], Metrics::INDEX_NB_VISITS_CONVERTED => $row[Metrics::INDEX_NB_VISITS_CONVERTED], ]; - } else if ($aggregatorMethod == 'queryConversionsByDimension') { + } elseif ($aggregatorMethod == 'queryConversionsByDimension') { $idGoal = (int) $row['idgoal']; $columns = [ Metrics::INDEX_GOALS => [ @@ -130,14 +146,15 @@ protected function getLabelFromRowDimensions(array $dimensionsAsLabel, array $ro { $labels = []; foreach ($dimensionsAsLabel as $dimensionLabelPart) { - if (isset($row[$dimensionLabelPart]) + if ( + isset($row[$dimensionLabelPart]) && $row[$dimensionLabelPart] != '' ) { $labels[] = $row[$dimensionLabelPart]; } } - $label = implode(Archiver::SEPARATOR_COMBINED_DIMENSIONS, $labels); - return $label; + + return implode(Archiver::SEPARATOR_COMBINED_DIMENSIONS, $labels); } protected function getRecordToDimensions(): array diff --git a/Reports/Base.php b/Reports/Base.php index 9393371..6d11c5f 100644 --- a/Reports/Base.php +++ b/Reports/Base.php @@ -1,4 +1,5 @@ doNotChangeCaseOfUtmParameters = $this->makeSetting('doNotChangeCaseOfUtmParameters', true, FieldConfig::TYPE_BOOL, function (FieldConfig $field) { + $field->title = Piwik::translate('MarketingCampaignsReporting_DoNotChangeCaseOfUtmParametersTitle'); + $field->description = Piwik::translate('MarketingCampaignsReporting_DoNotChangeCaseOfUtmParametersDescription'); + $field->uiControl = FieldConfig::UI_CONTROL_CHECKBOX; + }); + } +} diff --git a/Tracker/RequestProcessor.php b/Tracker/RequestProcessor.php index 36a60a9..4a50193 100644 --- a/Tracker/RequestProcessor.php +++ b/Tracker/RequestProcessor.php @@ -1,4 +1,5 @@ getProperty('referer_type') === 8) { + return; // skip campaign detection when a AI assistant was detected as referrer by core + } + $campaignName = $visitProperties->getProperty((new CampaignName())->getColumnName()); $campaignKeyword = $visitProperties->getProperty((new CampaignKeyword())->getColumnName()); $campaignMedium = $visitProperties->getProperty((new CampaignMedium())->getColumnName()); @@ -32,9 +38,11 @@ public function onNewVisit(Tracker\Visit\VisitProperties $visitProperties, Track $campaignGroup = $visitProperties->getProperty((new CampaignGroup())->getColumnName()); $campaignPlacement = $visitProperties->getProperty((new CampaignPlacement())->getColumnName()); - if (!empty($campaignContent) || !empty($campaignId) || !empty($campaignKeyword) || + if ( + !empty($campaignContent) || !empty($campaignId) || !empty($campaignKeyword) || !empty($campaignMedium) || !empty($campaignName) || !empty($campaignSource) || - !empty($campaignGroup) || !empty($campaignPlacement)) { + !empty($campaignGroup) || !empty($campaignPlacement) + ) { $visitProperties->setProperty('referer_type', Common::REFERRER_TYPE_CAMPAIGN); } diff --git a/Updates/5.1.0.php b/Updates/5.1.0.php new file mode 100644 index 0000000..2e456f4 --- /dev/null +++ b/Updates/5.1.0.php @@ -0,0 +1,38 @@ +migration = $factory; + } + + public function doUpdate(Updater $updater) + { + // set the SystemSetting to false for existing installs as it will be true by default + $systemSettings = StaticContainer::get(SystemSettings::class); + $systemSettings->doNotChangeCaseOfUtmParameters->setIsWritableByCurrentUser(true); + $systemSettings->doNotChangeCaseOfUtmParameters->setValue(false); + $systemSettings->save(); + } +} diff --git a/VisitorDetails.php b/VisitorDetails.php index 89be10e..1b0303a 100644 --- a/VisitorDetails.php +++ b/VisitorDetails.php @@ -1,4 +1,5 @@ + + + Matomo Coding Standard for MarketingCampaignsReporting plugin + + + + . + + tests/javascript/* + */vendor/* + + + + + + + + tests/* + + + + + Updates/* + + + + + tests/* + + + + + tests/* + + \ No newline at end of file diff --git a/plugin.json b/plugin.json index da2d4d4..7c8b650 100644 --- a/plugin.json +++ b/plugin.json @@ -1,7 +1,7 @@ { "name": "MarketingCampaignsReporting", "description": "Measure the effectiveness of your marketing campaigns. New reports, segments & track up to five channels: campaign, source, medium, keyword, content.", - "version": "5.0.2", + "version": "5.1.5", "keywords": ["Campaign", "Marketing", "Channels", "UTM tags"], "license": "GPL v3+", "homepage": "https://matomo.org", @@ -21,5 +21,6 @@ "email": "hello@matomo.org", "homepage": "https://matomo.org" } - ] + ], + "category": "insights" } diff --git a/pull_request_template.md b/pull_request_template.md new file mode 100644 index 0000000..e7d9cf5 --- /dev/null +++ b/pull_request_template.md @@ -0,0 +1,26 @@ +## Description + + +## Issue No + + +## Steps to Replicate the Issue +1. +2. +3. + + + +## Checklist +- [✔/✖] Tested locally or on demo2/demo3? +- [✔/✖/NA] New test case added/updated? +- [✔/✖/NA] Are all newly added texts included via translation? +- [✔/✖/NA] Are text sanitized properly? (Eg use of v-text v/s v-html for vue) +- [✔/✖/NA] Version bumped? \ No newline at end of file diff --git a/tests/Fixtures/TrackAdvancedCampaigns.php b/tests/Fixtures/TrackAdvancedCampaigns.php index 9ec9cdd..e1d4147 100644 --- a/tests/Fixtures/TrackAdvancedCampaigns.php +++ b/tests/Fixtures/TrackAdvancedCampaigns.php @@ -1,4 +1,5 @@ activatePlugin('MarketingCampaignsReporting'); + $systemSettings = StaticContainer::get(SystemSettings::class); + $systemSettings->doNotChangeCaseOfUtmParameters->setIsWritableByCurrentUser(true); + $systemSettings->doNotChangeCaseOfUtmParameters->setValue(false); + $systemSettings->save(); + $this->orderIndex = 0; $this->setUpWebsite(); @@ -71,14 +79,15 @@ public function trackCampaignVisits($disablePlugin, $dateTime) $this->trackSeventhVisit_withGoalConversion($t, $dateTime); $this->trackEigthVisit_withEcommerceAbandonedCart($t, $dateTime); $this->trackNinthVisit_withEcommerceOrder($t, $dateTime); - $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='10th', $source = 'newsletter_10', 'keyword a', 'cid1', 'cg1', 'bottom'); - $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='11th', $source = 'newsletter_11', 'keyword b', 'cid2', 'cg2', 'top'); - $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='12th', $source = 'newsletter_12', 'keyword c', 'cid3', 'cg3', 'middle'); - $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='13th', $source = 'newsletter_13', 'keyword d', 'cid4', 'cg4', 'center'); - $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='14th', $source = 'newsletter_14', 'keyword e', 'cid5', 'cg5', 'left'); - $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='15th', $source = 'newsletter_15', 'keyword f', 'cid6', 'cg6', 'right'); - $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='16th', $source = 'newsletter_16', 'keyword g', 'cid7', 'cg7', 'bottom-left'); - $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName='17th', $source = 'newsletter_17', 'keyword h', 'cid8', 'cg8', 'top-right'); + $counter = 1; + $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '10th', $source = 'newsletter_10', 'keyword a', 'cid1', 'cg1', 'bottom'); + $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '11th', $source = 'newsletter_11', 'keyword b', 'cid2', 'cg2', 'top'); + $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '12th', $source = 'newsletter_12', 'keyword c', 'cid3', 'cg3', 'middle'); + $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '13th', $source = 'newsletter_13', 'keyword d', 'cid4', 'cg4', 'center'); + $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '14th', $source = 'newsletter_14', 'keyword e', 'cid5', 'cg5', 'left'); + $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '15th', $source = 'newsletter_15', 'keyword f', 'cid6', 'cg6', 'right'); + $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '16th', $source = 'newsletter_16', 'keyword g', 'cid7', 'cg7', 'bottom-left'); + $this->trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter++, $campaignName = '17th', $source = 'newsletter_17', 'keyword h', 'cid8', 'cg8', 'top-right'); } public function tearDown(): void @@ -99,8 +108,17 @@ public function tearDown(): void */ protected function getLandingUrlWithCampaignParams($name, $keyword, $source, $medium, $content, $campaignId, $campaignGroup, $campaignPlacement) { - return sprintf('http://example.com/?utm_campaign=%s&utm_term=%s&utm_source=%s&utm_medium=%s&utm_content=%s&utm_id=%s&mtm_group=%s&mtm_placement=%s', - $name, $keyword, $source, $medium, $content, $campaignId, $campaignGroup, $campaignPlacement); + return sprintf( + 'http://example.com/?utm_campaign=%s&utm_term=%s&utm_source=%s&utm_medium=%s&utm_content=%s&utm_id=%s&mtm_group=%s&mtm_placement=%s', + $name, + $keyword, + $source, + $medium, + $content, + $campaignId, + $campaignGroup, + $campaignPlacement + ); } private function setUpWebsite() @@ -109,12 +127,22 @@ private function setUpWebsite() $this->assertTrue($idSite === $this->idSite); $this->idGoal1 = \Piwik\Plugins\Goals\API::getInstance()->addGoal( - $this->idSite, 'title match', 'title', self::THIS_PAGE_VIEW_IS_GOAL_CONVERSION, 'contains', - $caseSensitive = false, $revenue = 10, $allowMultipleConversions = true + $this->idSite, + 'title match', + 'title', + self::THIS_PAGE_VIEW_IS_GOAL_CONVERSION, + 'contains', + $caseSensitive = false, + $revenue = 10, + $allowMultipleConversions = true ); $this->idGoal2 = \Piwik\Plugins\Goals\API::getInstance()->addGoal( - $this->idSite, 'title match', 'manually', '', 'contains' + $this->idSite, + 'title match', + 'manually', + '', + 'contains' ); } @@ -277,8 +305,10 @@ protected function trackNinthVisit_withEcommerceOrder($t, $dateTime) * @param $source * @throws \Exception */ - protected function trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaignName, $source, $keyword, $campaignId, $campaignGroup, $campaignPlacement) + protected function trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $counter, $campaignName, $source, $keyword, $campaignId, $campaignGroup, $campaignPlacement) { + // add seconds to timestamp based on counter, to ensure visits are not tracked on the exact same time + $dateTime = Date::factory($dateTime)->addPeriod($counter, 'SECOND')->getDatetime(); $this->moveTimeForward($t, 2, $dateTime); $url = $this->getLandingUrlWithCampaignParams( $name = $campaignName, @@ -291,7 +321,7 @@ protected function trackNthVisit_withDimensionsInUrlHash($t, $dateTime, $campaig $campaignPlacement ); $t->setUrl($url); - self::checkResponse($t->doTrackPageView('Coming back with another campaign '.$campaignName)); + self::checkResponse($t->doTrackPageView('Coming back with another campaign ' . $campaignName)); } /** @@ -341,26 +371,24 @@ public function provideContainerConfig() 'observers.global' => \Piwik\DI::add(array( array( 'Environment.bootstrapped', \Piwik\DI::value(function () use ($testVars) { - $plugins = Piwik\Config::getInstance()->Plugins['Plugins']; - $index = array_search('MarketingCampaignsReporting', $plugins); - - if ($testVars->_disableMarketingCampaignsReporting) { - if ($index !== false) { - unset($plugins[$index]); - } - } else { - if ($index === false) { - $plugins[] = 'MarketingCampaignsReporting'; + $plugins = Piwik\Config::getInstance()->Plugins['Plugins']; + $index = array_search('MarketingCampaignsReporting', $plugins); + + if ($testVars->_disableMarketingCampaignsReporting) { + if ($index !== false) { + unset($plugins[$index]); + } + } else { + if ($index === false) { + $plugins[] = 'MarketingCampaignsReporting'; + } } - } - Piwik\Config::getInstance()->Plugins['Plugins'] = $plugins; - } - )), + Piwik\Config::getInstance()->Plugins['Plugins'] = $plugins; + })), )), 'advanced_campaign_reporting.uri_parameters.campaign_name' => \Piwik\DI::value([(new Piwik\Plugins\MarketingCampaignsReporting\Columns\CampaignName())->getColumnName() => ['mtm_campaign', 'matomo_campaign', 'mtm_cpn', 'pk_campaign', 'piwik_campaign', 'pk_cpn', 'utm_campaign', 'my_campaign']]) ); } } - diff --git a/tests/Integration/CorrectCampaignDetectionTest.php b/tests/Integration/CorrectCampaignDetectionTest.php new file mode 100644 index 0000000..fb0135a --- /dev/null +++ b/tests/Integration/CorrectCampaignDetectionTest.php @@ -0,0 +1,167 @@ +idSite = Fixture::createWebsite('2016-01-01 00:00:01', 0, 'TestSite', 'https://example.com'); + } + + /** + * @dataProvider getTrackingTestData + */ + public function testTracking(string $url, string $referrerUrl, array $expectedAttributes) + { + Db::query('TRUNCATE TABLE ' . Common::prefixTable('log_visit')); + + $t = Fixture::getTracker( + $this->idSite, + date('Y-m-d H:i:s'), + $defaultInit = true, + $useLocal = false + ); + + $t->setUrl($url); + $t->setUrlReferrer($referrerUrl); + + Fixture::checkResponse($t->doTrackPageView('Some page title')); + + + $data = Db::fetchRow('SELECT * FROM ' . Common::prefixTable('log_visit') . ' LIMIT 1'); + + foreach ($expectedAttributes as $name => $value) { + self::assertEquals($value, $data[$name] ?? ''); + } + } + + public function getTrackingTestData(): iterable + { + + yield 'provided compaign parameters should be detected correctly' => [ + 'https://www.example.com/?utm_campaign=November_Offer&utm_term=Mot_clé_PÉPÈRE&utm_source=newsletter_7&utm_content=contains personalized campaigns for client&utm_medium=email&utm_id=CAMPAIGN_ID_KABOOM&mtm_group=Audience%20Group%201&mtm_placement=Google%20Search', + '', // no referer + [ + 'referer_type' => Common::REFERRER_TYPE_CAMPAIGN, + 'referer_name' => 'November_Offer', + 'referer_url' => '', + 'referer_keyword' => 'Mot_clé_PÉPÈRE', + 'campaign_content' => 'contains personalized campaigns for client', + 'campaign_group' => 'Audience Group 1', + 'campaign_id' => 'CAMPAIGN_ID_KABOOM', + 'campaign_keyword' => 'Mot_clé_PÉPÈRE', + 'campaign_medium' => 'email', + 'campaign_name' => 'November_Offer', + 'campaign_placement' => 'Google Search', + 'campaign_source' => 'newsletter_7', + ], + ]; + + if (version_compare(Version::VERSION, '5.5.0-b1', '>=')) { + yield 'utm_source param provided by ChatGPT is detected as AI assistant' => [ + 'https://www.example.com/?utm_source=chatgpt.com', + '', // not referer + [ + 'referer_type' => Common::REFERRER_TYPE_AI_ASSISTANT, + 'referer_name' => 'ChatGPT', + 'referer_url' => '', + 'referer_keyword' => '', + 'campaign_content' => '', + 'campaign_group' => '', + 'campaign_id' => '', + 'campaign_keyword' => '', + 'campaign_medium' => '', + 'campaign_name' => '', + 'campaign_placement' => '', + 'campaign_source' => '', + ], + ]; + + yield 'campaign parameters are ignored for AI referrers' => [ + 'https://www.example.com/?utm_source=random&utm_campaign=random', + 'https://chatgpt.com/', + [ + 'referer_type' => Common::REFERRER_TYPE_AI_ASSISTANT, + 'referer_name' => 'ChatGPT', + 'referer_url' => 'https://chatgpt.com/', + 'referer_keyword' => '', + 'campaign_content' => '', + 'campaign_group' => '', + 'campaign_id' => '', + 'campaign_keyword' => '', + 'campaign_medium' => '', + 'campaign_name' => '', + 'campaign_placement' => '', + 'campaign_source' => '', + ], + ]; + + yield 'ChatGPT referrer with utm_source param is detected as AI assistant' => [ + 'https://www.example.com/?utm_source=chatgpt.com', + 'https://chatgpt.com/', + [ + 'referer_type' => Common::REFERRER_TYPE_AI_ASSISTANT, + 'referer_name' => 'ChatGPT', + 'referer_url' => 'https://chatgpt.com/', + 'referer_keyword' => '', + 'campaign_content' => '', + 'campaign_group' => '', + 'campaign_id' => '', + 'campaign_keyword' => '', + 'campaign_medium' => '', + 'campaign_name' => '', + 'campaign_placement' => '', + 'campaign_source' => '', + ], + ]; + + yield 'utm_source param provided by Perplexity is detected as AI assistant' => [ + 'https://www.example.com/?utm_source=perplexity.ai', + '', // no referer + [ + 'referer_type' => Common::REFERRER_TYPE_AI_ASSISTANT, + 'referer_name' => 'Perplexity', + 'referer_url' => '', + 'referer_keyword' => '', + 'campaign_content' => '', + 'campaign_group' => '', + 'campaign_id' => '', + 'campaign_keyword' => '', + 'campaign_medium' => '', + 'campaign_name' => '', + 'campaign_placement' => '', + 'campaign_source' => '', + ], + ]; + } + } +} diff --git a/tests/Integration/CustomDimensionConfigTest.php b/tests/Integration/CustomDimensionConfigTest.php index 2bfe4a5..1bd5ad0 100644 --- a/tests/Integration/CustomDimensionConfigTest.php +++ b/tests/Integration/CustomDimensionConfigTest.php @@ -1,4 +1,5 @@ getColumnName() => 'pk_campaign,custom_name_parameter', (new CampaignKeyword())->getColumnName() => 'pk_keyword,custom_keyword_parameter', - (new CampaignSource())->getColumnName() => 'pk_source,custom_source_parameter', + (new CampaignSource())->getColumnName() => 'utm_source,pk_source,custom_source_parameter', (new CampaignMedium())->getColumnName() => 'pk_medium,custom_medium_parameter', (new CampaignContent())->getColumnName() => 'pk_content,custom_content_parameter', (new CampaignId())->getColumnName() => 'pk_id,custom_id_parameter', @@ -210,10 +211,54 @@ public function testTrackingWithPluginParameters() $this->assertVisits(2, 1, 2); } + public function testTrackingAIAssistantDoesNotForceNewVisit(): void + { + $url = $this->getUrlForTracking(['utm_source' => 'chatgpt.com']); + + $this->tracker->setUrl($url); + $this->tracker->setUrlReferrer('https://chatgpt.com'); + + Fixture::checkResponse($this->tracker->doTrackPageView('Track visit')); + + $this->assertVisits(1, 1, 1); + + // simulating a page reload + $this->moveTimeForward(0.05); + $this->tracker->setUrlReferrer(''); + Fixture::checkResponse($this->tracker->doTrackPageView('Track visit')); + + $this->assertVisits(1, 1, 2); + } + + public function testCampaignAfterAIAssistantForcesNewVisit(): void + { + $url = $this->getUrlForTracking(['utm_source' => 'chatgpt.com']); + + $this->tracker->setUrl($url); + $this->tracker->setUrlReferrer('https://chatgpt.com'); + + Fixture::checkResponse($this->tracker->doTrackPageView('Track visit')); + + $this->assertVisits(1, 1, 1); + + $this->moveTimeForward(0.05); + $this->tracker->setUrlReferrer(''); + $url = $this->getUrlForTracking(['pk_campaign' => 'custom name']); + + $this->tracker->setUrl($url); + Fixture::checkResponse($this->tracker->doTrackPageView('Track visit')); + + $this->assertVisits(2, 1, 2); + } + private function assertVisits($visitsExpected, $uniqueVisitsExpected, $actionsExpected) { - $counters = LiveAPI::getInstance()->getCounters($this->idSite, 2880, false, - ['visits', 'visitors', 'actions']); + $counters = LiveAPI::getInstance()->getCounters( + $this->idSite, + 2880, + false, + ['visits', 'visitors', 'actions'] + ); $this->assertEquals($visitsExpected, $counters[0]['visits']); $this->assertEquals($uniqueVisitsExpected, $counters[0]['visitors']); @@ -229,4 +274,4 @@ protected function moveTimeForward($hourForward) { $this->tracker->setForceVisitDateTime($this->testDate->addHour($hourForward)->getDatetime()); } -} \ No newline at end of file +} diff --git a/tests/Integration/SystemSettingsTest.php b/tests/Integration/SystemSettingsTest.php new file mode 100644 index 0000000..556b112 --- /dev/null +++ b/tests/Integration/SystemSettingsTest.php @@ -0,0 +1,80 @@ +settings = new SystemSettings(); + } + + public function tearDown(): void + { + parent::tearDown(); + + Fixture::resetTranslations(); + } + + public function test_doNotChangeCaseOfUtmParameters_default() + { + $this->assertTrue($this->settings->doNotChangeCaseOfUtmParameters->getValue()); + } + + public function test_doNotChangeCaseOfUtmParameters_shouldThrowException() + { + $this->expectException(\Exception::class); + $this->expectExceptionMessage('The value for the "Keep campaign parameter capitalisation" field in the "MarketingCampaignsReporting" plugin is not allowed'); + $this->settings->doNotChangeCaseOfUtmParameters->setValue('aa'); + } + + public function test_doNotChangeCaseOfUtmParameters_updateSuccess() + { + $this->settings->doNotChangeCaseOfUtmParameters->setValue(true); + $this->settings->save(); + $this->assertTrue($this->settings->doNotChangeCaseOfUtmParameters->getValue()); + + $this->settings->doNotChangeCaseOfUtmParameters->setValue(1); + $this->settings->save(); + $this->assertTrue($this->settings->doNotChangeCaseOfUtmParameters->getValue()); + + $this->settings->doNotChangeCaseOfUtmParameters->setValue(0); + $this->settings->save(); + $this->assertFalse($this->settings->doNotChangeCaseOfUtmParameters->getValue()); + + $this->settings->doNotChangeCaseOfUtmParameters->setValue('1'); + $this->settings->save(); + $this->assertTrue($this->settings->doNotChangeCaseOfUtmParameters->getValue()); + + $this->settings->doNotChangeCaseOfUtmParameters->setValue('0'); + $this->settings->save(); + $this->assertFalse($this->settings->doNotChangeCaseOfUtmParameters->getValue()); + } +} diff --git a/tests/System/CheckDirectDependencyUseCommandTest.php b/tests/System/CheckDirectDependencyUseCommandTest.php index 51a8179..d32064b 100644 --- a/tests/System/CheckDirectDependencyUseCommandTest.php +++ b/tests/System/CheckDirectDependencyUseCommandTest.php @@ -1,4 +1,5 @@ usesFoundList[$pluginName]); } -} \ No newline at end of file +} diff --git a/tests/System/TrackSeveralCampaignsTest.php b/tests/System/TrackSeveralCampaignsTest.php index 9ac9d51..5f057f4 100644 --- a/tests/System/TrackSeveralCampaignsTest.php +++ b/tests/System/TrackSeveralCampaignsTest.php @@ -1,4 +1,5 @@ dateTimeWithPluginEnabled; $dateTime = self::$fixture->dateTime; + $phpVersionPrefix = version_compare(PHP_VERSION, 8.2, '<') && !self::$isMariaDB ? 'min_php_' : ''; + + $xmlFieldsToRemove = []; + + if (version_compare(Version::VERSION, '5.5.0-b1', '<')) { + $xmlFieldsToRemove = ['Referrers_visitorsFromAIAssistants', 'Referrers_distinctAIAssistants', 'Referrers_visitorsFromAIAssistants_percent']; + } + + if (version_compare(Version::VERSION, '5.6.0-alpha', '<')) { + // In Matomo 5.6 AI agent information had been added + $xmlFieldsToRemove = array_merge($xmlFieldsToRemove, [ + 'nb_visits_ai_agent', + 'nb_actions_ai_agent', + 'nb_uniq_visitors_ai_agent', + 'nb_users_ai_agent', + 'max_actions_ai_agent', + 'bounce_rate_ai_agent', + 'nb_actions_per_visit_ai_agent', + 'avg_time_on_site_ai_agent', + 'nb_visits_human', + 'nb_actions_human', + 'nb_uniq_visitors_human', + 'nb_users_human', + 'max_actions_human', + 'bounce_rate_human', + 'nb_actions_per_visit_human', + 'avg_time_on_site_human', + ]); + } $apiToTest[] = [ 'API.get', @@ -76,21 +116,43 @@ public function getApiForTesting() 'idSite' => self::$fixture->idSite, 'date' => $dateWithPluginEnabled, 'periods' => ['day'], - 'testSuffix' => version_compare(Version::VERSION, '4.14.2', '<') ? 'old' : '', + 'testSuffix' => (!empty($phpVersionPrefix) ? $phpVersionPrefix : 'max_php_') . (version_compare(Version::VERSION, '5.2.0-b6', '<') ? 'old' : ''), + 'xmlFieldsToRemove' => $xmlFieldsToRemove, ] ]; $columnsToHide = []; - if (version_compare(Version::VERSION, '4.12.0', '<')) { - // In Matomo 4.12 referrer columns had been added to goal actions. For tests with older Matomo releases we therefor ignore those columns - $columnsToHide = ['referrerType', 'referrerName', 'referrerKeyword']; + if (version_compare(Version::VERSION, '5.2.0-alpha', '<')) { + // In Matomo 5.2 referrer columns had been added to ecommerce actions. For tests with older Matomo releases we therefor ignore those columns + $columnsToHide = array_merge($columnsToHide, ['referrerType', 'referrerName', 'referrerKeyword']); + } + + if (version_compare(Version::VERSION, '5.5.0-b1', '<')) { + // In Matomo 5.5 ai referrer had been added + $columnsToHide = array_merge($columnsToHide, ['referrerAIAssistantUrl', 'referrerAIAssistantIcon']); } - if (version_compare(Version::VERSION, '4.8.0', '<')) { - // In Matomo 4.12 referrer columns had been added to goal actions. For tests with older Matomo releases we therefor ignore those columns - $columnsToHide[] = 'timeSpent'; - $columnsToHide[] = 'timeSpentPretty'; + if (version_compare(Version::VERSION, '5.6.0-alpha', '<')) { + // In Matomo 5.6 AI agent information had been added + $columnsToHide = array_merge($columnsToHide, [ + 'nb_visits_ai_agent', + 'nb_actions_ai_agent', + 'nb_uniq_visitors_ai_agent', + 'nb_users_ai_agent', + 'max_actions_ai_agent', + 'bounce_rate_ai_agent', + 'nb_actions_per_visit_ai_agent', + 'avg_time_on_site_ai_agent', + 'nb_visits_human', + 'nb_actions_human', + 'nb_uniq_visitors_human', + 'nb_users_human', + 'max_actions_human', + 'bounce_rate_human', + 'nb_actions_per_visit_human', + 'avg_time_on_site_human', + ]); } $apiToTest[] = [ @@ -100,6 +162,7 @@ public function getApiForTesting() 'date' => $dateWithPluginEnabled, 'periods' => ['day'], 'xmlFieldsToRemove' => $columnsToHide, + 'testSuffix' => $phpVersionPrefix, ] ]; @@ -219,13 +282,15 @@ public function getReferrerApiForTesting() 'Referrers.getCampaigns', ]; + $phpVersionPrefix = version_compare(PHP_VERSION, 8.2, '<') && !self::$isMariaDB ? 'min_php_' : ''; + $apiToTest[] = [ $api, [ 'idSite' => self::$fixture->idSite, 'date' => $dateWithPluginEnabled, 'periods' => ['day'], - 'testSuffix' => 'expanded', + 'testSuffix' => $phpVersionPrefix . 'expanded', 'otherRequestParameters' => ['expanded' => 1], ] ]; @@ -235,7 +300,7 @@ public function getReferrerApiForTesting() 'idSite' => self::$fixture->idSite, 'date' => $dateWithPluginEnabled, 'periods' => ['day'], - 'testSuffix' => 'flat', + 'testSuffix' => $phpVersionPrefix . 'flat', 'otherRequestParameters' => ['flat' => 1, 'expanded' => 0], ] ]; diff --git a/tests/System/expected/test___API.get_day.xml b/tests/System/expected/test___API.get_day.xml index eb3fcc4..80a1a01 100644 --- a/tests/System/expected/test___API.get_day.xml +++ b/tests/System/expected/test___API.get_day.xml @@ -33,7 +33,7 @@ 0 0 0 - 17 + 18 0 0 0 @@ -78,6 +78,7 @@ 0 0 0 + 18 0% 0% 100% diff --git a/tests/System/expected/test___Live.getLastVisitsDetails_day.xml b/tests/System/expected/test___Live.getLastVisitsDetails_day.xml index 9f6b2d9..1bdf956 100644 --- a/tests/System/expected/test___Live.getLastVisitsDetails_day.xml +++ b/tests/System/expected/test___Live.getLastVisitsDetails_day.xml @@ -37,6 +37,9 @@ 5 + campaign + ecommerce_campaign + ecommerce_keyword item SKU @@ -89,14 +92,16 @@ 1 campaign Campaigns - ecommerce_campaign - ecommerce_keyword + Ecommerce_campaign + Ecommerce_keyword + + fr French Desktop @@ -155,14 +160,14 @@ - ecommmerce_campaignid - ecommerce_content - ecommerce_keyword - ecommerce_medium - ecommerce_campaign - ecommerce_source - ecommmerce_campaigngroup - ecommmerce_campaignplacement + Ecommmerce_CampaignId + Ecommerce_content + Ecommerce_keyword + Ecommerce_medium + Ecommerce_campaign + Ecommerce_source + Ecommmerce_CampaignGroup + Ecommmerce_CampaignPlacement 1 @@ -196,6 +201,9 @@ 5 + campaign + ecommerce_campaign + ecommerce_keyword item SKU @@ -248,14 +256,16 @@ 1 campaign Campaigns - ecommerce_campaign - ecommerce_keyword + Ecommerce_campaign + Ecommerce_keyword + + fr French Desktop @@ -314,14 +324,14 @@ - ecommmerce_campaignid - ecommerce_content - ecommerce_keyword - ecommerce_medium - ecommerce_campaign - ecommerce_source - ecommmerce_campaigngroup - ecommmerce_campaignplacement + Ecommmerce_CampaignId + Ecommerce_content + Ecommerce_keyword + Ecommerce_medium + Ecommerce_campaign + Ecommerce_source + Ecommmerce_CampaignGroup + Ecommmerce_CampaignPlacement 1 @@ -437,7 +447,7 @@ 1 campaign Campaigns - campaign_with_two_goals_conversions + Campaign_with_two_goals_conversions @@ -445,6 +455,8 @@ + + fr French Desktop @@ -507,7 +519,7 @@ - campaign_with_two_goals_conversions + Campaign_with_two_goals_conversions @@ -572,14 +584,16 @@ 1 campaign Campaigns - lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "nam - lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "k + Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM + Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K + + fr French Desktop @@ -640,10 +654,10 @@ - lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "k + Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K - lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "nam - lenghty "source"...lenghty "source"...lenghty "source"... + Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM + Lenghty "SOURCE"...Lenghty "SOURCE"...Lenghty "SOURCE"... @@ -707,7 +721,7 @@ 1 campaign Campaigns - campaignnamedimension - no other dimension for this visit + CampaignNameDimension - No Other Dimension for this visit @@ -715,6 +729,8 @@ + + fr French Desktop @@ -777,7 +793,7 @@ - campaignnamedimension - no other dimension for this visit + CampaignNameDimension - No Other Dimension for this visit @@ -842,14 +858,16 @@ 1 campaign Campaigns - campaign_hashed - keyword from #hash tag parameter + Campaign_Hashed + Keyword from #hash tag parameter + + fr French Desktop @@ -910,9 +928,9 @@ - keyword from #hash tag parameter + Keyword from #hash tag parameter - campaign_hashed + Campaign_Hashed @@ -977,14 +995,16 @@ 1 campaign Campaigns - default_offer - not_an_advanced_campaign_at_first + Default_Offer + Not_An_Advanced_Campaign_At_first + + fr French Desktop @@ -1045,16 +1065,16 @@ - not_an_advanced_campaign_at_first + Not_An_Advanced_Campaign_At_first - default_offer + Default_Offer 1 - 20 + 35 156.5.3.2 e16cf2bbaeea2c88 @@ -1062,16 +1082,16 @@ action http://example.com/ - Coming back with another campaign + Coming back with another campaign 17th 8 - 21 + 36 0 0s 1 - Coming back with another campaign + Coming back with another campaign 17th http://example.com/ plugins/Morpheus/images/action.svg @@ -1098,11 +1118,11 @@ plugins/Live/images/returningVisitor.png 0 - 3 + 11 none 0 - 6840 + 6848 0 0 @@ -1112,14 +1132,16 @@ 1 campaign Campaigns - october_offer - mot_clé_pépère + 17th + keyword h + + fr French Desktop @@ -1159,7 +1181,7 @@ 12:34:06 12 0 - 6120 + 1 1024x768 cookie, flash, java @@ -1178,18 +1200,18 @@ - campaign_id_kaboom + cid8 none - mot_clé_pépère + keyword h email - october_offer - newsletter_6 - group 1 - google ads + 17th + newsletter_17 + cg8 + top-right 1 - 28 + 34 156.5.3.2 e16cf2bbaeea2c88 @@ -1197,16 +1219,16 @@ action http://example.com/ - Coming back with another campaign 10th + Coming back with another campaign 16th 8 - 29 + 35 0 0s 1 - Coming back with another campaign 10th + Coming back with another campaign 16th http://example.com/ plugins/Morpheus/images/action.svg @@ -1233,11 +1255,11 @@ plugins/Live/images/returningVisitor.png 0 - 4 + 10 none 0 - 6840 + 6847 0 0 @@ -1247,14 +1269,16 @@ 1 campaign Campaigns - 10th - keyword a + 16th + keyword g + + fr French Desktop @@ -1294,7 +1318,7 @@ 12:34:06 12 0 - 0 + 1 1024x768 cookie, flash, java @@ -1313,18 +1337,18 @@ - cid1 + cid7 none - keyword a + keyword g email - 10th - newsletter_10 - cg1 - bottom + 16th + newsletter_16 + cg7 + bottom-left 1 - 29 + 33 156.5.3.2 e16cf2bbaeea2c88 @@ -1332,16 +1356,16 @@ action http://example.com/ - Coming back with another campaign 11th + Coming back with another campaign 15th 8 - 30 + 34 0 0s 1 - Coming back with another campaign 11th + Coming back with another campaign 15th http://example.com/ plugins/Morpheus/images/action.svg @@ -1368,11 +1392,11 @@ plugins/Live/images/returningVisitor.png 0 - 5 + 9 none 0 - 6840 + 6846 0 0 @@ -1382,14 +1406,16 @@ 1 campaign Campaigns - 11th - keyword b + 15th + keyword f + + fr French Desktop @@ -1429,7 +1455,7 @@ 12:34:06 12 0 - 0 + 1 1024x768 cookie, flash, java @@ -1448,13 +1474,13 @@ - cid2 + cid6 none - keyword b + keyword f email - 11th - newsletter_11 - cg2 - top + 15th + newsletter_15 + cg6 + right \ No newline at end of file diff --git a/tests/System/expected/test___MarketingCampaignsReporting.getKeywordContentFromNameId_month.xml b/tests/System/expected/test___MarketingCampaignsReporting.getKeywordContentFromNameId_month.xml index c234bed..0fe4a08 100644 --- a/tests/System/expected/test___MarketingCampaignsReporting.getKeywordContentFromNameId_month.xml +++ b/tests/System/expected/test___MarketingCampaignsReporting.getKeywordContentFromNameId_month.xml @@ -1,2 +1,15 @@ - \ No newline at end of file + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerName==October_Offer;referrerType==campaign;referrerKeyword==Mot_cl%C3%A9_P%C3%89P%C3%88RE + + \ No newline at end of file diff --git a/tests/System/expected/test_expanded__Referrers.getCampaigns_day.xml b/tests/System/expected/test_expanded__Referrers.getCampaigns_day.xml index 349c65e..50f7220 100644 --- a/tests/System/expected/test_expanded__Referrers.getCampaigns_day.xml +++ b/tests/System/expected/test_expanded__Referrers.getCampaigns_day.xml @@ -1,7 +1,7 @@ - + 1 2 2 @@ -10,30 +10,10 @@ 1444 2 1 - - - 1 - 1 - 555 - 5 - - - 1 - 1 - 555 - 0 - 0 - 0 - 0 - 5 - - - 1 - 555 - referrerType==campaign;referrerName==ecommerce_campaign + referrerType==campaign;referrerName==Ecommerce_campaign - + 1 2 2 @@ -42,26 +22,6 @@ 1444 2 1 - - - 1 - 1 - 555 - 5 - - - 1 - 1 - 555 - 0 - 0 - 0 - 0 - 5 - - - 1 - 555 @@ -266,7 +226,7 @@ - + 1 1 1 @@ -275,10 +235,10 @@ 0 1 0 - referrerType==campaign;referrerName==campaignnamedimension+-+no+other+dimension+for+this+visit + referrerType==campaign;referrerName==CampaignNameDimension+-+No+Other+Dimension+for+this+visit - + 1 1 1 @@ -287,10 +247,10 @@ 0 1 0 - referrerType==campaign;referrerName==campaign_hashed + referrerType==campaign;referrerName==Campaign_Hashed - + 1 1 1 @@ -303,7 +263,7 @@ - + 1 1 1 @@ -312,24 +272,10 @@ 725 1 1 - - - 2 - 1 - 1111 - - - 1 - 1 - 3333 - - - 3 - 4444 - referrerType==campaign;referrerName==campaign_with_two_goals_conversions + referrerType==campaign;referrerName==Campaign_with_two_goals_conversions - + 1 1 1 @@ -338,10 +284,10 @@ 0 1 0 - referrerType==campaign;referrerName==default_offer + referrerType==campaign;referrerName==Default_Offer - + 1 1 1 @@ -354,7 +300,7 @@ - + 1 1 1 @@ -363,10 +309,10 @@ 0 1 0 - referrerType==campaign;referrerName==lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22name%22...lenghty+%22nam + referrerType==campaign;referrerName==Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAM - + 1 1 1 @@ -379,7 +325,7 @@ - + 1 1 1 @@ -388,10 +334,10 @@ 0 1 0 - referrerType==campaign;referrerName==november_offer + referrerType==campaign;referrerName==November_Offer - + 1 1 1 @@ -404,7 +350,7 @@ - + 1 1 1 @@ -413,10 +359,10 @@ 0 1 0 - referrerType==campaign;referrerName==october_offer + referrerType==campaign;referrerName==October_Offer - + 1 1 1 @@ -429,7 +375,7 @@ - + 1 1 1 @@ -438,6 +384,76 @@ 0 1 0 - referrerType==campaign;referrerName==should_be_new_visit + referrerType==campaign;referrerName==SHOULD_BE_NEW_VISIT + + + + + + 2 + 1 + 1111 + + + 1 + 1 + 3333 + + + 3 + 4444 + 0 + referrerType==campaign;referrerName==campaign_with_two_goals_conversions + + + + + + 1 + 1 + 555 + 5 + + + 1 + 1 + 555 + 0 + 0 + 0 + 0 + 5 + + + 1 + 555 + 0 + referrerType==campaign;referrerName==ecommerce_campaign + + + + + + 1 + 1 + 555 + 5 + + + 1 + 1 + 555 + 0 + 0 + 0 + 0 + 5 + + + 1 + 555 + 0 + + \ No newline at end of file diff --git a/tests/System/expected/test_flat__Referrers.getCampaigns_day.xml b/tests/System/expected/test_flat__Referrers.getCampaigns_day.xml index 73b7ead..6ad77af 100644 --- a/tests/System/expected/test_flat__Referrers.getCampaigns_day.xml +++ b/tests/System/expected/test_flat__Referrers.getCampaigns_day.xml @@ -1,7 +1,7 @@ - + 1 2 2 @@ -10,29 +10,9 @@ 1444 2 1 - - - 1 - 1 - 555 - 5 - - - 1 - 1 - 555 - 0 - 0 - 0 - 0 - 5 - - - 1 - 555 - referrerType==campaign;referrerName==ecommerce_campaign;referrerType==campaign;referrerKeyword==ecommerce_keyword - ecommerce_campaign - ecommerce_keyword + referrerType==campaign;referrerName==Ecommerce_campaign;referrerType==campaign;referrerKeyword==Ecommerce_keyword + Ecommerce_campaign + Ecommerce_keyword @@ -147,7 +127,7 @@ keyword h - + 1 1 1 @@ -156,11 +136,11 @@ 0 1 0 - referrerType==campaign;referrerName==campaignnamedimension+-+no+other+dimension+for+this+visit - campaignnamedimension - no other dimension for this visit + referrerType==campaign;referrerName==CampaignNameDimension+-+No+Other+Dimension+for+this+visit + CampaignNameDimension - No Other Dimension for this visit - + 1 1 1 @@ -169,12 +149,12 @@ 0 1 0 - referrerType==campaign;referrerName==campaign_hashed;referrerType==campaign;referrerKeyword==keyword+from+%23hash+tag+parameter - campaign_hashed - keyword from #hash tag parameter + referrerType==campaign;referrerName==Campaign_Hashed;referrerType==campaign;referrerKeyword==Keyword+from+%23hash+tag+parameter + Campaign_Hashed + Keyword from #hash tag parameter - + 1 1 1 @@ -183,25 +163,11 @@ 725 1 1 - - - 2 - 1 - 1111 - - - 1 - 1 - 3333 - - - 3 - 4444 - referrerType==campaign;referrerName==campaign_with_two_goals_conversions - campaign_with_two_goals_conversions + referrerType==campaign;referrerName==Campaign_with_two_goals_conversions + Campaign_with_two_goals_conversions - + 1 1 1 @@ -210,12 +176,12 @@ 0 1 0 - referrerType==campaign;referrerName==default_offer;referrerType==campaign;referrerKeyword==not_an_advanced_campaign_at_first - default_offer - not_an_advanced_campaign_at_first + referrerType==campaign;referrerName==Default_Offer;referrerType==campaign;referrerKeyword==Not_An_Advanced_Campaign_At_first + Default_Offer + Not_An_Advanced_Campaign_At_first - + 1 1 1 @@ -224,12 +190,12 @@ 0 1 0 - referrerType==campaign;referrerName==lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "nam;referrerType==campaign;referrerKeyword==lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22keyword%22...lenghty+%22k - lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "name"...lenghty "nam - lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "keyword"...lenghty "k + referrerType==campaign;referrerName==Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM;referrerType==campaign;referrerKeyword==Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22K + Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM + Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K - + 1 1 1 @@ -238,12 +204,12 @@ 0 1 0 - referrerType==campaign;referrerName==november_offer;referrerType==campaign;referrerKeyword==mot_cl%C3%A9_p%C3%A9p%C3%A8re - november_offer - mot_clé_pépère + referrerType==campaign;referrerName==November_Offer;referrerType==campaign;referrerKeyword==Mot_cl%C3%A9_P%C3%89P%C3%88RE + November_Offer + Mot_clé_PÉPÈRE - + 1 1 1 @@ -252,12 +218,12 @@ 0 1 0 - referrerType==campaign;referrerName==october_offer;referrerType==campaign;referrerKeyword==mot_cl%C3%A9_p%C3%A9p%C3%A8re - october_offer - mot_clé_pépère + referrerType==campaign;referrerName==October_Offer;referrerType==campaign;referrerKeyword==Mot_cl%C3%A9_P%C3%89P%C3%88RE + October_Offer + Mot_clé_PÉPÈRE - + 1 1 1 @@ -266,7 +232,54 @@ 0 1 0 - referrerType==campaign;referrerName==should_be_new_visit - should_be_new_visit + referrerType==campaign;referrerName==SHOULD_BE_NEW_VISIT + SHOULD_BE_NEW_VISIT + + + + + + 2 + 1 + 1111 + + + 1 + 1 + 3333 + + + 3 + 4444 + 0 + referrerType==campaign;referrerName==campaign_with_two_goals_conversions + campaign_with_two_goals_conversions + + + + + + 1 + 1 + 555 + 5 + + + 1 + 1 + 555 + 0 + 0 + 0 + 0 + 5 + + + 1 + 555 + 0 + referrerType==campaign;referrerName==ecommerce_campaign;referrerType==campaign;referrerKeyword==ecommerce_keyword + ecommerce_campaign + ecommerce_keyword \ No newline at end of file diff --git a/tests/System/expected/test_max_php___API.get_day.xml b/tests/System/expected/test_max_php___API.get_day.xml new file mode 100644 index 0000000..d2f6579 --- /dev/null +++ b/tests/System/expected/test_max_php___API.get_day.xml @@ -0,0 +1,109 @@ + + + 1 + 18 + 0 + 18 + 1 + 18 + 2169 + 1 + 1 + 1 + 0 + 1 + 100% + 1 + 0 + 17 + 17 + 1 + 0 + 1 + 100% + 1 + 128 + 0 + 0 + 0 + 0 + 0 + 18 + 0 + 0 + 0 + 0 + 0 + 0 + 19 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + 2 + 4999 + 11.11% + 0 + 0 + 0 + 0% + 4 + 2 + 4999 + 11.76% + 0 + 0 + 0 + 18 + 18 + 0 + 0 + 0 + 0 + 0 + 0 + 18 + 0 + 0 + 0 + 0 + 0 + 0% + 0 + 0 + 18 + 18 + 1 + 0 + 1 + 100% + 1 + 121 + 0% + 0% + 0% + 100% + 0% + 0% + 100% + 1 + 121 + \ No newline at end of file diff --git a/tests/System/expected/test_max_php_old__API.get_day.xml b/tests/System/expected/test_max_php_old__API.get_day.xml new file mode 100644 index 0000000..5ff2310 --- /dev/null +++ b/tests/System/expected/test_max_php_old__API.get_day.xml @@ -0,0 +1,89 @@ + + + 1 + 18 + 0 + 18 + 1 + 18 + 2169 + 1 + 1 + 1 + 0 + 1 + 100% + 1 + 0 + 17 + 17 + 1 + 0 + 1 + 100% + 1 + 128 + 0 + 0 + 0 + 0 + 18 + 0 + 0 + 0 + 0 + 0 + 19 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + 2 + 4999 + 11.11% + 0 + 0 + 0 + 0% + 4 + 2 + 4999 + 11.76% + 0 + 0 + 0 + 18 + 18 + 0 + 0 + 0 + 0 + 0 + 0 + 0% + 0% + 100% + 0% + 0% + 100% + 1 + 121 + diff --git a/tests/System/expected/test_min_php___API.get_day.xml b/tests/System/expected/test_min_php___API.get_day.xml new file mode 100644 index 0000000..0ae73e5 --- /dev/null +++ b/tests/System/expected/test_min_php___API.get_day.xml @@ -0,0 +1,109 @@ + + + 1 + 18 + 0 + 18 + 1 + 18 + 2169 + 1 + 1 + 1 + 0 + 1 + 100% + 1 + 0 + 17 + 17 + 1 + 0 + 1 + 100% + 1 + 128 + 0 + 0 + 0 + 0 + 0 + 18 + 0 + 0 + 0 + 0 + 0 + 0 + 18 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + 2 + 4999 + 11.11% + 0 + 0 + 0 + 0% + 4 + 2 + 4999 + 11.76% + 0 + 0 + 0 + 18 + 18 + 0 + 0 + 0 + 0 + 0 + 0 + 18 + 0 + 0 + 0 + 0 + 0 + 0% + 0 + 0 + 18 + 18 + 1 + 0 + 1 + 100% + 1 + 121 + 0% + 0% + 0% + 100% + 0% + 0% + 100% + 1 + 121 + \ No newline at end of file diff --git a/tests/System/expected/test_min_php___Live.getLastVisitsDetails_day.xml b/tests/System/expected/test_min_php___Live.getLastVisitsDetails_day.xml new file mode 100644 index 0000000..2188b90 --- /dev/null +++ b/tests/System/expected/test_min_php___Live.getLastVisitsDetails_day.xml @@ -0,0 +1,1486 @@ + + + + 1 + 27 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.com/ + Homepage + 8 + + + 28 + + 1083 + 18 min 3s + 1 + Homepage + http://example.com/ + + plugins/Morpheus/images/action.svg + + 0 M + + + ecommerceOrder + Ecommerce_ORDER_ID_1 + 555 + 0 + 0 + 0 + 0 + 5 + + + campaign + Ecommerce_campaign + Ecommerce_keyword + + + item SKU + item name + item category + 111 + 5 + + item category + + + + plugins/Morpheus/images/ecommerceOrder.png + plugins/Morpheus/images/ecommerceOrder.svg + Ordered (Ecommerce_ORDER_ID_1) + $555 revenue - 5 items: item name) + + + + 0 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 1 + plugins/Morpheus/images/goal.svg + 10 + ordered + plugins/Morpheus/images/ecommerceOrder.svg + 0 + 35640 + 0 + 0 + 1083 + 18 min 3s + 0 + 1 + 1 + campaign + Campaigns + Ecommerce_campaign + Ecommerce_keyword + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 555 + 1 + 5 + 555 + 1 + 5 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + 1024x768 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + Ecommmerce_CampaignId + Ecommerce_content + Ecommerce_keyword + Ecommerce_medium + Ecommerce_campaign + Ecommerce_source + Ecommmerce_CampaignGroup + Ecommmerce_CampaignPlacement + + + 1 + 26 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.com/ + Homepage + 8 + + + 27 + + 361 + 6 min 1s + 1 + Homepage + http://example.com/ + + plugins/Morpheus/images/action.svg + + 0 M + + + ecommerceAbandonedCart + 555 + 5 + + + campaign + Ecommerce_campaign + Ecommerce_keyword + + + item SKU + item name + item category + 111 + 5 + + item category + + + + plugins/Morpheus/images/ecommerceAbandonedCart.png + plugins/Morpheus/images/ecommerceAbandonedCart.svg + Abandoned Cart + $555 revenue - 5 items: item name) + + + + 0 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 0 + + 9 + abandonedCart + plugins/Morpheus/images/ecommerceAbandonedCart.svg + 0 + 32040 + 0 + + 361 + 6 min 1s + 0 + 1 + 1 + campaign + Campaigns + Ecommerce_campaign + Ecommerce_keyword + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 555 + 1 + 5 + 555 + 1 + 5 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + 1024x768 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + Ecommmerce_CampaignId + Ecommerce_content + Ecommerce_keyword + Ecommerce_medium + Ecommerce_campaign + Ecommerce_source + Ecommmerce_CampaignGroup + Ecommmerce_CampaignPlacement + + + 1 + 25 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.com/homepage + this is a goal conversion <-- goal conversion + 11 + + + 26 + + 725 + 12 min 5s + 1 + this is a goal conversion <-- goal conversion + http://example.com/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + goal + title match + 1 + + 10 + 26 + + http://example.com/homepage + campaign + campaign_with_two_goals_conversions + + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + title match ($10 revenue) + + + + goal + title match + 1 + + 1101 + + + http://example.com/anotherpage + campaign + Campaign_with_two_goals_conversions + + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + title match ($1,101 revenue) + + + + goal + title match + 2 + + 3333 + + + http://example.com/anotherpage + campaign + Campaign_with_two_goals_conversions + + plugins/Morpheus/images/goal.png + plugins/Morpheus/images/goal.svg + Goal conversion + title match ($3,333 revenue) + + + + 3 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 1 + plugins/Morpheus/images/goal.svg + 8 + none + + 0 + 28440 + 0 + + 725 + 12 min 5s + 0 + 1 + 1 + campaign + Campaigns + Campaign_with_two_goals_conversions + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 555 + 1 + 5 + 555 + 1 + 5 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + 1024x768 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + + + + + Campaign_with_two_goals_conversions + + + + + + 1 + 24 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.com/ + Verrrrry long Campaign Dimensions, check they are truncated + 8 + + + 25 + + 0 + 0s + 1 + Verrrrry long Campaign Dimensions, check they are truncated + http://example.com/ + + plugins/Morpheus/images/action.svg + + 0 M + + + 0 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 0 + + 7 + none + + 0 + 24840 + 0 + + 0 + 0s + 0 + 1 + 1 + campaign + Campaigns + Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM + Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 555 + 1 + 5 + 555 + 1 + 5 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + 1024x768 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + + + Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K + + Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM + Lenghty "SOURCE"...Lenghty "SOURCE"...Lenghty "SOURCE"... + + + + + 1 + 23 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.com/homepage + Campaign dimensions are found in the landing page #hash tag + 11 + + + 24 + + 0 + 0s + 1 + Campaign dimensions are found in the landing page #hash tag + http://example.com/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + 0 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 0 + + 6 + none + + 0 + 21240 + 0 + + 0 + 0s + 0 + 1 + 1 + campaign + Campaigns + CampaignNameDimension - No Other Dimension for this visit + + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 555 + 1 + 5 + 555 + 1 + 5 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + 1024x768 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + + + + + CampaignNameDimension - No Other Dimension for this visit + + + + + + 1 + 22 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.com/homepage + Campaign dimensions are found in the landing page #hash tag + 11 + + + 23 + + 0 + 0s + 1 + Campaign dimensions are found in the landing page #hash tag + http://example.com/homepage + + plugins/Morpheus/images/action.svg + + 0 M + + + 0 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 0 + + 5 + none + + 0 + 17640 + 0 + + 0 + 0s + 0 + 1 + 1 + campaign + Campaigns + Campaign_Hashed + Keyword from #hash tag parameter + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 555 + 1 + 5 + 555 + 1 + 5 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 3600 + 1024x768 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + + + Keyword from #hash tag parameter + + Campaign_Hashed + + + + + + 1 + 21 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.com/ + Coming back with a basic non advanced campaign which will be counted as advanced anyway. Kaboom. + 8 + + + 22 + + 0 + 0s + 1 + Coming back with a basic non advanced campaign which will be counted as advanced anyway. Kaboom. + http://example.com/ + + plugins/Morpheus/images/action.svg + + 0 M + + + 0 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 0 + + 4 + none + + 0 + 14040 + 0 + + 0 + 0s + 0 + 1 + 1 + campaign + Campaigns + Default_Offer + Not_An_Advanced_Campaign_At_first + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 555 + 1 + 5 + 555 + 1 + 5 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 7200 + 1024x768 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + + + Not_An_Advanced_Campaign_At_first + + Default_Offer + + + + + + 1 + 35 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.com/ + Coming back with another campaign 17th + 8 + + + 36 + + 0 + 0s + 1 + Coming back with another campaign 17th + http://example.com/ + + plugins/Morpheus/images/action.svg + + 0 M + + + 0 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 0 + + 11 + none + + 0 + 6848 + 0 + + 0 + 0s + 0 + 1 + 1 + campaign + Campaigns + 17th + keyword h + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 555 + 1 + 5 + 555 + 1 + 5 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 1 + 1024x768 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + cid8 + none + keyword h + email + 17th + newsletter_17 + cg8 + top-right + + + 1 + 34 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.com/ + Coming back with another campaign 16th + 8 + + + 35 + + 0 + 0s + 1 + Coming back with another campaign 16th + http://example.com/ + + plugins/Morpheus/images/action.svg + + 0 M + + + 0 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 0 + + 10 + none + + 0 + 6847 + 0 + + 0 + 0s + 0 + 1 + 1 + campaign + Campaigns + 16th + keyword g + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 555 + 1 + 5 + 555 + 1 + 5 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 1 + 1024x768 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + cid7 + none + keyword g + email + 16th + newsletter_16 + cg7 + bottom-left + + + 1 + 33 + 156.5.3.2 + + e16cf2bbaeea2c88 + + + action + http://example.com/ + Coming back with another campaign 15th + 8 + + + 34 + + 0 + 0s + 1 + Coming back with another campaign 15th + http://example.com/ + + plugins/Morpheus/images/action.svg + + 0 M + + + 0 + USD + $ + + + + + Piwik test + + + + + + + + returning + plugins/Live/images/returningVisitor.png + 0 + + 9 + none + + 0 + 6846 + 0 + + 0 + 0s + 0 + 1 + 1 + campaign + Campaigns + 15th + keyword f + + + + + + + + + fr + French + Desktop + plugins/Morpheus/icons/dist/devices/desktop.png + Unknown + Generic Desktop + Windows XP + Windows + plugins/Morpheus/icons/dist/os/WIN.png + WIN + XP + Gecko + Gecko (Firefox) + Firefox 3.6 + Firefox + plugins/Morpheus/icons/dist/browsers/FF.png + FF + 3.6 + 555 + 1 + 5 + 555 + 1 + 5 + 0 + Europe + eur + France + fr + plugins/Morpheus/icons/dist/flags/fr.png + + + + France + + + 12:34:06 + 12 + 0 + 1 + 1024x768 + cookie, flash, java + + + plugins/Morpheus/icons/dist/plugins/cookie.png + cookie + + + plugins/Morpheus/icons/dist/plugins/flash.png + flash + + + plugins/Morpheus/icons/dist/plugins/java.png + java + + + + + cid6 + none + keyword f + email + 15th + newsletter_15 + cg6 + right + + \ No newline at end of file diff --git a/tests/System/expected/test_min_php_expanded__Referrers.getCampaigns_day.xml b/tests/System/expected/test_min_php_expanded__Referrers.getCampaigns_day.xml new file mode 100644 index 0000000..a6468b9 --- /dev/null +++ b/tests/System/expected/test_min_php_expanded__Referrers.getCampaigns_day.xml @@ -0,0 +1,452 @@ + + + + + 1 + 2 + 2 + 0 + 1 + 1444 + 2 + 1 + + + 1 + 1 + 555 + 5 + + + 1 + 1 + 555 + 0 + 0 + 0 + 0 + 5 + + + 1 + 555 + referrerType==campaign;referrerName==Ecommerce_campaign + + + + 1 + 2 + 2 + 0 + 1 + 1444 + 2 + 1 + + + 1 + 1 + 555 + 5 + + + 1 + 1 + 555 + 0 + 0 + 0 + 0 + 5 + + + 1 + 555 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==10th + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==11th + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==12th + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==13th + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==14th + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==15th + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==16th + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==17th + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==CampaignNameDimension+-+No+Other+Dimension+for+this+visit + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==Campaign_Hashed + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 725 + 1 + 1 + + + 1 + 1 + 3333 + + + 1 + 3333 + referrerType==campaign;referrerName==Campaign_with_two_goals_conversions + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==Default_Offer + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAME%22...Lenghty+%22NAM + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==November_Offer + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==October_Offer + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + + + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==SHOULD_BE_NEW_VISIT + + + + + + 2 + 1 + 1111 + + + 2 + 1111 + 0 + referrerType==campaign;referrerName==campaign_with_two_goals_conversions + + \ No newline at end of file diff --git a/tests/System/expected/test_min_php_flat__Referrers.getCampaigns_day.xml b/tests/System/expected/test_min_php_flat__Referrers.getCampaigns_day.xml new file mode 100644 index 0000000..044d813 --- /dev/null +++ b/tests/System/expected/test_min_php_flat__Referrers.getCampaigns_day.xml @@ -0,0 +1,282 @@ + + + + + 1 + 2 + 2 + 0 + 1 + 1444 + 2 + 1 + + + 1 + 1 + 555 + 5 + + + 1 + 1 + 555 + 0 + 0 + 0 + 0 + 5 + + + 1 + 555 + referrerType==campaign;referrerName==Ecommerce_campaign;referrerType==campaign;referrerKeyword==Ecommerce_keyword + Ecommerce_campaign + Ecommerce_keyword + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==10th;referrerType==campaign;referrerKeyword==keyword+a + 10th + keyword a + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==11th;referrerType==campaign;referrerKeyword==keyword+b + 11th + keyword b + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==12th;referrerType==campaign;referrerKeyword==keyword+c + 12th + keyword c + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==13th;referrerType==campaign;referrerKeyword==keyword+d + 13th + keyword d + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==14th;referrerType==campaign;referrerKeyword==keyword+e + 14th + keyword e + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==15th;referrerType==campaign;referrerKeyword==keyword+f + 15th + keyword f + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==16th;referrerType==campaign;referrerKeyword==keyword+g + 16th + keyword g + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==17th;referrerType==campaign;referrerKeyword==keyword+h + 17th + keyword h + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==CampaignNameDimension+-+No+Other+Dimension+for+this+visit + CampaignNameDimension - No Other Dimension for this visit + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==Campaign_Hashed;referrerType==campaign;referrerKeyword==Keyword+from+%23hash+tag+parameter + Campaign_Hashed + Keyword from #hash tag parameter + + + + 1 + 1 + 1 + 0 + 1 + 725 + 1 + 1 + + + 1 + 1 + 3333 + + + 1 + 3333 + referrerType==campaign;referrerName==Campaign_with_two_goals_conversions + Campaign_with_two_goals_conversions + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==Default_Offer;referrerType==campaign;referrerKeyword==Not_An_Advanced_Campaign_At_first + Default_Offer + Not_An_Advanced_Campaign_At_first + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM;referrerType==campaign;referrerKeyword==Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22KEYWORD%22...Lenghty+%22K + Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAME"...Lenghty "NAM + Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "KEYWORD"...Lenghty "K + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==November_Offer;referrerType==campaign;referrerKeyword==Mot_cl%C3%A9_P%C3%89P%C3%88RE + November_Offer + Mot_clé_PÉPÈRE + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==October_Offer;referrerType==campaign;referrerKeyword==Mot_cl%C3%A9_P%C3%89P%C3%88RE + October_Offer + Mot_clé_PÉPÈRE + + + + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 0 + referrerType==campaign;referrerName==SHOULD_BE_NEW_VISIT + SHOULD_BE_NEW_VISIT + + + + + + 2 + 1 + 1111 + + + 2 + 1111 + 0 + referrerType==campaign;referrerName==campaign_with_two_goals_conversions + campaign_with_two_goals_conversions + + \ No newline at end of file diff --git a/tests/System/expected/test_min_php_old__API.get_day.xml b/tests/System/expected/test_min_php_old__API.get_day.xml new file mode 100644 index 0000000..32404d2 --- /dev/null +++ b/tests/System/expected/test_min_php_old__API.get_day.xml @@ -0,0 +1,89 @@ + + + 1 + 18 + 0 + 18 + 1 + 18 + 2169 + 1 + 1 + 1 + 0 + 1 + 100% + 1 + 0 + 17 + 17 + 1 + 0 + 1 + 100% + 1 + 128 + 0 + 0 + 0 + 0 + 18 + 0 + 0 + 0 + 0 + 0 + 18 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + 2 + 4999 + 11.11% + 0 + 0 + 0 + 0% + 4 + 2 + 4999 + 11.76% + 0 + 0 + 0 + 18 + 18 + 0 + 0 + 0 + 0 + 0 + 0 + 0% + 0% + 100% + 0% + 0% + 100% + 1 + 121 + diff --git a/tests/System/expected/test_old__API.get_day.xml b/tests/System/expected/test_old__API.get_day.xml index 8accf7a..736c646 100644 --- a/tests/System/expected/test_old__API.get_day.xml +++ b/tests/System/expected/test_old__API.get_day.xml @@ -1,11 +1,11 @@ 1 - 10 + 18 0 - 10 + 18 1 - 10 + 18 2169 1 1 @@ -15,30 +15,25 @@ 100% 1 0 - 9 - 9 + 17 + 17 1 0 1 100% 1 - 241 + 128 0 0 0 0 - 10 + 18 0 0 0 0 0 - 9 - 0% - 0% - 100% - 0% - 0% + 18 0 0 0 @@ -63,7 +58,7 @@ 4 2 4999 - 20% + 11.11% 0 0 0 @@ -71,19 +66,25 @@ 4 2 4999 - 22.22% + 11.76% 0 0 0 - 10 - 10 + 18 + 18 0 0 0 0 0 0 + 18 + 0% + 0% + 100% + 0% + 0% 100% 1 - 217 + 121 \ No newline at end of file diff --git a/tests/UI/Reports_spec.js b/tests/UI/Reports_spec.js index aa0e49c..14820ec 100644 --- a/tests/UI/Reports_spec.js +++ b/tests/UI/Reports_spec.js @@ -65,4 +65,12 @@ describe("MarketingCampaignsReporting_Reports", function () { var report = await page.$('.reporting-page'); expect(await report.screenshot()).to.matchImage('visitor_log'); }); + + it('should display the settings page', async () => { + var selector = '.card-content:contains(MarketingCampaignsReporting)'; + await page.goto('?module=CoreAdminHome&action=generalSettings&idSite=1&period=day&date=yesterday'); + await page.waitForTimeout(1000); + await page.waitForNetworkIdle(); + expect(await page.screenshotSelector(selector)).to.matchImage('settings_page'); + }); }); diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_ecommerce.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_ecommerce.png index 2ae1ff4..66ca616 100644 Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_ecommerce.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_ecommerce.png differ diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_goals.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_goals.png index a845a78..1959906 100644 Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_goals.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_ReportsByDimensionAddition_loaded_goals.png differ diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_1.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_1.png index 3098792..034b2bb 100644 Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_1.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_1.png differ diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_2.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_2.png index 38707c2..fbcf833 100644 Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_2.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_campaign_name_report_flat_page_2.png differ diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_1.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_1.png index 00a1a0f..41baf59 100644 Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_1.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_1.png differ diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_2.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_2.png index 9ca5869..20ae4d7 100644 Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_2.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_camppaign_source-medium_report_flat_page_2.png differ diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_loaded.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_loaded.png index 88745b3..edbd355 100644 Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_loaded.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_loaded.png differ diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_settings_page.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_settings_page.png new file mode 100644 index 0000000..06e3319 Binary files /dev/null and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_settings_page.png differ diff --git a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_visitor_log.png b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_visitor_log.png index b70802a..7bfa6ae 100644 Binary files a/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_visitor_log.png and b/tests/UI/expected-ui-screenshots/MarketingCampaignsReporting_Reports_visitor_log.png differ diff --git a/tests/Unit/Campaign/CampaignDetectorTest.php b/tests/Unit/Campaign/CampaignDetectorTest.php index 7139b73..0756fca 100644 --- a/tests/Unit/Campaign/CampaignDetectorTest.php +++ b/tests/Unit/Campaign/CampaignDetectorTest.php @@ -1,4 +1,5 @@ detectCampaignFromRequest($request, $campaignParams); - $this->assertEquals($expectedOutput, $dimensions); + $this->assertSame($expectedOutput, $dimensions); } - /** + /** * @dataProvider provideVisitData * @param array $visitorInfo * @param array $campaignParams @@ -59,11 +60,11 @@ public function provideRequestData() return [ 'normal query string' => [ 'request' => $this->createRequestMock( - 'http://example.com/?mtm_campaign=campName&mtm_kwd=sdf1' + 'http://example.com/?mtm_campaign=CAmpName&mtm_kwd=sdf1' ), 'campaignParams' => $this->getCampaignParameters(), 'expectedOutput' => [ - 'campaign_name' => 'campname', + 'campaign_name' => 'CAmpName', 'campaign_keyword' => 'sdf1' ] ], @@ -73,7 +74,7 @@ public function provideRequestData() ), 'campaignParams' => $this->getCampaignParameters(), 'expectedOutput' => [ - 'campaign_name' => 'campname2', + 'campaign_name' => 'campName2', 'campaign_keyword' => 'sdf2' ] ], @@ -83,7 +84,7 @@ public function provideRequestData() ), 'campaignParams' => $this->getCampaignParameters(), 'expectedOutput' => [ - 'campaign_name' => 'campname', + 'campaign_name' => 'campName', 'campaign_keyword' => 'sdf1' ] ], @@ -93,7 +94,7 @@ public function provideRequestData() ), 'campaignParams' => $this->getCampaignParameters(), 'expectedOutput' => [ - 'campaign_name' => 'campname2', + 'campaign_name' => 'campName2', 'campaign_keyword' => 'sdf2' ] ], @@ -152,5 +153,4 @@ private function createRequestMock($returnedUrl) return $mock; } - }