Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <thomas.steur@gmail.com>2015-03-31 05:23:50 +0300
committerThomas Steur <thomas.steur@gmail.com>2015-04-01 00:36:21 +0300
commit8f9b07d7dd4c70117df785d5b22416a325f2a342 (patch)
treead75bd25cdea32d4933a31eb59cb3e04e25c149e /plugins/Live/tests/Integration
parent1b545d301d8248118243dd21e33a3e1aca285f6c (diff)
refs #7458 fix memory error in API Live.getLastVisitsDetails when filter_offset is large
Diffstat (limited to 'plugins/Live/tests/Integration')
-rw-r--r--plugins/Live/tests/Integration/ModelTest.php163
1 files changed, 163 insertions, 0 deletions
diff --git a/plugins/Live/tests/Integration/ModelTest.php b/plugins/Live/tests/Integration/ModelTest.php
new file mode 100644
index 0000000000..f4cceebcad
--- /dev/null
+++ b/plugins/Live/tests/Integration/ModelTest.php
@@ -0,0 +1,163 @@
+<?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\Access;
+use Piwik\Common;
+use Piwik\Plugins\Live\Model;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\Mock\FakeAccess;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
+use Piwik\Tests\Integration\SegmentTest;
+
+/**
+ * @group Live
+ * @group ModelTest
+ * @group Plugins
+ */
+class ModelTest extends IntegrationTestCase
+{
+ public function setUp()
+ {
+ parent::setUp();
+
+ $this->setSuperUser();
+ Fixture::createWebsite('2010-01-01');
+ }
+
+ public function test_makeLogVisitsQueryString()
+ {
+ $model = new Model();
+ list($sql, $bind) = $model->makeLogVisitsQueryString(
+ $idSite = 1,
+ $period = 'month',
+ $date = '2010-01-01',
+ $segment = false,
+ $offset = 0,
+ $limit = 100,
+ $visitorId = false,
+ $minTimestamp = false,
+ $filterSortOrder = false
+ );
+ $expectedSql = ' SELECT sub.* FROM
+ (
+ SELECT log_visit.*
+ FROM ' . Common::prefixTable('log_visit') . ' AS log_visit
+ WHERE log_visit.idsite in (?)
+ AND log_visit.visit_last_action_time >= ?
+ AND log_visit.visit_last_action_time <= ?
+ ORDER BY idsite, visit_last_action_time DESC
+ LIMIT 100
+ ) AS sub
+ GROUP BY sub.idvisit
+ ORDER BY sub.visit_last_action_time DESC
+ ';
+ $expectedBind = array(
+ '1',
+ '2010-01-01 00:00:00',
+ '2010-02-01 00:00:00',
+ );
+ $this->assertEquals(SegmentTest::removeExtraWhiteSpaces($expectedSql), SegmentTest::removeExtraWhiteSpaces($sql));
+ $this->assertEquals(SegmentTest::removeExtraWhiteSpaces($expectedBind), SegmentTest::removeExtraWhiteSpaces($bind));
+ }
+
+ public function test_makeLogVisitsQueryStringWithOffset()
+ {
+ $model = new Model();
+ list($sql, $bind) = $model->makeLogVisitsQueryString(
+ $idSite = 1,
+ $period = 'month',
+ $date = '2010-01-01',
+ $segment = false,
+ $offset = 15,
+ $limit = 100,
+ $visitorId = false,
+ $minTimestamp = false,
+ $filterSortOrder = false
+ );
+ $expectedSql = ' SELECT sub.* FROM
+ (
+ SELECT log_visit.*
+ FROM ' . Common::prefixTable('log_visit') . ' AS log_visit
+ WHERE log_visit.idsite in (?)
+ AND log_visit.visit_last_action_time >= ?
+ AND log_visit.visit_last_action_time <= ?
+ ORDER BY idsite, visit_last_action_time DESC
+ LIMIT 15, 100
+ ) AS sub
+ GROUP BY sub.idvisit
+ ORDER BY sub.visit_last_action_time DESC
+ ';
+ $expectedBind = array(
+ '1',
+ '2010-01-01 00:00:00',
+ '2010-02-01 00:00:00',
+ );
+ $this->assertEquals(SegmentTest::removeExtraWhiteSpaces($expectedSql), SegmentTest::removeExtraWhiteSpaces($sql));
+ $this->assertEquals(SegmentTest::removeExtraWhiteSpaces($expectedBind), SegmentTest::removeExtraWhiteSpaces($bind));
+ }
+
+
+ public function test_makeLogVisitsQueryString_whenSegment()
+ {
+ $model = new Model();
+ list($sql, $bind) = $model->makeLogVisitsQueryString(
+ $idSite = 1,
+ $period = 'month',
+ $date = '2010-01-01',
+ $segment = 'customVariablePageName1==Test',
+ $offset = 0,
+ $limit = 100,
+ $visitorId = 'abc',
+ $minTimestamp = false,
+ $filterSortOrder = false
+ );
+ $expectedSql = ' SELECT sub.* FROM
+ (
+
+ SELECT log_inner.*
+ FROM (
+ SELECT log_visit.*
+ FROM ' . Common::prefixTable('log_visit') . ' AS log_visit
+ LEFT JOIN ' . Common::prefixTable('log_link_visit_action') . ' AS log_link_visit_action
+ ON log_link_visit_action.idvisit = log_visit.idvisit
+ WHERE ( log_visit.idsite in (?)
+ AND log_visit.idvisitor = ?
+ AND log_visit.visit_last_action_time >= ?
+ AND log_visit.visit_last_action_time <= ? )
+ AND ( log_link_visit_action.custom_var_k1 = ? )
+ ORDER BY idsite, visit_last_action_time DESC
+ LIMIT 100
+ ) AS log_inner
+ ORDER BY idsite, visit_last_action_time DESC
+ LIMIT 100
+ ) AS sub
+ GROUP BY sub.idvisit
+ ORDER BY sub.visit_last_action_time DESC
+ ';
+ $expectedBind = array(
+ '1',
+ Common::hex2bin('abc'),
+ '2010-01-01 00:00:00',
+ '2010-02-01 00:00:00',
+ 'Test',
+ );
+ $this->assertEquals(SegmentTest::removeExtraWhiteSpaces($expectedSql), SegmentTest::removeExtraWhiteSpaces($sql));
+ $this->assertEquals(SegmentTest::removeExtraWhiteSpaces($expectedBind), SegmentTest::removeExtraWhiteSpaces($bind));
+ }
+
+
+ protected function setSuperUser()
+ {
+ $pseudoMockAccess = new FakeAccess();
+ FakeAccess::$superUser = true;
+ Access::setSingletonInstance($pseudoMockAccess);
+ }
+
+} \ No newline at end of file