diff --git a/core/ArchiveProcessor.php b/core/ArchiveProcessor.php index 9cc67f6271f99b7dcd1cc71812e0b9994a08181f..bd0b0e3d1074a16026af8daaa1221da6a579a238 100644 --- a/core/ArchiveProcessor.php +++ b/core/ArchiveProcessor.php @@ -120,7 +120,7 @@ class ArchiveProcessor $this->archiveWriter = $archiveWriter; $this->skipUniqueVisitorsCalculationForMultipleSites = - Config::getInstance()->General['enable_processing_unique_visitors_multiple_sites'] == 1; + Config::getInstance()->General['enable_processing_unique_visitors_multiple_sites'] == 1; // TODO: move logic to Rules } protected function getArchive() diff --git a/tests/PHPUnit/Fixtures/ThreeSitesWithSharedVisitors.php b/tests/PHPUnit/Fixtures/ThreeSitesWithSharedVisitors.php new file mode 100644 index 0000000000000000000000000000000000000000..88df341fbcae4a428f74d6bd68a0d1636406e165 --- /dev/null +++ b/tests/PHPUnit/Fixtures/ThreeSitesWithSharedVisitors.php @@ -0,0 +1,82 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +namespace Piwik\Tests\Fixtures; + +use Piwik\Common; +use Piwik\Date; +use Piwik\Db; +use Piwik\Tests\Fixture; + +/** + * Adds three sites and tracks some visits w/ visitors that visit each site. + */ +class ThreeSitesWithSharedVisitors extends Fixture +{ + public $idSite = 1; + public $dateTime = '2010-03-06 11:22:33'; + + public function setUp() + { + $this->setUpWebsitesAndGoals(); + $this->trackVisits(); + } + + public function tearDown() + { + // empty + } + + private function setUpWebsitesAndGoals() + { + if (!self::siteCreated($idSite = 1)) { + self::createWebsite($this->dateTime); + } + + if (!self::siteCreated($idSite = 2)) { + self::createWebsite($this->dateTime); + } + + if (!self::siteCreated($idSite = 3)) { + self::createWebsite($this->dateTime); + } + } + + private function trackVisits() + { + $dateTime = $this->dateTime; + $idSite = $this->idSite; + + // two visits to site 1 & 3 + $visitor1 = self::getTracker($idSite, $dateTime, $defaultInit = true); + $visitor1->setForceVisitDateTime(Date::factory($this->dateTime)->getDatetime()); + $visitor1->setUrl('http://helios.org/alpha'); + $visitor1->doTrackPageView("page title"); + + $visitor1->setIdSite(3); + $visitor1->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(1)->getDatetime()); + $visitor1->setUrl('http://taura.org/'); + $visitor1->doTrackPageView("page title"); + + // one visit to site 1 + $visitor2 = self::getTracker($idSite, $dateTime, $defaultInit = true); + $visitor2->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(2)->getDatetime()); + $visitor2->setUrl('http://helios.org/beta'); + $visitor2->doTrackPageView("page title 2"); + + // two visits to site 2 and 3 + $visitor3 = self::getTracker($idSite = 2, $dateTime, $defaultInit = true); + $visitor3->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(3)->getDatetime()); + $visitor3->setUrl('http://virgon.org/'); + $visitor3->doTrackPageView("page title 2"); + + $visitor3->setIdSite(3); + $visitor3->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(4)->getDatetime()); + $visitor3->setUrl('http://taura.org/'); + $visitor3->doTrackPageView("page title"); + } +} \ No newline at end of file diff --git a/tests/PHPUnit/Integration/MultipleSitesArchivingTest.php b/tests/PHPUnit/Integration/MultipleSitesArchivingTest.php new file mode 100644 index 0000000000000000000000000000000000000000..06c366dbe52f23f72f77b62f7ad8455ccf399daa --- /dev/null +++ b/tests/PHPUnit/Integration/MultipleSitesArchivingTest.php @@ -0,0 +1,60 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +namespace Piwik\Tests\Integration; + +use Piwik\Config; +use Piwik\Piwik; +use Piwik\Tests\Fixture; +use Piwik\Tests\Fixtures\ThreeSitesWithSharedVisitors; +use Piwik\Tests\IntegrationTestCase; + +/** + * @group Integration + * @group MultipleSitesArchivingTest + */ +class MultipleSitesArchivingTest extends IntegrationTestCase +{ + public static $fixture = null; // initialized below class definition + + public static function setUpBeforeClass() + { + parent::setUpBeforeClass(); + + $extraSite = Fixture::createWebsite(self::$fixture->dateTime, $ecommerce = 1, "the site"); + + Piwik::addAction("ArchiveProcessor.Parameters.getIdSites", function (&$sites, $period) use ($extraSite) { + if (reset($sites) == $extraSite) { + $sites = array(1, 2, 3); + } + }); + + Config::getInstance()->General['enable_processing_unique_visitors_multiple_sites'] = 0; + } + + public function getApiForTesting() + { + $dateTime = self::$fixture->dateTime; + + return array( + array('VisitsSummary.get', array('idSite' => 4, + 'date' => $dateTime, + 'periods' => array('day', 'month'), + 'testSuffix' => '_sitesGroup')), + ); + } + + /** + * @dataProvider getApiForTesting + */ + public function testApi($api, $params) + { + $this->runApiTests($api, $params); + } +} + +MultipleSitesArchivingTest::$fixture = new ThreeSitesWithSharedVisitors(); \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_MultipleSitesArchivingTest_sitesGroup__VisitsSummary.get_day.xml b/tests/PHPUnit/Integration/expected/test_MultipleSitesArchivingTest_sitesGroup__VisitsSummary.get_day.xml new file mode 100644 index 0000000000000000000000000000000000000000..3cdd6ab92e615e507e8fa80b5be32c3603ce2c19 --- /dev/null +++ b/tests/PHPUnit/Integration/expected/test_MultipleSitesArchivingTest_sitesGroup__VisitsSummary.get_day.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <nb_uniq_visitors>3</nb_uniq_visitors> + <nb_visits>5</nb_visits> + <nb_actions>5</nb_actions> + <nb_visits_converted>0</nb_visits_converted> + <bounce_count>5</bounce_count> + <sum_visit_length>0</sum_visit_length> + <max_actions>1</max_actions> + <bounce_rate>100%</bounce_rate> + <nb_actions_per_visit>1</nb_actions_per_visit> + <avg_time_on_site>0</avg_time_on_site> +</result> \ No newline at end of file diff --git a/tests/PHPUnit/Integration/expected/test_MultipleSitesArchivingTest_sitesGroup__VisitsSummary.get_month.xml b/tests/PHPUnit/Integration/expected/test_MultipleSitesArchivingTest_sitesGroup__VisitsSummary.get_month.xml new file mode 100644 index 0000000000000000000000000000000000000000..3cdd6ab92e615e507e8fa80b5be32c3603ce2c19 --- /dev/null +++ b/tests/PHPUnit/Integration/expected/test_MultipleSitesArchivingTest_sitesGroup__VisitsSummary.get_month.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8" ?> +<result> + <nb_uniq_visitors>3</nb_uniq_visitors> + <nb_visits>5</nb_visits> + <nb_actions>5</nb_actions> + <nb_visits_converted>0</nb_visits_converted> + <bounce_count>5</bounce_count> + <sum_visit_length>0</sum_visit_length> + <max_actions>1</max_actions> + <bounce_rate>100%</bounce_rate> + <nb_actions_per_visit>1</nb_actions_per_visit> + <avg_time_on_site>0</avg_time_on_site> +</result> \ No newline at end of file