diff options
Diffstat (limited to 'plugins/Live/tests/System/APITest.php')
-rw-r--r-- | plugins/Live/tests/System/APITest.php | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/plugins/Live/tests/System/APITest.php b/plugins/Live/tests/System/APITest.php new file mode 100644 index 0000000000..2c85088a19 --- /dev/null +++ b/plugins/Live/tests/System/APITest.php @@ -0,0 +1,152 @@ +<?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\Plugins\Live\tests\Integration; + +use Piwik\Date; +use Piwik\Db; +use Piwik\Plugins\Goals\API as GoalsApi; +use Piwik\Plugins\Live\API; +use Piwik\Access; +use Piwik\Tests\Framework\Fixture; +use Piwik\Tests\Framework\Mock\FakeAccess; +use Piwik\Tests\Framework\TestCase\SystemTestCase; + +/** + * @group Live + * @group APITest + * @group Plugins + */ +class APITest extends SystemTestCase +{ + /** + * @var API + */ + private $api; + private $idSite = 1; + + public function setUp() + { + parent::setUp(); + + $this->api = API::getInstance(); + $this->setSuperUser(); + $this->createSite(); + } + + /** + * @expectedException \Exception + * @expectedExceptionMessage checkUserHasViewAccess Fake exception + */ + public function test_GetCounters_ShouldFail_IfUserHasNoPermission() + { + $this->setAnonymous(); + $this->api->getCounters($this->idSite, 5); + } + + public function test_GetCounters_ShouldReturnZeroForAllCounters_IfThereAreNoVisitsEtc() + { + $counters = $this->api->getCounters($this->idSite, 5); + + $this->assertEquals($this->buildCounter(0, 0, 0, 0), $counters); + } + + public function test_GetCounters_ShouldOnlyReturnResultsOfLastMinutes() + { + $this->trackSomeVisits(); + + $counters = $this->api->getCounters($this->idSite, 5); + $this->assertEquals($this->buildCounter(19, 32, 16, 16), $counters); + + $counters = $this->api->getCounters($this->idSite, 20); + $this->assertEquals($this->buildCounter(24, 60, 20, 40), $counters); + + $counters = $this->api->getCounters($this->idSite, 0); + $this->assertEquals($this->buildCounter(0, 0, 0, 0), $counters); + } + + private function trackSomeVisits() + { + $nowTimestamp = time(); + + // use local tracker so mock location provider can be used + $t = Fixture::getTracker($this->idSite, $nowTimestamp, $defaultInit = true, $useLocal = false); + $t->enableBulkTracking(); + + for ($i = 0; $i != 20; ++$i) { + $t->setForceNewVisit(); + $t->setVisitorId( substr(md5($i * 1000), 0, $t::LENGTH_VISITOR_ID)); + + $factor = 10; + if ($i > 15) { + $factor = 30; // make sure first 15 visits are always within 5 minutes to prevent any random fails + } + $time = $nowTimestamp - ($i * $factor); + + // first visit -> this one is > 5 minutes and should be ignored in one test + $date = Date::factory($time - 600); + $t->setForceVisitDateTime($date->getDatetime()); + $t->setUrl("http://piwik.net/space/quest/iv"); + $t->doTrackPageView("Space Quest XV"); + + $t->doTrackGoal(1); // this one is > 5 minutes and should be ignored in one test + + // second visit + $date = Date::factory($time - 1); + $t->setForceVisitDateTime($date->getDatetime()); + $t->setUrl("http://piwik.net/space/quest/iv"); + $t->doTrackPageView("Space Quest XII"); + + if ($i % 6 == 0) { + $t->setForceNewVisit(); // to test visitors vs visits + } + + // third visit + $date = Date::factory($time); + $t->setForceVisitDateTime($date->getDatetime()); + $t->setUrl("http://piwik.net/grue/$i"); + $t->doTrackPageView('It is pitch black...'); + + $t->doTrackGoal(2); + } + + $t->doBulkTrack(); + } + + private function buildCounter($visits, $actions, $visitors, $visitsConverted) + { + return array(array( + 'visits' => $visits, + 'actions' => $actions, + 'visitors' => $visitors, + 'visitsConverted' => $visitsConverted, + )); + } + + private function createSite() + { + Fixture::createWebsite('2013-01-23 01:23:45'); + GoalsApi::getInstance()->addGoal(1, 'MyName', 'manually', '', 'contains'); + GoalsApi::getInstance()->addGoal(1, 'MyGoal', 'manually', '', 'contains'); + } + + private function setSuperUser() + { + $pseudoMockAccess = new FakeAccess(); + FakeAccess::$superUser = true; + Access::setSingletonInstance($pseudoMockAccess); + } + + private function setAnonymous() + { + $pseudoMockAccess = new FakeAccess(); + FakeAccess::$superUser = false; + Access::setSingletonInstance($pseudoMockAccess); + } + +} |