PageRenderTime 48ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php

https://github.com/CodeYellowBV/piwik
PHP | 184 lines | 121 code | 26 blank | 37 comment | 6 complexity | e97ba7a4e14bc5d51cec9a93cfead9d1 MD5 | raw file
Possible License(s): LGPL-3.0, JSON, MIT, GPL-3.0, LGPL-2.1, GPL-2.0, AGPL-1.0, BSD-2-Clause, BSD-3-Clause
  1. <?php
  2. /**
  3. * Piwik - free/libre analytics platform
  4. *
  5. * @link http://piwik.org
  6. * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  7. */
  8. use Piwik\Date;
  9. use Piwik\Plugins\Goals\API as APIGoals;
  10. use Piwik\Plugins\SitesManager\API as APISitesManager;
  11. /**
  12. * Adds two websites and tracks visits from two visitors on different days.
  13. */
  14. class Test_Piwik_Fixture_TwoSitesTwoVisitorsDifferentDays extends Fixture
  15. {
  16. public $idSite1 = 1;
  17. public $idSite2 = 2;
  18. public $idGoal1 = 1;
  19. public $idGoal2 = 2;
  20. public $dateTime = '2010-01-03 11:22:33';
  21. public $allowConversions = false;
  22. public function setUp()
  23. {
  24. $this->setUpWebsitesAndGoals();
  25. self::setUpScheduledReports($this->idSite1);
  26. $this->trackVisits();
  27. }
  28. public function tearDown()
  29. {
  30. // empty
  31. }
  32. private function setUpWebsitesAndGoals()
  33. {
  34. $ecommerce = $this->allowConversions ? 1 : 0;
  35. // tests run in UTC, the Tracker in UTC
  36. if (!self::siteCreated($idSite = 1)) {
  37. self::createWebsite($this->dateTime, $ecommerce, "Site 1");
  38. }
  39. if (!self::siteCreated($idSite = 2)) {
  40. self::createWebsite($this->dateTime, 0, "Site 2");
  41. }
  42. if ($this->allowConversions) {
  43. if (!self::goalExists($idSite = 1, $idGoal = 1)) {
  44. APIGoals::getInstance()->addGoal($this->idSite1, 'all', 'url', 'http', 'contains', false, 5);
  45. }
  46. if (!self::goalExists($idSite = 1, $idGoal = 2)) {
  47. APIGoals::getInstance()->addGoal($this->idSite2, 'all', 'url', 'http', 'contains');
  48. }
  49. }
  50. APISitesManager::getInstance()->updateSite(
  51. $this->idSite1, "Site 1", $urls = null, $ecommerce = null, $siteSearch = null,
  52. $searchKeywordParameters = null, $searchCategoryParameters = null, $excludedIps = null,
  53. $excludedQueryParameters = null, $timezone = null, $currency = null, $group = null,
  54. $startDate = null, $excludedUserAgents = null, $keepURLFragments = 2); // KEEP_URL_FRAGMENT_NO No for idSite 1
  55. APISitesManager::getInstance()->updateSite(
  56. $this->idSite2, "Site 2", $urls = null, $ecommerce = null, $siteSearch = null,
  57. $searchKeywordParameters = null, $searchCategoryParameters = null, $excludedIps = null,
  58. $excludedQueryParameters = null, $timezone = null, $currency = null, $group = null,
  59. $startDate = null, $excludedUserAgents = null, $keepURLFragments = 1); // KEEP_URL_FRAGMENT_YES Yes for idSite 2
  60. }
  61. private function trackVisits()
  62. {
  63. $dateTime = $this->dateTime;
  64. $idSite = $this->idSite1;
  65. $idSite2 = $this->idSite2;
  66. $this->trackVisitsSite1($idSite, $dateTime);
  67. $this->trackVisitsSite2($idSite2, $dateTime);
  68. }
  69. /**
  70. * @param $idSite
  71. * @param $dateTime
  72. */
  73. private function trackVisitsSite1($idSite, $dateTime)
  74. {
  75. // -
  76. // First visitor on Idsite 1: two page views
  77. $datetimeSpanOverTwoDays = '2010-01-03 23:55:00';
  78. $visitorA = self::getTracker($idSite, $datetimeSpanOverTwoDays, $defaultInit = true);
  79. $visitorA->setUrlReferrer('http://referrer.com/page.htm?param=valuewith some spaces');
  80. $visitorA->setUrl('http://example.org/index.htm#ignoredFragment');
  81. $visitorA->DEBUG_APPEND_URL = '&_idts=' . Date::factory($datetimeSpanOverTwoDays)->getTimestamp();
  82. $visitorA->setGenerationTime(123);
  83. self::checkResponse($visitorA->doTrackPageView('first page view'));
  84. $visitorA->setForceVisitDateTime(Date::factory($datetimeSpanOverTwoDays)->addHour(0.1)->getDatetime());
  85. // testing with empty URL and empty page title
  86. $visitorA->setUrl(' ');
  87. $visitorA->setGenerationTime(223);
  88. self::checkResponse($visitorA->doTrackPageView(' '));
  89. // -
  90. // Second new visitor on Idsite 1: one page view
  91. $visitorB = self::getTracker($idSite, $dateTime, $defaultInit = true);
  92. $visitorB->enableBulkTracking();
  93. $visitorB->setIp('100.52.156.83');
  94. $visitorB->setResolution(800, 300);
  95. $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour(1)->getDatetime());
  96. $visitorB->setUrlReferrer('');
  97. $visitorB->setUserAgent('Opera/9.63 (Windows NT 5.1; U; en) Presto/2.1.1');
  98. $visitorB->setUrl('http://example.org/products');
  99. $visitorB->DEBUG_APPEND_URL = '&_idts=' . Date::factory($dateTime)->addHour(1)->getTimestamp();
  100. $visitorB->setGenerationTime(153);
  101. self::assertTrue($visitorB->doTrackPageView('first page view'));
  102. // -
  103. // Second visitor again on Idsite 1: 2 page views 2 days later, 2010-01-05
  104. // If you are thinking of *decreasing* this value, just DON'T (it's important for our test case)
  105. $daysToGenerateVisitsFor = 10;
  106. for($days = 2; $days < $daysToGenerateVisitsFor; $days++) {
  107. $hoursOffset = $days * 24;
  108. $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour($hoursOffset)->getDatetime());
  109. // visitor_returning is set to 1 only when visit count more than 1
  110. // Temporary, until we implement 1st party cookies in PiwikTracker
  111. $visitorB->DEBUG_APPEND_URL .= '&_idvc=2&_viewts=' . Date::factory($dateTime)->getTimestamp();
  112. $visitorB->setUrlReferrer('http://referrer.com/Other_Page.htm');
  113. $visitorB->setUrl('http://example.org/index.htm');
  114. $visitorB->setGenerationTime(323);
  115. self::assertTrue($visitorB->doTrackPageView('second visitor/two days later/a new visit'));
  116. // Second page view 6 minutes later
  117. $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour($hoursOffset)->addHour(0.1)->getDatetime());
  118. $visitorB->setUrl('http://example.org/thankyou');
  119. $visitorB->setGenerationTime(173);
  120. self::assertTrue($visitorB->doTrackPageView('second visitor/two days later/second page view'));
  121. // testing a strange combination causing an error in r3767
  122. $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour($hoursOffset)->addHour(0.2)->getDatetime());
  123. self::assertTrue($visitorB->doTrackAction('mailto:test@example.org', 'link'));
  124. $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour($hoursOffset)->addHour(0.25)->getDatetime());
  125. self::assertTrue($visitorB->doTrackAction('mailto:test@example.org/strangelink', 'link'));
  126. // Actions.getPageTitle tested with this title
  127. $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour($hoursOffset)->addHour(0.25)->getDatetime());
  128. $visitorB->setGenerationTime(452);
  129. self::assertTrue($visitorB->doTrackPageView('Checkout / Purchasing...'));
  130. self::checkBulkTrackingResponse($visitorB->doBulkTrack());
  131. }
  132. }
  133. /**
  134. * @param $idSite2
  135. * @param $dateTime
  136. */
  137. private function trackVisitsSite2($idSite2, $dateTime)
  138. {
  139. // -
  140. // First visitor on Idsite 2: one page view, with Website referrer
  141. $visitorAsite2 = self::getTracker($idSite2, Date::factory($dateTime)->addHour(24)->getDatetime(), $defaultInit = true);
  142. $visitorAsite2->setUserAgent('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0;)');
  143. $visitorAsite2->setUrlReferrer('http://only-homepage-referrer.com/');
  144. $visitorAsite2->setUrl('http://example2.com/home#notIgnoredFragment#');
  145. $visitorAsite2->DEBUG_APPEND_URL = '&_idts=' . Date::factory($dateTime)->addHour(24)->getTimestamp();
  146. $visitorAsite2->setGenerationTime(193);
  147. self::checkResponse($visitorAsite2->doTrackPageView('Website 2 page view'));
  148. // test with invalid URL
  149. $visitorAsite2->setUrl('this is invalid url');
  150. // and an empty title
  151. $visitorAsite2->setGenerationTime(203);
  152. self::checkResponse($visitorAsite2->doTrackPageView(''));
  153. // track a page view with a domain alias to test the aggregation of both actions
  154. $visitorAsite2->setUrl('http://example2alias.org/home#notIgnoredFragment#');
  155. $visitorAsite2->setGenerationTime(503);
  156. self::checkResponse($visitorAsite2->doTrackPageView(''));
  157. }
  158. }