public function test_filterDataTable_MatchesExactlyIntegration() { $date = Date::today()->addHour(10); $t = Fixture::getTracker($this->idSite, $date->getDatetime(), $defaultInit = true); $t->setUrlReferrer('http://www.google.com.vn/url?sa=t&rct=j&q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&source=web&cd=4&ved=0FjAD&url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&ei=y-HHAQ&usg=AFQjCN2-nt5_GgDeg&cad=rja'); $t->setUrl('http://example.org/%C3%A9%C3%A9%C3%A9%22%27...%20%3Cthis%20is%20cool%3E!'); $t->setGenerationTime(523); $t->doTrackPageView('incredible title! <>,;'); $t->setForceVisitDateTime($date->addHour(0.1)->getDatetime()); $t->setUrl('http://example.org/dir/file.php?foo=bar&foo2=bar'); $t->setGenerationTime(123); $t->doTrackPageView('incredible title! <>,;'); $t->setForceVisitDateTime($date->addHour(0.2)->getDatetime()); $t->setUrl('http://example.org/dir/file/xyz.php?foo=bar&foo2=bar'); $t->setGenerationTime(231); $t->doTrackPageView('incredible title! <>,;'); $t->setForceVisitDateTime($date->addHour(0.2)->getDatetime()); $t->setUrl('http://example.org/what-is-piwik'); $t->setGenerationTime(231); $t->doTrackPageView('incredible title! <>,;'); $t->setForceVisitDateTime($date->addHour(0.3)->getDatetime()); $t->setUrl('http://example.org/dir/file.php?foo=bar&foo2=bar'); $t->setGenerationTime(147); $t->doTrackPageView('incredible title! <>,;'); // for some reasons @dataProvider results in an "Mysql::getProfiler() undefined method" error $assertions = array(array('nb_hits', 'what-is-piwik', 1), array('nb_hits', '/what-is-piwik', null), array('nb_hits', 'foo', 3), array('nb_visits', 'foo', 2), array('nb_hits', 'i', 5), array('nb_hits', 'foo2=bar', 3), array('nb_hits', '/', 3), array('nb_hits', 'foo=bar&foo2=bar', 3), array('nb_hits', 'php?foo=bar&foo2=bar', 3), array('nb_hits', 'file.php?foo=bar&foo2=bar', 2), array('nb_hits', 'dir/file.php?foo=bar&foo2=bar', 2), array('nb_hits', 'dir', 3), array('avg_time_generation', 'dir/file.php?foo=bar&foo2=bar', 0.135), array('bounce_rate', 'php?foo=bar', 0)); foreach ($assertions as $assert) { $alert = array('report' => 'Actions_getPageUrls', 'metric' => $assert[0], 'period' => 'day', 'report_condition' => 'contains', 'report_matched' => Common::sanitizeInputValue($assert[1])); $value = $this->processor->getValueForAlertInPast($alert, $this->idSite, 0); $this->assertEquals($assert[2], $value, $assert[0] . ':' . $assert[1] . ' should return value ' . $assert[2] . ' but returns ' . $value); } }
private function buildTracker() { $t = Fixture::getTracker($this->idSite, Date::factory('2014-01-05 00:01:01')->getDatetime()); $t->setDebugStringAppend('debug=1'); $t->setTokenAuth(Fixture::getTokenAuth()); $t->setUrl('http://example.org/index1.htm'); return $t; }
public function setUp() { parent::setUp(); $idSite = 1; $dateTime = '2014-01-01 00:00:01'; if (!Fixture::siteCreated($idSite)) { Fixture::createWebsite($dateTime); } $this->tracker = Fixture::getTracker($idSite, $dateTime, $defaultInit = true); }
protected function makeTracker($idSite, $dateTime, $debugStringAppend = '') { $tracker = parent::getTracker($idSite, $dateTime, $defaultInit = true); if ($this->forceLargeWindowLookBackForVisitor) { // Fakes the config value window_look_back_for_visitor tested in TrackerWindowLookBack $debugStringAppend .= '&forceLargeWindowLookBackForVisitor=1'; // Here we force the visitor ID cookie value sent to piwik.php, to create a "unique visitor" for all visits in fixture // we do not use setVisitorId(), because we want shouldLookupOneVisitorFieldOnly() to return false for this particular test case $debugStringAppend .= '&_id=2f4f673d4732e11d'; } $tracker->setDebugStringAppend($debugStringAppend); return $tracker; }
/** * add two visits from same visitor on dec. 29 */ private static function trackTwoVisitsOnSameDay() { $t = Fixture::getTracker(1, '2012-12-29 01:01:30', $defaultInit = true, $useLocal = true); $t->enableBulkTracking(); $t->setUrl('http://site.com/index.htm'); $t->setIp('136.5.3.2'); $t->doTrackPageView('incredible title!'); $t->setForceVisitDateTime('2012-12-29 03:01:30'); $t->setUrl('http://site.com/other/index.htm'); $t->DEBUG_APPEND_URL = '&_idvc=2'; // make sure visit is marked as returning $t->doTrackPageView('other incredible title!'); $t->doBulkTrack(); }
public function setUp() { parent::setUp(); if (!IntegrationTestCase::isRedisAvailable()) { $this->markTestSkipped('Redis extension is not installed, skipping test'); } if (self::isTravisCI() && self::isPhpVersion53()) { $this->markTestSkipped('Redis seems to be not enabled in nginx on Travis + PHP 5.3.3'); } self::$fixture->performSetup(); $idSite = 1; $dateTime = '2014-01-01 00:00:01'; if (!Fixture::siteCreated($idSite)) { Fixture::createWebsite($dateTime); } $queuedTracking = new QueuedTracking(); $this->tracker = Fixture::getTracker($idSite, $dateTime, $defaultInit = true); $this->enableQueue(); }
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(); }
public function test_forceNewVisit_shouldNotForceANewVisitWhenNoKeywordIsSetAndReferrerHostChanges() { $dateTime = '2015-01-03'; $idSite = self::$fixture->idSite; $t = Fixture::getTracker($idSite, $dateTime . ' 00:01:02', $defaultInit = true); // track a campaign that was opened directly (no referrer) $t->setUrlReferrer('http://www.google.com'); $t->setUrl('http://piwik.net/?pk_campaign=adwbuccc'); $t->doTrackPageView('My Title'); // navigate to next page on same page $t->setUrlReferrer('http://piwik.net/?pk_campaign=adwbuccc'); $t->setCustomTrackingParameter('_rcn', 'adwbuccc'); // this parameter would be set by piwik.js from cookie / attributionInfo $t->setCustomTrackingParameter('_rck', ''); // no keyword was used in previous tracking request $t->setUrl('http://piwik.net/page1'); $t->doTrackPageView('Page 1'); /** @var DataTable $visits */ $visits = Request::processRequest('VisitsSummary.get', array('idSite' => 1, 'period' => 'day', 'date' => $dateTime)); $this->assertEquals(1, $visits->getFirstRow()->getColumn('nb_visits')); $this->assertEquals(2, $visits->getFirstRow()->getColumn('nb_actions')); }
private function getTracker($hoursOffset = 0) { $hour = 10; if ($hoursOffset) { $hour += $hoursOffset; } $date = sprintf('%s %d:20:01', $this->date, $hour); $tracker = Fixture::getTracker(1, $date, true, true); $tracker->setTokenAuth(Fixture::getTokenAuth()); return $tracker; }
/** * @dataProvider getVisitsInTimeFrameData */ public function test_hasSiteVisitsInTimeframe_shouldDetectWhetherThereAreVisitsInCertainTimeframe($from, $to, $idSite, $expectedHasVisits) { Fixture::getTracker($this->idSite, '2015-01-25 05:35:27')->doTrackPageView('/test'); $hasVisits = $this->dao->hasSiteVisitsBetweenTimeframe($from, $to, $idSite); $this->assertSame($expectedHasVisits, $hasVisits); }
private function getTracker() { $tracker = Fixture::getTracker(1, self::FIRST_VISIT_TIME, $defaultInit = true, $useLocalTracker = true); $tracker->setTokenAuth(Fixture::getTokenAuth()); // properties that cannot be changed on next action $tracker->setUserAgent(self::TEST_USER_AGENT); $tracker->setBrowserLanguage(self::TEST_BROWSER_LANGUAGE); // properties that can be changed on next action $tracker->setCountry(self::TEST_COUNTRY); $tracker->setRegion(self::TEST_REGION); return $tracker; }
protected static function trackVisitInPast() { $start = Date::factory(self::$dateTime); // add a visit in the past so the idvisit will be greater than the others, but the time will be older // this tests issue #7180 $t = Fixture::getTracker(self::$idSite, $start, $defaultInit = true); // we subtract 5 so it will be on the same day as another visit. this way, we won't create another day archive // and change the counts in asserts $t->setForceVisitDateTime($start->subDay(self::$daysAgoStart - 5)); $t->setUrl("http://whatever.com/days_in_past"); $t->doTrackPageView('visit in past'); }
private function getTracker() { $tracker = Fixture::getTracker(1, $this->date . ' 00:01:01', true, true); $tracker->setTokenAuth(Fixture::getTokenAuth()); return $tracker; }
protected static function _addLogData() { // tracks visits on the following days: // - 2012-01-09 // - 2012-01-14 // - 2012-01-19 // - 2012-01-24 <--- everything before this date is to be purged // - 2012-01-29 // - 2012-02-03 // - 2012-02-08 // - 2012-02-13 // - 2012-02-18 // - 2012-02-23 // - 2012-02-28 // 6 visits in feb, 5 in jan // following actions are created: // - 'First page view' // - 'Second page view' // - 'SKU2' // - 'Canon SLR' // - 'Electronics & Cameras' // - for every visit (11 visits total): // - http://whatever.com/_{$daysSinceLastVisit} // - http://whatever.com/42/{$daysSinceLastVisit} $start = Date::factory(self::$dateTime); self::$idSite = Fixture::createWebsite('2012-01-01', $ecommerce = 1); APIGoals::getInstance()->addGoal(self::$idSite, 'match all', 'url', 'http', 'contains'); $t = Fixture::getTracker(self::$idSite, $start, $defaultInit = true); $t->enableBulkTracking(); $t->setTokenAuth(Fixture::getTokenAuth()); for ($daysAgo = self::$daysAgoStart; $daysAgo >= 0; $daysAgo -= 5) { $dateTime = $start->subDay($daysAgo)->toString(); $t->setForceVisitDateTime($dateTime); $t->setUserAgent('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729)'); // use $daysAgo to make sure new actions are created for every day and aren't used again. // when deleting visits, some of these actions will no longer be referenced in the DB. $t->setUrl("http://whatever.com/_{$daysAgo}"); $t->doTrackPageView('First page view'); $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.05)); $t->setUrl("http://whatever.com/42/{$daysAgo}"); $t->doTrackPageView('Second page view'); $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.1)); $t->setUrl("http://whatever.com/event"); $t->doTrackEvent('Event action', 'event cat', 'daysAgo=' . $daysAgo, 1000); $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)); $t->addEcommerceItem($sku = 'SKU2', $name = 'Canon SLR', $category = 'Electronics & Cameras', $price = 1500, $quantity = 1); $t->doTrackEcommerceOrder($orderId = '937nsjusu ' . $dateTime, $grandTotal = 1111.11, $subTotal = 1000, $tax = 111, $shipping = 0.11, $discount = 666); } Fixture::checkBulkTrackingResponse($t->doBulkTrack()); }