From 5411e813d7691ea3ae686d05006758c89ccf5c8b Mon Sep 17 00:00:00 2001
From: diosmosis <benakamoorthi@fastmail.fm>
Date: Tue, 8 Oct 2013 07:48:11 -0400
Subject: [PATCH] Use merged assets in tests, add ability to disable animation
 in realtime map, normalize age of visit in realtime map for screenshot test,
 and add data to fixture for new screenshot tests.

---
 core/Config.php                               |  2 -
 plugins/UserCountryMap/Controller.php         |  3 +-
 .../javascripts/realtime-map.js               | 22 +++---
 .../ManySitesImportedLogsWithXssAttempts.php  | 77 +++++++++++++++++--
 tests/PHPUnit/UI                              |  2 +-
 5 files changed, 86 insertions(+), 20 deletions(-)

diff --git a/core/Config.php b/core/Config.php
index a37dd19e52..dfade33673 100644
--- a/core/Config.php
+++ b/core/Config.php
@@ -135,8 +135,6 @@ class Config
             $this->configCache['Plugins'] = $this->configGlobal['Plugins'];
             $this->configCache['Plugins']['Plugins'][] = 'DevicesDetection';
         }
-
-        $this->configCache['disable_merged_assets'] = 1;
     }
 
     /**
diff --git a/plugins/UserCountryMap/Controller.php b/plugins/UserCountryMap/Controller.php
index 8b868c406e..6a75075e62 100644
--- a/plugins/UserCountryMap/Controller.php
+++ b/plugins/UserCountryMap/Controller.php
@@ -185,7 +185,8 @@ class Controller extends \Piwik\Controller
             'removeOldVisits'    => Common::getRequestVar('removeOldVisits', true, 'int'),
             'showFooterMessage'  => Common::getRequestVar('showFooterMessage', true, 'int'),
             'showDateTime'       => Common::getRequestVar('showDateTime', true, 'int'),
-            'doNotRefreshVisits' => Common::getRequestVar('doNotRefreshVisits', false, 'int')
+            'doNotRefreshVisits' => Common::getRequestVar('doNotRefreshVisits', false, 'int'),
+            'enableAnimation'    => Common::getRequestVar('enableAnimation', true, 'int')
         );
 
         if ($fetch) {
diff --git a/plugins/UserCountryMap/javascripts/realtime-map.js b/plugins/UserCountryMap/javascripts/realtime-map.js
index 805b30e73b..f42a7aadef 100644
--- a/plugins/UserCountryMap/javascripts/realtime-map.js
+++ b/plugins/UserCountryMap/javascripts/realtime-map.js
@@ -81,6 +81,7 @@
                 changeVisitAlpha = typeof config.changeVisitAlpha === 'undefined' ? true : config.changeVisitAlpha,
                 removeOldVisits = typeof config.removeOldVisits === 'undefined' ? true : config.removeOldVisits,
                 doNotRefreshVisits = typeof config.doNotRefreshVisits === 'undefined' ? false : config.doNotRefreshVisits,
+                enableAnimation = typeof config.enableAnimation === 'undefined' ? true : config.enableAnimation,
                 width = main.width(),
                 lastTimestamp = -1,
                 lastVisits = [],
@@ -177,8 +178,9 @@
              * from the map
              */
             function age(r) {
-                var now = new Date().getTime() / 1000;
-                var o = (r.lastActionTimestamp - oldest) / (now - oldest);
+                var nowSecs = Math.floor(now);
+                var o = (r.lastActionTimestamp - oldest) / (nowSecs - oldest);
+                o = Math.floor(o * 100) / 100; // normalize age for testing purposes
                 return Math.min(1, Math.max(0, o));
             }
 
@@ -435,14 +437,16 @@
 
                         visitSymbols.layout().render();
 
-                        $.each(newSymbols, function (i, s) {
-                            if (i > 10) return false;
+                        if (!enableAnimation) {
+                            $.each(newSymbols, function (i, s) {
+                                if (i > 10) return false;
 
-                            s.path.hide(); // hide new symbol at first
-                            var t = setTimeout(function () { animateSymbol(s); },
-                                1000 * (s.data.lastActionTimestamp - now) + config.liveRefreshAfterMs);
-                            symbolFadeInTimer.push(t);
-                        });
+                                s.path.hide(); // hide new symbol at first
+                                var t = setTimeout(function () { animateSymbol(s); },
+                                    1000 * (s.data.lastActionTimestamp - now) + config.liveRefreshAfterMs);
+                                symbolFadeInTimer.push(t);
+                            });
+                        }
 
                         lastTimestamp = report[0].lastActionTimestamp;
 
diff --git a/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php b/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
index c5a2bc0dbe..7cc320e154 100644
--- a/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
+++ b/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
@@ -11,6 +11,7 @@ use Piwik\Plugins\Annotations\API as APIAnnotations;
 use Piwik\Plugins\Goals\API as APIGoals;
 use Piwik\Plugins\SegmentEditor\API as APISegmentEditor;
 use Piwik\WidgetsList;
+use Piwik\Date;
 
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php';
 
@@ -27,6 +28,7 @@ class Test_Piwik_Fixture_ManySitesImportedLogsWithXssAttempts extends Test_Piwik
         $this->setupDashboards();
         $this->setupXssSegment();
         $this->addAnnotations();
+        $this->trackVisitsForRealtimeMap();
     }
 
     public function setUpWebsitesAndGoals()
@@ -47,13 +49,13 @@ class Test_Piwik_Fixture_ManySitesImportedLogsWithXssAttempts extends Test_Piwik
         $dashboardColumnCount = 3;
         $dashboardCount = 3;
         
+        $layout = array();
+        for ($j = 0; $j != $dashboardColumnCount; ++$j) {
+            $layout[] = array();
+        }
+
         $dashboards = array();
         for ($i = 0; $i != $dashboardCount; ++$i) {
-            $layout = array();
-            for ($j = 0; $j != $dashboardColumnCount; ++$j) {
-                $layout[] = array();
-            }
-            
             $dashboards[] = $layout;
         }
         
@@ -61,9 +63,10 @@ class Test_Piwik_Fixture_ManySitesImportedLogsWithXssAttempts extends Test_Piwik
         $_GET['idSite'] = $this->idSite;
         
         // collect widgets to add to the layout
+        $allWidgets = WidgetsList::get();
         $groupedWidgets = array();
         $dashboard = 0;
-        foreach (WidgetsList::get() as $category => $widgets) {
+        foreach ($allWidgets as $category => $widgets) {
             foreach ($widgets as $widget) {
                 if ($widget['uniqueId'] == 'widgetSEOgetRank'
                     || $widget['uniqueId'] == 'widgetReferrersgetKeywordsForPage'
@@ -90,13 +93,32 @@ class Test_Piwik_Fixture_ManySitesImportedLogsWithXssAttempts extends Test_Piwik
                 $dashboards[$dashboardIndex][$column][] = $widget;
             }
         }
-        
+
         foreach ($dashboards as $id => $layout) {
             $_GET['name'] = self::makeXssContent('dashboard name' . $id);
             $_GET['layout'] = Common::json_encode($layout);
             $_GET['idDashboard'] = $id + 1;
             FrontController::getInstance()->fetchDispatch('Dashboard', 'saveLayout');
         }
+
+        // create empty dashboard
+        $widget = reset($allWidgets[Piwik_Translate('UserSettings_VisitorSettings')]);
+        $dashboard = array(
+            array(
+                array(
+                    'uniqueId' => $widget['uniqueId'],
+                    'parameters' => $widget['parameters']
+                )
+            ),
+            array(),
+            array()
+        );
+
+        $_GET['name'] = 'D4';
+        $_GET['layout'] = Common::json_encode($dashboard);
+        $_GET['idDashboard'] = 4;
+        $_GET['idSite'] = 2;
+        FrontController::getInstance()->fetchDispatch('Dashboard', 'saveLayout');
         
         $_GET = $oldGet;
     }
@@ -116,6 +138,47 @@ class Test_Piwik_Fixture_ManySitesImportedLogsWithXssAttempts extends Test_Piwik
             $this->idSite, '2012-08-08', self::makeXssContent("annotation"), $starred = 0);
         APIAnnotations::getInstance()->add($this->idSite, '2012-08-10', "Note 3", $starred = 1);
     }
+
+    public function trackVisitsForRealtimeMap()
+    {
+        $dateTime = Date::factory('now')->addHour(-1.25)->getDatetime();
+        $idSite = 2;
+
+        $t = self::getTracker($idSite, Date::factory($dateTime)->addHour(-3)->getDatetime(), $defaultInit = true, $useLocal = true);
+        $t->setTokenAuth(self::getTokenAuth());
+        $t->setUrl('http://example.org/index1.htm');
+        self::checkResponse($t->doTrackPageView('incredible title!'));
+
+        $t = self::getTracker($idSite, $dateTime, $defaultInit = true, $useLocal = true);
+        $t->setTokenAuth(self::getTokenAuth());
+        $t->setUrl('http://example.org/index1.htm');
+        $t->setCountry('jp');
+        $t->setRegion("40");
+        $t->setCity('Tokyo');
+        $t->setLatitude(35.70);
+        $t->setLongitude(139.71);
+        self::checkResponse($t->doTrackPageView('incredible title!'));
+
+        $t = self::getTracker($idSite, Date::factory($dateTime)->addHour(0.5)->getDatetime(), $defaultInit = true, $useLocal = true);
+        $t->setTokenAuth(self::getTokenAuth());
+        $t->setUrl('http://example.org/index2.htm');
+        $t->setCountry('ca');
+        $t->setRegion("QC");
+        $t->setCity('Montreal');
+        $t->setLatitude(45.52);
+        $t->setLongitude(-73.58);
+        self::checkResponse($t->doTrackPageView('incredible title!'));
+
+        $t = self::getTracker($idSite, Date::factory($dateTime)->addHour(1)->getDatetime(), $defaultInit = true, $useLocal = true);
+        $t->setTokenAuth(self::getTokenAuth());
+        $t->setUrl('http://example.org/index3.htm');
+        $t->setCountry('br');
+        $t->setRegion("27");
+        $t->setCity('Sao Paolo');
+        $t->setLatitude(-23.55);
+        $t->setLongitude(-46.64);
+        self::checkResponse($t->doTrackPageView('incredible title!'));
+    }
     
     // NOTE: since API_Request does sanitization, API methods do not. when calling them, we must
     // sometimes do sanitization ourselves.
diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI
index 9df5e46640..a0ce6d5951 160000
--- a/tests/PHPUnit/UI
+++ b/tests/PHPUnit/UI
@@ -1 +1 @@
-Subproject commit 9df5e46640e21a43250ab6360a632e74a41dce0c
+Subproject commit a0ce6d5951d0a968ad7e216bb17eb2e380c95d36
-- 
GitLab