Newer
Older
Thomas Steur
a validé
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
Thomas Steur
a validé
namespace Piwik\Plugins\Live\tests\System;
Thomas Steur
a validé
use Piwik\Date;
Thomas Steur
a validé
use Piwik\Plugins\Goals\API as GoalsApi;
use Piwik\Plugins\Live\API;
Thomas Steur
a validé
use Piwik\Tests\Framework\Fixture;
Matthieu Napoli
a validé
use Piwik\Tests\Framework\Mock\FakeAccess;
Thomas Steur
a validé
use Piwik\Tests\Framework\TestCase\SystemTestCase;
Thomas Steur
a validé
/**
* @group Live
Thomas Steur
a validé
* @group Plugins
*/
Thomas Steur
a validé
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{
/**
* @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);
Thomas Steur
a validé
$this->assertEquals($this->buildCounter(19, 32, 16, 16), $counters);
Thomas Steur
a validé
$counters = $this->api->getCounters($this->idSite, 20);
Thomas Steur
a validé
$this->assertEquals($this->buildCounter(24, 60, 20, 40), $counters);
Thomas Steur
a validé
$counters = $this->api->getCounters($this->idSite, 0);
$this->assertEquals($this->buildCounter(0, 0, 0, 0), $counters);
}
public function test_GetCounters_ShouldHideAllColumnsIfRequested()
{
$exampleCounter = $this->buildCounter(0, 0, 0, 0);
$counters = $this->api->getCounters($this->idSite, 5, false, array(), array_keys($exampleCounter[0]));
$this->assertEquals(array(array()), $counters);
}
public function test_GetCounters_ShouldHideSomeColumnsIfRequested()
{
$counters = $this->api->getCounters($this->idSite, 20, false, array(), array('visitsConverted', 'visitors'));
$this->assertEquals(array(array('visits' => 24, 'actions' => 60)), $counters);
}
public function test_GetCounters_ShouldShowAllColumnsIfRequested()
{
$counter = $this->buildCounter(24, 60, 20, 40);
$counters = $this->api->getCounters($this->idSite, 20, false, array_keys($counter[0]));
$this->assertEquals($counter, $counters);
}
public function test_GetCounters_ShouldShowSomeColumnsIfRequested()
{
$counters = $this->api->getCounters($this->idSite, 20, false, array('visits', 'actions'));
$this->assertEquals(array(array('visits' => 24, 'actions' => 60)), $counters);
}
public function test_GetCounters_ShouldHideColumnIfGivenInShowAndHide()
{
$counters = $this->api->getCounters($this->idSite, 20, false, array('visits', 'actions'), array('actions'));
$this->assertEquals(array(array('visits' => 24)), $counters);
}
Thomas Steur
a validé
private function trackSomeVisits()
{
$nowTimestamp = time();
// use local tracker so mock location provider can be used
Thomas Steur
a validé
$t = Fixture::getTracker($this->idSite, $nowTimestamp, $defaultInit = true, $useLocal = false);
$t->enableBulkTracking();
Thomas Steur
a validé
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");
Thomas Steur
a validé
if ($i % 6 == 0) {
$t->setForceNewVisit(); // to test visitors vs visits
}
Thomas Steur
a validé
// 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);
}
Thomas Steur
a validé
$t->doBulkTrack();
Thomas Steur
a validé
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
}
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()
{
FakeAccess::$superUser = true;
}
private function setAnonymous()
{
FakeAccess::clearAccess();
Thomas Steur
a validé
}
public static function provideContainerConfigBeforeClass()
{
return array(
'Piwik\Access' => new FakeAccess()
);
}