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
path: root/tests
diff options
context:
space:
mode:
authorThomas Steur <tsteur@users.noreply.github.com>2016-08-29 04:30:52 +0300
committerGitHub <noreply@github.com>2016-08-29 04:30:52 +0300
commit0c9c30b731ccbacf47e154b9f7a590af49e3d799 (patch)
treec5cf2f6437bb2ee7f3675350ee4b0b6acbbae7d3 /tests
parentbfdf0bed670f247bf9b1d466e3bcf651e98ab634 (diff)
Better UI for Piwik 3, more responsive, faster, lots of other fixes (#10397)
* improved ui and responsiveness * improve rss widget * commit changes for ui again, got lost after the last commit * fix more tests * restoring files * fix fonts * fix more tests * more test fixes * fix some system tests * fix tests * fix system and ui tests * fix updater tests * make a page as loaded once the callback is called * enable verbose * more verbose output * enable phantomjs debug flag * debug should be a phantomjs option * trying to fix installation tests * fixes #10173 to not compile css files as less * trying to minimize js/css requests to hopefully prevent random ui test fails * disable verbose mode * fix updater and installation * lots of bugfixes and ui tweaks * fix reset dashboard * various bugfixes * fix integration tests * fix text color * hoping to fix installation tests this way * cache css/js resources for an hour, should speed up tests and prevent some random issues * we need to avoid installing plugins multiple times at the same time when requesting resources * finally getting the colors right again * fix most tests, more tests for theme * use an h2 element for titles for better accessibility * fix headline color * use actual theme text color (piwik-black) * fix small font size was applied on all p elements * fix tests * now improving all the datatables * trying to ignore images for visitor log * Revert "trying to ignore images for visitor log" This reverts commit ad1ff7267aae14ad905bef130e956c8593c4fb22. * fix tests * fix we had always ignored a max label width * trying to fix file permissions * fix more file permissions * Improved plugins update API (#10028) * refs #7983 let plugins add or remove fields to websites and better settings api * * Hide CorePluginsAdmin API methods * More documentation * Added some more tests * improved updates API for plugins * better error code as duplicate column cannot really happen when not actually renaming a colum Conflicts: core/Updates/3.0.0-b1.php plugins/CoreUpdater/Commands/Update/CliUpdateObserver.php * fix DB field piwik_log_visit.location_provider too small (#10003) * fixes #9564 fix DB field piwik_log_visit.location_provider too small * use new plugins updater API * DB field piwik_log_visit.visit_total_actions too small (#10002) * fixes #9565 DB field piwik_log_visit.visit_total_actions too small * change type of some db columns that are too small * fix tests (#10040) Conflicts: plugins/CoreAdminHome/Menu.php plugins/Goals/Menu.php plugins/MobileMessaging/Menu.php plugins/SitesManager/Menu.php plugins/UsersManager/Menu.php tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata.xml * fix more file permissions * repair more file permissions * repair more file permissions * trying to make ui tests work again, the table was missing * fix some encoding issues * cross browser fixes and usability improvement * move back the config icon, need to find a better solution later * more cross browser fixes * bugfixes * fix ui tests * fix encoding issue * fix various issues with the ui tests when a test gets aborted * also skip this visitor log test when aborted * there were 3 css files that were loaded separately, merge them instead into one css * forgot to add the actual manifest * do not add manifest if custom logo is specified * load font css files first as it was before merging them into big css * fix link icon was not aligned anymore * minor fixes * setting it back to 4px * in popovers the font variable was always ignored and a different font loaded * forgot to update screenshots * fix remaining tests * this should fix an update error * added 3 new widgets system check, system summary and plugin updates * tweak new widgets content * no page reload when changing date or segment * in admin home show only enabled widgets * refs #10295 use getMockBuilder instead of deprecated getMock * fix some ui tests * fix various bugs * fix more tests * fix ui tests * add a space between loading image and loading message * fix docs so they appear on developer.piwik.org * improved documentation * introduce new Widget::renderTemplate method for consistency with controllers * remove no longer needed files * testing system fonts * fix strong was not really bold * more useful system summary * remove ubuntu font * fix most tests and removed most em elements * fix tests * fix headline was very thin * update submodule * update submodules * update submodule * fix failing ui tests * update submodules
Diffstat (limited to 'tests')
-rw-r--r--tests/PHPUnit/Framework/Mock/Settings/FakeSystemSettings.php5
-rw-r--r--tests/PHPUnit/Integration/API/RequestTest.php5
-rw-r--r--tests/PHPUnit/Integration/AccessTest.php17
-rw-r--r--tests/PHPUnit/Integration/AssetManagerTest.php1
-rw-r--r--tests/PHPUnit/Integration/Columns/UpdaterTest.php2
-rw-r--r--tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php2
-rw-r--r--tests/PHPUnit/Integration/Plugin/ReleaseChannelsTest.php23
-rw-r--r--tests/PHPUnit/Integration/ReleaseCheckListTest.php5
-rw-r--r--tests/PHPUnit/Integration/ReportTest.php4
-rw-r--r--tests/PHPUnit/Integration/SegmentTest.php7
-rw-r--r--tests/PHPUnit/Integration/Settings/BaseSettingsTestCase.php14
-rw-r--r--tests/PHPUnit/Integration/Settings/IntegrationTestCase.php3
-rw-r--r--tests/PHPUnit/Integration/Settings/Plugin/SystemConfigSettingTest.php181
-rw-r--r--tests/PHPUnit/Integration/Settings/Plugin/SystemSettingTest.php2
-rw-r--r--tests/PHPUnit/Integration/Settings/Storage/Backend/ConfigTest.php217
-rw-r--r--tests/PHPUnit/Integration/WidgetsListTest.php2
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getSystemSettings.xml89
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getUserSettings.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getSystemSettings.xml89
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getUserSettings.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getAvailableMeasurableTypes.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml238
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata.xml757
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getSystemSettings.xml89
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getUserSettings.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml89
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getUserSettings.xml2
-rw-r--r--tests/PHPUnit/Unit/AssetManager/stylesheets/CssWithURLs.css1
-rw-r--r--tests/PHPUnit/Unit/AssetManager/stylesheets/ExpectedMergeResult.css34
-rw-r--r--tests/PHPUnit/Unit/Report/ReportWidgetConfigTest.php4
-rw-r--r--tests/PHPUnit/Unit/Report/ReportWidgetFactoryTest.php1
-rw-r--r--[-rwxr-xr-x]tests/PHPUnit/proxy/piwik.php0
m---------tests/UI/expected-ui-screenshots0
-rw-r--r--tests/UI/specs/ActionsDataTable_spec.js34
-rw-r--r--tests/UI/specs/BarGraph_spec.js2
-rw-r--r--tests/UI/specs/CoreUpdaterDb_spec.js2
-rw-r--r--tests/UI/specs/DashboardManager_spec.js7
-rw-r--r--tests/UI/specs/Dashboard_spec.js24
-rw-r--r--tests/UI/specs/EvolutionGraph_spec.js35
-rw-r--r--tests/UI/specs/GoalsTable_spec.js6
-rw-r--r--tests/UI/specs/Login_spec.js4
-rw-r--r--tests/UI/specs/MeasurableManager_spec.js4
-rw-r--r--tests/UI/specs/Menus_spec.js5
-rw-r--r--tests/UI/specs/Overlay_spec.js2
-rw-r--r--tests/UI/specs/PeriodSelector_spec.js28
-rw-r--r--tests/UI/specs/PieGraph_spec.js2
-rw-r--r--tests/UI/specs/PivotByDimension_spec.js13
-rw-r--r--tests/UI/specs/QuickAccess_spec.js4
-rw-r--r--tests/UI/specs/ReportExporting_spec.js9
-rw-r--r--tests/UI/specs/SegmentSelectorEditor_spec.js28
-rw-r--r--tests/UI/specs/SitesManager_spec.js12
-rw-r--r--tests/UI/specs/UIIntegration_spec.js137
-rw-r--r--tests/UI/specs/ViewDataTable_spec.js35
-rw-r--r--tests/lib/screenshot-testing/node_modules/jambalaya/package.json28
-rw-r--r--tests/lib/screenshot-testing/npm-debug.log165
-rw-r--r--tests/lib/screenshot-testing/run-tests.js2
-rw-r--r--tests/lib/screenshot-testing/support/chai-extras.js27
-rw-r--r--tests/lib/screenshot-testing/support/page-renderer.js80
-rw-r--r--tests/resources/OmniFixture-dump.sql15
-rw-r--r--tests/resources/overlay-test-site/index.html2
-rw-r--r--tests/resources/screenshot-override/override.css20
-rw-r--r--tests/resources/screenshot-override/override.js2
m---------tests/travis0
63 files changed, 1915 insertions, 710 deletions
diff --git a/tests/PHPUnit/Framework/Mock/Settings/FakeSystemSettings.php b/tests/PHPUnit/Framework/Mock/Settings/FakeSystemSettings.php
index b7c77def9e..00b9554196 100644
--- a/tests/PHPUnit/Framework/Mock/Settings/FakeSystemSettings.php
+++ b/tests/PHPUnit/Framework/Mock/Settings/FakeSystemSettings.php
@@ -18,6 +18,11 @@ class FakeSystemSettings extends \Piwik\Plugins\ExampleSettingsPlugin\SystemSett
}
+ public function setTitle($title)
+ {
+ $this->title = $title;
+ }
+
public function makeSetting($name, $defaultValue, $type, $configureCallback)
{
return parent::makeSetting($name, $defaultValue, $type, $configureCallback);
diff --git a/tests/PHPUnit/Integration/API/RequestTest.php b/tests/PHPUnit/Integration/API/RequestTest.php
index aab254cd6f..dfdb21f4fd 100644
--- a/tests/PHPUnit/Integration/API/RequestTest.php
+++ b/tests/PHPUnit/Integration/API/RequestTest.php
@@ -10,7 +10,6 @@ namespace Piwik\Tests\Integration\API;
use Piwik\API\Request;
use Piwik\AuthResult;
-use Piwik\Container\StaticContainer;
use Piwik\Db;
use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
@@ -121,7 +120,9 @@ class RequestTest extends IntegrationTestCase
private function createAuthMock()
{
- $authMock = $this->getMock('Piwik\Plugins\Login\Auth', array('authenticate', 'setTokenAuth', 'setLogin'));
+ $authMock = $this->getMockBuilder('Piwik\Plugins\Login\Auth')
+ ->setMethods(array('authenticate', 'setTokenAuth', 'setLogin'))
+ ->getMock();
$authMock->expects($this->any())
->method('authenticate')
diff --git a/tests/PHPUnit/Integration/AccessTest.php b/tests/PHPUnit/Integration/AccessTest.php
index 0f9c075e63..9616bec782 100644
--- a/tests/PHPUnit/Integration/AccessTest.php
+++ b/tests/PHPUnit/Integration/AccessTest.php
@@ -249,10 +249,7 @@ class AccessTest extends IntegrationTestCase
*/
public function testCheckUserHasViewAccessWithSomeAccessFailure()
{
- $mock = $this->getMock(
- 'Piwik\Access',
- array('getSitesIdWithAtLeastViewAccess')
- );
+ $mock = $this->getMockBuilder('Piwik\Access')->setMethods(array('getSitesIdWithAtLeastViewAccess'))->getMock();
$mock->expects($this->once())
->method('getSitesIdWithAtLeastViewAccess')
@@ -484,13 +481,17 @@ class AccessTest extends IntegrationTestCase
private function createPiwikAuthMockInstance()
{
- return $this->getMock('Piwik\\Auth', array('authenticate', 'getName', 'getTokenAuthSecret', 'getLogin', 'setTokenAuth', 'setLogin',
- 'setPassword', 'setPasswordHash'));
+ return $this->getMockBuilder('Piwik\\Auth')
+ ->setMethods(array('authenticate', 'getName', 'getTokenAuthSecret', 'getLogin', 'setTokenAuth', 'setLogin',
+ 'setPassword', 'setPasswordHash'))
+ ->getMock();
}
private function createAccessMockWithAccessToSitesButUnauthenticated($idSites)
{
- $mock = $this->getMock('Piwik\Access', array('getRawSitesWithSomeViewAccess', 'loadSitesIfNeeded'));
+ $mock = $this->getMockBuilder('Piwik\Access')
+ ->setMethods(array('getRawSitesWithSomeViewAccess', 'loadSitesIfNeeded'))
+ ->getMock();
// this method will be actually never called as it is unauthenticated. The tests are supposed to fail if it
// suddenly does get called as we should not query for sites if it is not authenticated.
@@ -514,7 +515,7 @@ class AccessTest extends IntegrationTestCase
->method('authenticate')
->will($this->returnValue(new AuthResult(AuthResult::SUCCESS, 'login', 'token')));
- $mock = $this->getMock('Piwik\Access', $methods);
+ $mock = $this->getMockBuilder('Piwik\Access')->setMethods($methods)->getMock();
$mock->reloadAccess($authMock);
return $mock;
diff --git a/tests/PHPUnit/Integration/AssetManagerTest.php b/tests/PHPUnit/Integration/AssetManagerTest.php
index 9d3166d6c7..1dd88e7787 100644
--- a/tests/PHPUnit/Integration/AssetManagerTest.php
+++ b/tests/PHPUnit/Integration/AssetManagerTest.php
@@ -310,6 +310,7 @@ class AssetManagerTest extends IntegrationTestCase
*/
private function validateExpectedContent($expectedContent)
{
+ file_put_contents('testfile', $this->mergedAsset->getContent());
$this->assertEquals($expectedContent, $this->mergedAsset->getContent());
}
diff --git a/tests/PHPUnit/Integration/Columns/UpdaterTest.php b/tests/PHPUnit/Integration/Columns/UpdaterTest.php
index 2976ce540b..c496f22c06 100644
--- a/tests/PHPUnit/Integration/Columns/UpdaterTest.php
+++ b/tests/PHPUnit/Integration/Columns/UpdaterTest.php
@@ -226,7 +226,7 @@ class UpdaterTest extends IntegrationTestCase
private function getMockUpdater($hasNewVersion = true)
{
- $result = $this->getMock("Piwik\\Updater", array('hasNewVersion'));
+ $result = $this->getMockBuilder("Piwik\\Updater")->setMethods(array('hasNewVersion'))->getMock();
$result->expects($this->any())->method('hasNewVersion')->will($this->returnCallback(function () use ($hasNewVersion) {
return $hasNewVersion;
diff --git a/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php b/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php
index dea1e7d7e9..94fd174836 100644
--- a/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php
+++ b/tests/PHPUnit/Integration/DataTable/Filter/PivotByDimensionTest.php
@@ -43,7 +43,7 @@ class PivotByDimensionTest extends IntegrationTestCase
$self = $this;
- $proxyMock = $this->getMock('stdClass', array('call'));
+ $proxyMock = $this->getMockBuilder('stdClass')->setMethods(array('call'))->getMock();
$proxyMock->expects($this->any())->method('call')->willReturnCallback(function ($className, $methodName, $parameters) use ($self) {
if ($className == "\\Piwik\\Plugins\\UserCountry\\API"
&& $methodName == 'getCity'
diff --git a/tests/PHPUnit/Integration/Plugin/ReleaseChannelsTest.php b/tests/PHPUnit/Integration/Plugin/ReleaseChannelsTest.php
index 7780d3d6fe..704acdc6c6 100644
--- a/tests/PHPUnit/Integration/Plugin/ReleaseChannelsTest.php
+++ b/tests/PHPUnit/Integration/Plugin/ReleaseChannelsTest.php
@@ -88,29 +88,6 @@ class ReleaseChannelsTest extends IntegrationTestCase
);
}
- public function test_setActiveReleaseChannelId_shouldSetChannelIdInGeneralConfig()
- {
- $backupId = Config::getInstance()->General['release_channel'];
-
- $this->channels->setActiveReleaseChannelId('myTestValue');
- $this->assertSame('myTestValue', Config::getInstance()->General['release_channel']);
-
- $this->channels->setActiveReleaseChannelId($backupId);
- }
-
- /**
- * @dataProvider getTestActiveReleaseChannel
- */
- public function test_getActiveReleaseChannel_shouldReturnCorrectReleaseChannelForId($expectedId, $activeId)
- {
- $backupId = Config::getInstance()->General['release_channel'];
- $this->channels->setActiveReleaseChannelId($activeId);
-
- $this->assertSame($expectedId, $this->channels->getActiveReleaseChannel()->getId());
-
- $this->channels->setActiveReleaseChannelId($backupId);
- }
-
public function getTestActiveReleaseChannel()
{
return array(
diff --git a/tests/PHPUnit/Integration/ReleaseCheckListTest.php b/tests/PHPUnit/Integration/ReleaseCheckListTest.php
index e416ad1602..4852d2cf5d 100644
--- a/tests/PHPUnit/Integration/ReleaseCheckListTest.php
+++ b/tests/PHPUnit/Integration/ReleaseCheckListTest.php
@@ -289,7 +289,8 @@ class ReleaseCheckListTest extends \PHPUnit_Framework_TestCase
strpos($file, 'yuicompressor') !== false ||
strpos($file, '/libs/') !== false ||
(strpos($file, '/vendor') !== false && strpos($file, '/vendor/piwik') === false) ||
- strpos($file, '/tmp/') !== false
+ strpos($file, '/tmp/') !== false ||
+ strpos($file, '/phantomjs/') !== false
) {
continue;
}
@@ -669,6 +670,6 @@ class ReleaseCheckListTest extends \PHPUnit_Framework_TestCase
*/
private function isFileBelongToTests($file)
{
- return stripos($file, "/tests/") !== false;
+ return stripos($file, "/tests/") !== false || stripos($file, "/phantomjs/") !== false;
}
}
diff --git a/tests/PHPUnit/Integration/ReportTest.php b/tests/PHPUnit/Integration/ReportTest.php
index fc89a4ea59..2aed43693b 100644
--- a/tests/PHPUnit/Integration/ReportTest.php
+++ b/tests/PHPUnit/Integration/ReportTest.php
@@ -356,7 +356,7 @@ class ReportTest extends IntegrationTestCase
{
PluginManager::getInstance()->loadPlugins(array('API', 'ExampleReport'));
- $proxyMock = $this->getMock('stdClass', array('call', '__construct'));
+ $proxyMock = $this->getMockBuilder('stdClass')->setMethods(array('call', '__construct'))->getMock();
$proxyMock->expects($this->once())->method('call')->with(
'\\Piwik\\Plugins\\ExampleReport\\API', 'getExampleReport', array(
'idSite' => 1,
@@ -379,7 +379,7 @@ class ReportTest extends IntegrationTestCase
{
PluginManager::getInstance()->loadPlugins(array('API', 'Referrers'));
- $proxyMock = $this->getMock('stdClass', array('call', '__construct'));
+ $proxyMock = $this->getMockBuilder('stdClass')->setMethods(array('call', '__construct'))->getMock();
$proxyMock->expects($this->once())->method('call')->with(
'\\Piwik\\Plugins\\Referrers\\API', 'getSearchEnginesFromKeywordId', array(
'idSubtable' => 23,
diff --git a/tests/PHPUnit/Integration/SegmentTest.php b/tests/PHPUnit/Integration/SegmentTest.php
index 9f626e7969..4398a3e982 100644
--- a/tests/PHPUnit/Integration/SegmentTest.php
+++ b/tests/PHPUnit/Integration/SegmentTest.php
@@ -1454,8 +1454,11 @@ class SegmentTest extends IntegrationTestCase
{
$self = $this;
- $cacheProxy = $this->getMock('Piwik\Cache\Lazy', array('fetch', 'contains', 'save', 'delete', 'flushAll'),
- array(), '', $callOriginalConstructor = false);
+ $cacheProxy = $this->getMockBuilder('Piwik\Cache\Lazy')
+ ->setMethods(array('fetch', 'contains', 'save', 'delete', 'flushAll'))
+ ->disableOriginalConstructor()
+ ->getMock();
+
$cacheProxy->expects($this->any())->method('fetch')->willReturnCallback(function ($id) {
$realCache = StaticContainer::get('Piwik\Cache\Lazy');
return $realCache->fetch($id);
diff --git a/tests/PHPUnit/Integration/Settings/BaseSettingsTestCase.php b/tests/PHPUnit/Integration/Settings/BaseSettingsTestCase.php
index 0a94ba7953..4a91af3a1c 100644
--- a/tests/PHPUnit/Integration/Settings/BaseSettingsTestCase.php
+++ b/tests/PHPUnit/Integration/Settings/BaseSettingsTestCase.php
@@ -102,6 +102,20 @@ class BaseSettingsTestCase extends IntegrationTestCase
$this->assertSame($settings, $this->settings);
}
+ public function test_getTitle_shouldDefaultToPluginName()
+ {
+ $this->assertNotEmpty($this->settings->getTitle());
+ $this->assertSame($this->settings->getTitle(), $this->settings->getPluginName());
+ }
+
+ public function test_getTitle_PrefersSetTitleOverPluginName()
+ {
+ if (method_exists($this->settings, 'setTitle')) {
+ $this->settings->setTitle('title');
+ $this->assertSame('title', $this->settings->getTitle());
+ }
+ }
+
protected function makeSetting($name)
{
$type = FieldConfig::TYPE_STRING;
diff --git a/tests/PHPUnit/Integration/Settings/IntegrationTestCase.php b/tests/PHPUnit/Integration/Settings/IntegrationTestCase.php
index 8a323924a6..4b694d921b 100644
--- a/tests/PHPUnit/Integration/Settings/IntegrationTestCase.php
+++ b/tests/PHPUnit/Integration/Settings/IntegrationTestCase.php
@@ -9,9 +9,6 @@
namespace Piwik\Tests\Integration\Settings;
use Piwik\Db;
-use Piwik\Settings\FieldConfig;
-use Piwik\Settings\Plugin\SystemSetting;
-use Piwik\Settings\Plugin\UserSetting;
use Piwik\Settings\Setting;
use Piwik\Settings\Storage;
use Piwik\Tests\Framework\Mock\FakeAccess;
diff --git a/tests/PHPUnit/Integration/Settings/Plugin/SystemConfigSettingTest.php b/tests/PHPUnit/Integration/Settings/Plugin/SystemConfigSettingTest.php
new file mode 100644
index 0000000000..b0643fbba9
--- /dev/null
+++ b/tests/PHPUnit/Integration/Settings/Plugin/SystemConfigSettingTest.php
@@ -0,0 +1,181 @@
+<?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\Tests\Integration\Settings\Plugin;
+
+use Piwik\Config;
+use Piwik\Db;
+use Piwik\Settings\FieldConfig;
+use Piwik\Settings\Plugin\SystemConfigSetting;
+use Piwik\Settings\Plugin\SystemSetting;
+use Piwik\Tests\Integration\Settings\IntegrationTestCase;
+
+/**
+ * @group PluginSettings
+ * @group Settings
+ * @group SystemConfigSetting
+ */
+class SystemConfigSettingTest extends IntegrationTestCase
+{
+ private $section = 'MySection';
+
+ public function tearDown()
+ {
+ $this->setConfigValues(array());
+ parent::tearDown();
+ }
+
+ public function test_constructor_shouldNotEstablishADatabaseConnection()
+ {
+ $this->assertNotDbConnectionCreated();
+
+ $this->buildSetting('name', FieldConfig::TYPE_INT, 'MyPlugin');
+
+ $this->assertNotDbConnectionCreated();
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage CoreAdminHome_PluginSettingChangeNotAllowed
+ */
+ public function test_setSettingValue_shouldThrowException_IfAUserIsTryingToSetASettingWhichNeedsSuperUserPermission()
+ {
+ $this->setUser();
+ $setting = $this->buildSetting('mysystem');
+
+ $setting->setValue(2);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage CoreAdminHome_PluginSettingChangeNotAllowed
+ */
+ public function test_setSettingValue_shouldThrowException_IfAnonymousIsTryingToSetASettingWhichNeedsSuperUserPermission()
+ {
+ $this->setAnonymousUser();
+ $setting = $this->buildSetting('mysystem');
+
+ $setting->setValue(2);
+ }
+
+ public function test_setSettingValue_shouldSucceed_IfSuperUserTriesToSaveASettingWhichRequiresSuperUserPermission()
+ {
+ $this->setSuperUser();
+
+ $setting = $this->buildSetting('mysystem');
+ $setting->setValue(2);
+
+ $this->assertSettingHasValue($setting, 2);
+ }
+
+ public function test_getSettingValue_shouldBeReadableBySuperUser()
+ {
+ $this->setSuperUser();
+ $setting = $this->buildSetting('myusersetting');
+ $this->assertEquals('', $setting->getValue());
+ }
+
+ public function test_getSettingValue_shouldReturnValue_IfReadbleByCurrentUserIsAllowed()
+ {
+ $this->setUser();
+ $setting = $this->buildSetting('myusersetting');
+
+ $this->assertEquals('', $setting->getValue());
+ }
+
+ public function test_getSettingValue_fromConfig()
+ {
+ $this->setSuperUser();
+ $this->setConfigValues(array('myusersetting' => 'mynewvalue'));
+
+ $setting = $this->buildSetting('myusersetting');
+ $this->assertEquals('mynewvalue', $setting->getValue());
+ }
+
+ public function test_getSettingValue_fromConfig_ShouldConvertToTheSpecifiedType()
+ {
+ $this->setSuperUser();
+ $setting = $this->buildSetting('myusersetting', FieldConfig::TYPE_BOOL);
+
+ $this->setConfigValues(array('myusersetting' => '1'));
+
+ $this->assertTrue($setting->getValue());
+ }
+
+ public function test_getSettingValue_fromConfig_isCaseSensitive()
+ {
+ $this->setSuperUser();
+ $this->setConfigValues(array('myusersetting' => '1', 'myUsersetting2' => '1'));
+
+ $setting = $this->buildSetting('myUsersetting');
+ $this->assertSame('', $setting->getValue());
+
+ $setting = $this->buildSetting('myUsersetting2');
+ $this->assertSame('1', $setting->getValue());
+ }
+
+ public function test_setIsWritableByCurrentUser()
+ {
+ $this->setSuperUser();
+ $setting = $this->buildSetting('myusersetting');
+
+ $this->assertTrue($setting->isWritableByCurrentUser());
+
+ $setting->setIsWritableByCurrentUser(false);
+ $this->assertFalse($setting->isWritableByCurrentUser());
+
+ $setting->setIsWritableByCurrentUser(true);
+ $this->assertTrue($setting->isWritableByCurrentUser());
+ }
+
+ public function test_save_shouldSaveDifferentValuesForDifferentFieldsAndSections()
+ {
+ $plugin1 = $this->buildSetting('field1', null, $plugin = 'plugin1', 'section1');
+ $plugin1->setValue('value1');
+ $plugin1->save();
+
+ $plugin2 = $this->buildSetting('field1', null, $plugin = 'plugin2', 'section2');
+ $this->assertSame('value1', $plugin1->getValue());
+ $this->assertSame('', $plugin2->getValue());
+ $plugin2->setValue('value2');
+ $plugin2->save();
+
+ $plugin3 = $this->buildSetting('field3', null, $plugin = 'plugin3', 'section1');
+ $this->assertSame('value1', $plugin1->getValue());
+ $this->assertSame('value2', $plugin2->getValue());
+ $this->assertSame('', $plugin3->getValue());
+
+ $plugin3->setValue('test');
+
+ $this->assertSame('value1', $plugin1->getValue());
+ $this->assertSame('test', $plugin3->getValue());
+ }
+
+ private function setConfigValues($values)
+ {
+ Config::getInstance()->{$this->section} = $values;
+ }
+
+ private function buildSetting($name, $type = null, $plugin = null, $section = null)
+ {
+ if (!isset($type)) {
+ $type = FieldConfig::TYPE_STRING;
+ }
+ if (!isset($plugin)) {
+ $plugin = 'MyPluginName';
+ }
+ if (!isset($section)) {
+ $section = $this->section;
+ }
+
+ $systemSetting = new SystemConfigSetting($name, $default = '', $type, $plugin, $section);
+
+ return $systemSetting;
+ }
+
+}
diff --git a/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingTest.php b/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingTest.php
index 9b9e93db5f..68c4f5d92c 100644
--- a/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingTest.php
+++ b/tests/PHPUnit/Integration/Settings/Plugin/SystemSettingTest.php
@@ -32,7 +32,7 @@ class SystemSettingTest extends IntegrationTestCase
{
$this->assertNotDbConnectionCreated();
- new SystemSetting('name', $default = 5, FieldConfig::TYPE_INT, 'MyPlugin');
+ $this->buildSetting('name', FieldConfig::TYPE_INT, 'MyPlugin');
$this->assertNotDbConnectionCreated();
}
diff --git a/tests/PHPUnit/Integration/Settings/Storage/Backend/ConfigTest.php b/tests/PHPUnit/Integration/Settings/Storage/Backend/ConfigTest.php
new file mode 100644
index 0000000000..2830d7e3c3
--- /dev/null
+++ b/tests/PHPUnit/Integration/Settings/Storage/Backend/ConfigTest.php
@@ -0,0 +1,217 @@
+<?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\Tests\Integration\Settings\Storage\Backend;
+
+use Piwik\Db;
+use Piwik\Settings\Storage\Backend\MeasurableSettingsTable;
+use Piwik\Settings\Storage\Backend\Config;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
+
+/**
+ * @group Settings
+ * @group Backend
+ * @group Storage
+ */
+class ConfigTest extends IntegrationTestCase
+{
+
+ /**
+ * @var MeasurableSettingsTable
+ */
+ private $backend1;
+
+ /**
+ * @var MeasurableSettingsTable
+ */
+ private $backend2;
+
+ /**
+ * @var MeasurableSettingsTable
+ */
+ private $backend3;
+
+ /**
+ * @var MeasurableSettingsTable[]
+ */
+ private $allBackends = array();
+
+ public function setUp()
+ {
+ parent::setUp();
+
+ $this->backend1 = $this->createSettings('MySection1');
+ $this->backend2 = $this->createSettings('MySection2');
+ $this->backend3 = $this->createSettings('MySection3');
+ $this->allBackends = array($this->backend1, $this->backend2, $this->backend3);
+ }
+
+ private function createSettings($plugin)
+ {
+ return new Config($plugin);
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage No section given
+ */
+ public function test_construct_shouldThrowAnException_IfSectionIsEmpty()
+ {
+ $this->createSettings('');
+ }
+
+ public function test_load_shouldNotHaveAnySettingsByDefault()
+ {
+ $this->assertSame(array(), $this->backend1->load());
+ $this->assertSame(array(), $this->backend2->load());
+ $this->assertSame(array(), $this->backend3->load());
+ }
+
+ public function test_getStorageId_shouldIncludePluginNameAndLogin()
+ {
+ $this->assertSame('Config_MySection1', $this->backend1->getStorageId());
+ $this->assertSame('Config_MySection2', $this->backend2->getStorageId());
+ $this->assertSame('Config_MySection3', $this->backend3->getStorageId());
+ }
+
+ public function test_save_ShouldOnlySaveForSpecificPluginAndIdSite()
+ {
+ $value1 = array('Mysetting1' => 'value1', 'Mysetting2' => 'val');
+
+ $this->backend1->save($value1);
+
+ $this->assertSame($value1, $this->backend1->load());
+ $this->assertSame(array(), $this->backend2->load());
+ $this->assertSame(array(), $this->backend3->load());
+
+ $value2 = $this->getExampleValues();
+ $this->backend2->save($value2);
+
+ $this->assertSame($value1, $this->backend1->load());
+ $this->assertSame($value2, $this->backend2->load());
+ $this->assertSame(array(), $this->backend3->load());
+
+ $value3 = $this->getExampleValues();
+ $this->backend3->save($value3);
+
+ $this->assertSame($value1, $this->backend1->load());
+ $this->assertSame($value2, $this->backend2->load());
+ $this->assertSame($value3, $this->backend3->load());
+ }
+
+ public function test_delete_shouldDeleteAllValuesForGivenSection()
+ {
+ $values = array();
+ foreach ($this->allBackends as $index => $backend) {
+ $values[$index] = $this->getExampleValues();
+ $backend->save($values[$index]);
+ $this->assertSame($values[$index], $backend->load());
+ }
+
+ foreach ($this->allBackends as $index => $backend) {
+ $backend->delete();
+ $values[$index] = array();
+
+ // we make sure the values for all others are still set and only the current one was deleted
+ foreach ($this->allBackends as $j => $backend2) {
+ $this->assertSame($values[$j], $backend2->load());
+ }
+ }
+ }
+
+ public function test_save_DuplicateValuesShouldBeOverwritten()
+ {
+ $value1 = array('Mysetting1' => 'value1', 'Mysetting2' => 'val');
+
+ $this->backend1->save($value1);
+
+ $this->assertSame($value1, $this->backend1->load());
+
+ $value2 = array('mytest' => 'test2', 'Mysetting2' => 'val', 'Mysetting1' => 'valueNew');
+ $this->backend1->save($value2);
+
+ $this->assertEquals($value2, $this->backend1->load());
+ }
+
+ public function test_save_NoLongerExistingValues_shouldNotBeRemoved()
+ {
+ $value = $this->saveValueForAllBackends();
+
+ // overwrite for backend 3
+ $value2 = array('mytest' => 'test2', 'Mysetting1' => 'valueNew');
+ $this->backend3->save($value2);
+
+ $expectedNew = $value2;
+ $expectedNew['Mysetting2'] = 'val'; // should not delete no longer existing values
+
+ $this->assertEquals($expectedNew, $this->backend3->load());
+
+ // make sure other backends remain unchanged
+ foreach ($this->allBackends as $backend) {
+ if ($backend !== $this->backend3) {
+ $this->assertSame($value, $backend->load());
+ }
+ }
+ }
+
+ public function test_save_load_ShouldBeAbleToSaveAndLoadArrayValues()
+ {
+ $value1 = array('Mysetting1' => 'value1', 'Mysetting2' => array('val', 'val7', 'val5'));
+
+ $this->backend3->save($value1);
+ $this->assertEquals($value1, $this->backend3->load());
+ }
+
+ public function test_save_load_ShouldBeAbleToSaveAndLoadArrayValues_OnlyOneKey()
+ {
+ $value1 = array('Mysetting1' => 'value1', 'Mysetting2' => array('val'));
+
+ $this->backend3->save($value1);
+
+
+ $value1 = array('Mysetting1' => 'value1', 'Mysetting2' => array('val'));
+ $this->assertEquals($value1, $this->backend3->load());
+ }
+
+ public function test_save_ShouldBeAbleToSaveBoolValues()
+ {
+ $value1 = array('Mysetting1' => true, 'Mysetting2' => array('val', 'val7', false, true, 'val5'));
+
+ $this->backend3->save($value1);
+
+ $value1 = array('Mysetting1' => '1', 'Mysetting2' => array('val', 'val7', false, true, 'val5'));
+ $this->assertEquals($value1, $this->backend3->load());
+ }
+
+ public function test_save_ShouldNotIgnoreNullValues()
+ {
+ $value1 = array('Mysetting1' => true, 'MySetting3' => null, 'Mysetting2' => array('val', null, true, 'val5'));
+
+ $this->backend3->save($value1);
+
+ $value1 = array('Mysetting1' => '1', 'Mysetting2' => array('val', null, true, 'val5'), 'MySetting3' => null);
+ $this->assertEquals($value1, $this->backend3->load());
+ }
+
+ private function saveValueForAllBackends()
+ {
+ $value = array('Mysetting1' => 'value1', 'Mysetting2' => 'val');
+
+ foreach ($this->allBackends as $backend) {
+ $backend->save($value);
+ $this->assertSame($value, $backend->load());
+ }
+
+ return $value;
+ }
+
+ private function getExampleValues()
+ {
+ return array('Mysetting3' => 'value3', 'Mysetting4' . rand(4,99) => 'val' . rand(0, 10));
+ }
+}
diff --git a/tests/PHPUnit/Integration/WidgetsListTest.php b/tests/PHPUnit/Integration/WidgetsListTest.php
index 3cafbe67a1..d545a7ca10 100644
--- a/tests/PHPUnit/Integration/WidgetsListTest.php
+++ b/tests/PHPUnit/Integration/WidgetsListTest.php
@@ -49,7 +49,7 @@ class WidgetsListTest extends IntegrationTestCase
'Insights_WidgetCategory' => 2,
'ExampleUI_UiFramework' => 8,
'Referrers_Referrers' => 9,
- 'About Piwik' => 7,
+ 'About Piwik' => 10,
);
// number of main categories
$this->assertEquals(count($numberOfWidgets), count($widgetsPerCategory));
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getSystemSettings.xml b/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getSystemSettings.xml
index 5bf91acc3d..bbb174f08e 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getSystemSettings.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getSystemSettings.xml
@@ -1,7 +1,52 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
+ <pluginName>CoreUpdater</pluginName>
+ <title>Update settings</title>
+ <settings>
+ <row>
+ <name>release_channel</name>
+ <title />
+ <value>latest_stable</value>
+ <defaultValue>latest_stable</defaultValue>
+ <type>string</type>
+ <uiControl>radio</uiControl>
+ <uiControlAttributes>
+ </uiControlAttributes>
+ <availableValues>
+ <latest_stable>Latest stable release (Recommended)</latest_stable>
+ <latest_beta>Latest beta release</latest_beta>
+ <latest_2x_stable>Latest stable 2.X (Long Term Support version)</latest_2x_stable>
+ <latest_2x_beta>Latest beta 2.X (Long Term Support version)</latest_2x_beta>
+ </availableValues>
+ <description />
+ <inlineHelp>While our &lt;a href='?module=Proxy&amp;action=redirect&amp;url=http://piwik.org/participate/development-process/' target='_blank'&gt;development process&lt;/a&gt; includes thousands of automated tests, Beta Testers play a key role in achieving the &quot;No bug policy&quot; in Piwik.&lt;br/&gt;If Piwik is a critical part of your business, we recommend you use the latest stable release. If you use the latest beta and you find a bug or have a suggestion, please &lt;a href='?module=Proxy&amp;action=redirect&amp;url=http%3A%2F%2Fdeveloper.piwik.org%2Fguides%2Fcore-team-workflow%23influencing-piwik-development' target='_blank'&gt;see here&lt;/a&gt;.&lt;br /&gt;LTS (Long Term Support) versions receive only security and bug fixes.</inlineHelp>
+ <introduction>Release channel</introduction>
+ <condition />
+ </row>
+ <row>
+ <name>enable_plugin_update_communication</name>
+ <title />
+ <value>0</value>
+ <defaultValue>0</defaultValue>
+ <type>boolean</type>
+ <uiControl>radio</uiControl>
+ <uiControlAttributes>
+ </uiControlAttributes>
+ <availableValues>
+ <row key="1">Yes</row>
+ <row key="0">No (Default)</row>
+ </availableValues>
+ <description />
+ <inlineHelp>An email will be sent to Super Users when there is a new version available for a plugin.</inlineHelp>
+ <introduction>Send an email when a plugin update is available</introduction>
+ <condition />
+ </row>
+ </settings>
+ </row>
+ <row>
<pluginName>ExampleSettingsPlugin</pluginName>
+ <title>ExampleSettingsPlugin</title>
<settings>
<row>
<name>metric</name>
@@ -19,7 +64,7 @@
</availableValues>
<description>Choose the metric that should be displayed in the browser tab</description>
<inlineHelp />
- <introduction>Only Super Users can change the following settings:</introduction>
+ <introduction />
<condition />
</row>
<row>
@@ -85,6 +130,7 @@ Another line</defaultValue>
</row>
<row>
<pluginName>AnonymousPiwikUsageMeasurement</pluginName>
+ <title>AnonymousPiwikUsageMeasurement</title>
<settings>
<row>
<name>canUserOptOut</name>
@@ -197,8 +243,41 @@ Another line</defaultValue>
</row>
<row>
<pluginName>QueuedTracking</pluginName>
+ <title>QueuedTracking</title>
<settings>
<row>
+ <name>useSentinelBackend</name>
+ <title>Enable Redis Sentinel'</title>
+ <value>0</value>
+ <defaultValue>0</defaultValue>
+ <type>boolean</type>
+ <uiControl>checkbox</uiControl>
+ <uiControlAttributes>
+ <size>3</size>
+ </uiControlAttributes>
+ <availableValues />
+ <description />
+ <inlineHelp>If enabled, the Redis Sentinel feature will be used. Make sure to update host and port if needed. Once you have enabled and saved the change, you will be able to specify multiple hosts and ports comma separated.</inlineHelp>
+ <introduction />
+ <condition />
+ </row>
+ <row>
+ <name>sentinelMasterName</name>
+ <title>Redis Sentinel Master name</title>
+ <value>mymaster</value>
+ <defaultValue>mymaster</defaultValue>
+ <type>string</type>
+ <uiControl>text</uiControl>
+ <uiControlAttributes>
+ <size>200</size>
+ </uiControlAttributes>
+ <availableValues />
+ <description />
+ <inlineHelp>The sentinel master name only needs to be configured if Sentinel is enabled.</inlineHelp>
+ <introduction />
+ <condition />
+ </row>
+ <row>
<name>redisHost</name>
<title>Redis host</title>
<value>127.0.0.1</value>
@@ -206,11 +285,11 @@ Another line</defaultValue>
<type>string</type>
<uiControl>text</uiControl>
<uiControlAttributes>
- <size>300</size>
+ <size>500</size>
</uiControlAttributes>
<availableValues />
<description />
- <inlineHelp>Remote host of the Redis server. Max 300 characters are allowed.</inlineHelp>
+ <inlineHelp>Remote host of the Redis server. Max 500 characters are allowed.</inlineHelp>
<introduction />
<condition />
</row>
@@ -219,10 +298,10 @@ Another line</defaultValue>
<title>Redis port</title>
<value>6379</value>
<defaultValue>6379</defaultValue>
- <type>integer</type>
+ <type>string</type>
<uiControl>text</uiControl>
<uiControlAttributes>
- <size>5</size>
+ <size>100</size>
</uiControlAttributes>
<availableValues />
<description />
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getUserSettings.xml b/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getUserSettings.xml
index 0d18c736bb..151e26bdc7 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getUserSettings.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__CorePluginsAdmin.getUserSettings.xml
@@ -2,6 +2,7 @@
<result>
<row>
<pluginName>ExampleSettingsPlugin</pluginName>
+ <title>ExampleSettingsPlugin</title>
<settings>
<row>
<name>autoRefresh</name>
@@ -57,6 +58,7 @@
</row>
<row>
<pluginName>AnonymousPiwikUsageMeasurement</pluginName>
+ <title>AnonymousPiwikUsageMeasurement</title>
<settings>
<row>
<name>userTrackingEnabled</name>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getSystemSettings.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getSystemSettings.xml
index 5bf91acc3d..bbb174f08e 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getSystemSettings.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getSystemSettings.xml
@@ -1,7 +1,52 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
+ <pluginName>CoreUpdater</pluginName>
+ <title>Update settings</title>
+ <settings>
+ <row>
+ <name>release_channel</name>
+ <title />
+ <value>latest_stable</value>
+ <defaultValue>latest_stable</defaultValue>
+ <type>string</type>
+ <uiControl>radio</uiControl>
+ <uiControlAttributes>
+ </uiControlAttributes>
+ <availableValues>
+ <latest_stable>Latest stable release (Recommended)</latest_stable>
+ <latest_beta>Latest beta release</latest_beta>
+ <latest_2x_stable>Latest stable 2.X (Long Term Support version)</latest_2x_stable>
+ <latest_2x_beta>Latest beta 2.X (Long Term Support version)</latest_2x_beta>
+ </availableValues>
+ <description />
+ <inlineHelp>While our &lt;a href='?module=Proxy&amp;action=redirect&amp;url=http://piwik.org/participate/development-process/' target='_blank'&gt;development process&lt;/a&gt; includes thousands of automated tests, Beta Testers play a key role in achieving the &quot;No bug policy&quot; in Piwik.&lt;br/&gt;If Piwik is a critical part of your business, we recommend you use the latest stable release. If you use the latest beta and you find a bug or have a suggestion, please &lt;a href='?module=Proxy&amp;action=redirect&amp;url=http%3A%2F%2Fdeveloper.piwik.org%2Fguides%2Fcore-team-workflow%23influencing-piwik-development' target='_blank'&gt;see here&lt;/a&gt;.&lt;br /&gt;LTS (Long Term Support) versions receive only security and bug fixes.</inlineHelp>
+ <introduction>Release channel</introduction>
+ <condition />
+ </row>
+ <row>
+ <name>enable_plugin_update_communication</name>
+ <title />
+ <value>0</value>
+ <defaultValue>0</defaultValue>
+ <type>boolean</type>
+ <uiControl>radio</uiControl>
+ <uiControlAttributes>
+ </uiControlAttributes>
+ <availableValues>
+ <row key="1">Yes</row>
+ <row key="0">No (Default)</row>
+ </availableValues>
+ <description />
+ <inlineHelp>An email will be sent to Super Users when there is a new version available for a plugin.</inlineHelp>
+ <introduction>Send an email when a plugin update is available</introduction>
+ <condition />
+ </row>
+ </settings>
+ </row>
+ <row>
<pluginName>ExampleSettingsPlugin</pluginName>
+ <title>ExampleSettingsPlugin</title>
<settings>
<row>
<name>metric</name>
@@ -19,7 +64,7 @@
</availableValues>
<description>Choose the metric that should be displayed in the browser tab</description>
<inlineHelp />
- <introduction>Only Super Users can change the following settings:</introduction>
+ <introduction />
<condition />
</row>
<row>
@@ -85,6 +130,7 @@ Another line</defaultValue>
</row>
<row>
<pluginName>AnonymousPiwikUsageMeasurement</pluginName>
+ <title>AnonymousPiwikUsageMeasurement</title>
<settings>
<row>
<name>canUserOptOut</name>
@@ -197,8 +243,41 @@ Another line</defaultValue>
</row>
<row>
<pluginName>QueuedTracking</pluginName>
+ <title>QueuedTracking</title>
<settings>
<row>
+ <name>useSentinelBackend</name>
+ <title>Enable Redis Sentinel'</title>
+ <value>0</value>
+ <defaultValue>0</defaultValue>
+ <type>boolean</type>
+ <uiControl>checkbox</uiControl>
+ <uiControlAttributes>
+ <size>3</size>
+ </uiControlAttributes>
+ <availableValues />
+ <description />
+ <inlineHelp>If enabled, the Redis Sentinel feature will be used. Make sure to update host and port if needed. Once you have enabled and saved the change, you will be able to specify multiple hosts and ports comma separated.</inlineHelp>
+ <introduction />
+ <condition />
+ </row>
+ <row>
+ <name>sentinelMasterName</name>
+ <title>Redis Sentinel Master name</title>
+ <value>mymaster</value>
+ <defaultValue>mymaster</defaultValue>
+ <type>string</type>
+ <uiControl>text</uiControl>
+ <uiControlAttributes>
+ <size>200</size>
+ </uiControlAttributes>
+ <availableValues />
+ <description />
+ <inlineHelp>The sentinel master name only needs to be configured if Sentinel is enabled.</inlineHelp>
+ <introduction />
+ <condition />
+ </row>
+ <row>
<name>redisHost</name>
<title>Redis host</title>
<value>127.0.0.1</value>
@@ -206,11 +285,11 @@ Another line</defaultValue>
<type>string</type>
<uiControl>text</uiControl>
<uiControlAttributes>
- <size>300</size>
+ <size>500</size>
</uiControlAttributes>
<availableValues />
<description />
- <inlineHelp>Remote host of the Redis server. Max 300 characters are allowed.</inlineHelp>
+ <inlineHelp>Remote host of the Redis server. Max 500 characters are allowed.</inlineHelp>
<introduction />
<condition />
</row>
@@ -219,10 +298,10 @@ Another line</defaultValue>
<title>Redis port</title>
<value>6379</value>
<defaultValue>6379</defaultValue>
- <type>integer</type>
+ <type>string</type>
<uiControl>text</uiControl>
<uiControlAttributes>
- <size>5</size>
+ <size>100</size>
</uiControlAttributes>
<availableValues />
<description />
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getUserSettings.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getUserSettings.xml
index 0d18c736bb..151e26bdc7 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getUserSettings.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__CorePluginsAdmin.getUserSettings.xml
@@ -2,6 +2,7 @@
<result>
<row>
<pluginName>ExampleSettingsPlugin</pluginName>
+ <title>ExampleSettingsPlugin</title>
<settings>
<row>
<name>autoRefresh</name>
@@ -57,6 +58,7 @@
</row>
<row>
<pluginName>AnonymousPiwikUsageMeasurement</pluginName>
+ <title>AnonymousPiwikUsageMeasurement</title>
<settings>
<row>
<name>userTrackingEnabled</name>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getAvailableMeasurableTypes.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getAvailableMeasurableTypes.xml
index eb12eef5d2..4015aad321 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getAvailableMeasurableTypes.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getAvailableMeasurableTypes.xml
@@ -8,6 +8,7 @@
<settings>
<row>
<pluginName>WebsiteMeasurable</pluginName>
+ <title>WebsiteMeasurable</title>
<settings>
<row>
<name>urls</name>
@@ -212,6 +213,7 @@
</row>
<row>
<pluginName>ExampleSettingsPlugin</pluginName>
+ <title>ExampleSettingsPlugin</title>
<settings>
<row>
<name>contact_email</name>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml
index 69c2cb87cf..f3518e6424 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportPagesMetadata.xml
@@ -556,11 +556,10 @@
<action>getNumberOfVisitsPerVisitDuration</action>
<order>115</order>
<parameters>
- <viewDataTable>cloud</viewDataTable>
<module>VisitorInterest</module>
<action>getNumberOfVisitsPerVisitDuration</action>
</parameters>
- <uniqueId>widgetVisitorInterestgetNumberOfVisitsPerVisitDurationviewDataTablecloud</uniqueId>
+ <uniqueId>widgetVisitorInterestgetNumberOfVisitsPerVisitDuration</uniqueId>
<viewDataTable>cloud</viewDataTable>
<isReport>1</isReport>
</row>
@@ -570,11 +569,10 @@
<action>getNumberOfVisitsPerPage</action>
<order>120</order>
<parameters>
- <viewDataTable>cloud</viewDataTable>
<module>VisitorInterest</module>
<action>getNumberOfVisitsPerPage</action>
</parameters>
- <uniqueId>widgetVisitorInterestgetNumberOfVisitsPerPageviewDataTablecloud</uniqueId>
+ <uniqueId>widgetVisitorInterestgetNumberOfVisitsPerPage</uniqueId>
<viewDataTable>cloud</viewDataTable>
<isReport>1</isReport>
</row>
@@ -721,11 +719,10 @@
<action>getBrowserEngines</action>
<order>110</order>
<parameters>
- <viewDataTable>graphPie</viewDataTable>
<module>DevicesDetection</module>
<action>getBrowserEngines</action>
</parameters>
- <uniqueId>widgetDevicesDetectiongetBrowserEnginesviewDataTablegraphPie</uniqueId>
+ <uniqueId>widgetDevicesDetectiongetBrowserEngines</uniqueId>
<viewDataTable>graphPie</viewDataTable>
<isReport>1</isReport>
</row>
@@ -966,11 +963,10 @@
<action>getVisitInformationPerLocalTime</action>
<order>115</order>
<parameters>
- <viewDataTable>graphVerticalBar</viewDataTable>
<module>VisitTime</module>
<action>getVisitInformationPerLocalTime</action>
</parameters>
- <uniqueId>widgetVisitTimegetVisitInformationPerLocalTimeviewDataTablegraphVerticalBar</uniqueId>
+ <uniqueId>widgetVisitTimegetVisitInformationPerLocalTime</uniqueId>
<viewDataTable>graphVerticalBar</viewDataTable>
<isReport>1</isReport>
</row>
@@ -980,11 +976,10 @@
<action>getVisitInformationPerServerTime</action>
<order>120</order>
<parameters>
- <viewDataTable>graphVerticalBar</viewDataTable>
<module>VisitTime</module>
<action>getVisitInformationPerServerTime</action>
</parameters>
- <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeviewDataTablegraphVerticalBar</uniqueId>
+ <uniqueId>widgetVisitTimegetVisitInformationPerServerTime</uniqueId>
<viewDataTable>graphVerticalBar</viewDataTable>
<isReport>1</isReport>
</row>
@@ -994,11 +989,10 @@
<action>getByDayOfWeek</action>
<order>125</order>
<parameters>
- <viewDataTable>graphVerticalBar</viewDataTable>
<module>VisitTime</module>
<action>getByDayOfWeek</action>
</parameters>
- <uniqueId>widgetVisitTimegetByDayOfWeekviewDataTablegraphVerticalBar</uniqueId>
+ <uniqueId>widgetVisitTimegetByDayOfWeek</uniqueId>
<viewDataTable>graphVerticalBar</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1140,11 +1134,10 @@
<action>getReferrerType</action>
<order>101</order>
<parameters>
- <viewDataTable>tableAllColumns</viewDataTable>
<module>Referrers</module>
<action>getReferrerType</action>
</parameters>
- <uniqueId>widgetReferrersgetReferrerTypeviewDataTabletableAllColumns</uniqueId>
+ <uniqueId>widgetReferrersgetReferrerType</uniqueId>
<viewDataTable>tableAllColumns</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1154,11 +1147,10 @@
<action>getAll</action>
<order>102</order>
<parameters>
- <viewDataTable>tableAllColumns</viewDataTable>
<module>Referrers</module>
<action>getAll</action>
</parameters>
- <uniqueId>widgetReferrersgetAllviewDataTabletableAllColumns</uniqueId>
+ <uniqueId>widgetReferrersgetAll</uniqueId>
<viewDataTable>tableAllColumns</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1317,11 +1309,10 @@
<action>getSocials</action>
<order>111</order>
<parameters>
- <viewDataTable>graphPie</viewDataTable>
<module>Referrers</module>
<action>getSocials</action>
</parameters>
- <uniqueId>widgetReferrersgetSocialsviewDataTablegraphPie</uniqueId>
+ <uniqueId>widgetReferrersgetSocials</uniqueId>
<viewDataTable>graphPie</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1478,13 +1469,14 @@
<action>getCustomVariables</action>
<order>301</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>CustomVariables</module>
<action>getCustomVariables</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetCustomVariablesgetCustomVariablesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetCustomVariablesgetCustomVariablesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1505,13 +1497,14 @@
<action>getVisitInformationPerServerTime</action>
<order>302</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>VisitTime</module>
<action>getVisitInformationPerServerTime</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeviewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1532,13 +1525,14 @@
<action>getCountry</action>
<order>201</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getCountry</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetCountryviewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetUserCountrygetCountryforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1559,13 +1553,14 @@
<action>getContinent</action>
<order>202</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getContinent</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetContinentviewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetUserCountrygetContinentforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1586,13 +1581,14 @@
<action>getRegion</action>
<order>203</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getRegion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetRegionviewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetUserCountrygetRegionforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1613,13 +1609,14 @@
<action>getCity</action>
<order>204</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getCity</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetCityviewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetUserCountrygetCityforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1640,13 +1637,14 @@
<action>getReferrerType</action>
<order>1</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getReferrerType</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetReferrerTypeviewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetReferrersgetReferrerTypeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1667,13 +1665,14 @@
<action>getKeywords</action>
<order>2</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getKeywords</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetKeywordsviewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetReferrersgetKeywordsforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1694,13 +1693,14 @@
<action>getSearchEngines</action>
<order>3</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getSearchEngines</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetSearchEnginesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetReferrersgetSearchEnginesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1721,13 +1721,14 @@
<action>getWebsites</action>
<order>4</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getWebsites</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetWebsitesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetReferrersgetWebsitesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1748,13 +1749,14 @@
<action>getCampaigns</action>
<order>5</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getCampaigns</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetCampaignsviewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetReferrersgetCampaignsforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1775,12 +1777,14 @@
<action>getVisitsUntilConversion</action>
<order>101</order>
<parameters>
+ <forceView>1</forceView>
+ <viewDataTable>table</viewDataTable>
<module>Goals</module>
<action>getVisitsUntilConversion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetGoalsgetVisitsUntilConversiondocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetGoalsgetVisitsUntilConversionforceView1viewDataTabletabledocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1801,12 +1805,14 @@
<action>getDaysToConversion</action>
<order>102</order>
<parameters>
+ <forceView>1</forceView>
+ <viewDataTable>table</viewDataTable>
<module>Goals</module>
<action>getDaysToConversion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>1</idGoal>
</parameters>
- <uniqueId>widgetGoalsgetDaysToConversiondocumentationForGoalsPage1idGoal1</uniqueId>
+ <uniqueId>widgetGoalsgetDaysToConversionforceView1viewDataTabletabledocumentationForGoalsPage1idGoal1</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1965,13 +1971,14 @@
<action>getCustomVariables</action>
<order>301</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>CustomVariables</module>
<action>getCustomVariables</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetCustomVariablesgetCustomVariablesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetCustomVariablesgetCustomVariablesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1992,13 +1999,14 @@
<action>getVisitInformationPerServerTime</action>
<order>302</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>VisitTime</module>
<action>getVisitInformationPerServerTime</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeviewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2019,13 +2027,14 @@
<action>getCountry</action>
<order>201</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getCountry</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetCountryviewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetUserCountrygetCountryforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2046,13 +2055,14 @@
<action>getContinent</action>
<order>202</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getContinent</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetContinentviewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetUserCountrygetContinentforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2073,13 +2083,14 @@
<action>getRegion</action>
<order>203</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getRegion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetRegionviewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetUserCountrygetRegionforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2100,13 +2111,14 @@
<action>getCity</action>
<order>204</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getCity</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetCityviewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetUserCountrygetCityforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2127,13 +2139,14 @@
<action>getReferrerType</action>
<order>1</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getReferrerType</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetReferrerTypeviewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetReferrersgetReferrerTypeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2154,13 +2167,14 @@
<action>getKeywords</action>
<order>2</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getKeywords</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetKeywordsviewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetReferrersgetKeywordsforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2181,13 +2195,14 @@
<action>getSearchEngines</action>
<order>3</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getSearchEngines</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetSearchEnginesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetReferrersgetSearchEnginesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2208,13 +2223,14 @@
<action>getWebsites</action>
<order>4</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getWebsites</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetWebsitesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetReferrersgetWebsitesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2235,13 +2251,14 @@
<action>getCampaigns</action>
<order>5</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getCampaigns</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetCampaignsviewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetReferrersgetCampaignsforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2262,12 +2279,14 @@
<action>getVisitsUntilConversion</action>
<order>101</order>
<parameters>
+ <forceView>1</forceView>
+ <viewDataTable>table</viewDataTable>
<module>Goals</module>
<action>getVisitsUntilConversion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetGoalsgetVisitsUntilConversiondocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetGoalsgetVisitsUntilConversionforceView1viewDataTabletabledocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2288,12 +2307,14 @@
<action>getDaysToConversion</action>
<order>102</order>
<parameters>
+ <forceView>1</forceView>
+ <viewDataTable>table</viewDataTable>
<module>Goals</module>
<action>getDaysToConversion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>2</idGoal>
</parameters>
- <uniqueId>widgetGoalsgetDaysToConversiondocumentationForGoalsPage1idGoal2</uniqueId>
+ <uniqueId>widgetGoalsgetDaysToConversionforceView1viewDataTabletabledocumentationForGoalsPage1idGoal2</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2452,13 +2473,14 @@
<action>getCustomVariables</action>
<order>301</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>CustomVariables</module>
<action>getCustomVariables</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetCustomVariablesgetCustomVariablesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetCustomVariablesgetCustomVariablesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2479,13 +2501,14 @@
<action>getVisitInformationPerServerTime</action>
<order>302</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>VisitTime</module>
<action>getVisitInformationPerServerTime</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeviewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2506,13 +2529,14 @@
<action>getCountry</action>
<order>201</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getCountry</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetCountryviewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetUserCountrygetCountryforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2533,13 +2557,14 @@
<action>getContinent</action>
<order>202</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getContinent</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetContinentviewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetUserCountrygetContinentforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2560,13 +2585,14 @@
<action>getRegion</action>
<order>203</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getRegion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetRegionviewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetUserCountrygetRegionforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2587,13 +2613,14 @@
<action>getCity</action>
<order>204</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getCity</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetCityviewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetUserCountrygetCityforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2614,13 +2641,14 @@
<action>getReferrerType</action>
<order>1</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getReferrerType</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetReferrerTypeviewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetReferrersgetReferrerTypeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2641,13 +2669,14 @@
<action>getKeywords</action>
<order>2</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getKeywords</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetKeywordsviewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetReferrersgetKeywordsforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2668,13 +2697,14 @@
<action>getSearchEngines</action>
<order>3</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getSearchEngines</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetSearchEnginesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetReferrersgetSearchEnginesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2695,13 +2725,14 @@
<action>getWebsites</action>
<order>4</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getWebsites</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetWebsitesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetReferrersgetWebsitesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2722,13 +2753,14 @@
<action>getCampaigns</action>
<order>5</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getCampaigns</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetCampaignsviewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetReferrersgetCampaignsforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2749,12 +2781,14 @@
<action>getVisitsUntilConversion</action>
<order>101</order>
<parameters>
+ <forceView>1</forceView>
+ <viewDataTable>table</viewDataTable>
<module>Goals</module>
<action>getVisitsUntilConversion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetGoalsgetVisitsUntilConversiondocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetGoalsgetVisitsUntilConversionforceView1viewDataTabletabledocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2775,12 +2809,14 @@
<action>getDaysToConversion</action>
<order>102</order>
<parameters>
+ <forceView>1</forceView>
+ <viewDataTable>table</viewDataTable>
<module>Goals</module>
<action>getDaysToConversion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>3</idGoal>
</parameters>
- <uniqueId>widgetGoalsgetDaysToConversiondocumentationForGoalsPage1idGoal3</uniqueId>
+ <uniqueId>widgetGoalsgetDaysToConversionforceView1viewDataTabletabledocumentationForGoalsPage1idGoal3</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2992,13 +3028,14 @@
<action>getCustomVariables</action>
<order>301</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>CustomVariables</module>
<action>getCustomVariables</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetCustomVariablesgetCustomVariablesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetCustomVariablesgetCustomVariablesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3019,13 +3056,14 @@
<action>getVisitInformationPerServerTime</action>
<order>302</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>VisitTime</module>
<action>getVisitInformationPerServerTime</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeviewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3046,13 +3084,14 @@
<action>getCountry</action>
<order>201</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getCountry</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetCountryviewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetUserCountrygetCountryforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3073,13 +3112,14 @@
<action>getContinent</action>
<order>202</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getContinent</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetContinentviewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetUserCountrygetContinentforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3100,13 +3140,14 @@
<action>getRegion</action>
<order>203</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getRegion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetRegionviewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetUserCountrygetRegionforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3127,13 +3168,14 @@
<action>getCity</action>
<order>204</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getCity</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetCityviewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetUserCountrygetCityforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3154,13 +3196,14 @@
<action>getReferrerType</action>
<order>1</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getReferrerType</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetReferrerTypeviewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetReferrersgetReferrerTypeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3181,13 +3224,14 @@
<action>getKeywords</action>
<order>2</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getKeywords</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetKeywordsviewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetReferrersgetKeywordsforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3208,13 +3252,14 @@
<action>getSearchEngines</action>
<order>3</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getSearchEngines</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetSearchEnginesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetReferrersgetSearchEnginesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3235,13 +3280,14 @@
<action>getWebsites</action>
<order>4</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getWebsites</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetWebsitesviewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetReferrersgetWebsitesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3262,13 +3308,14 @@
<action>getCampaigns</action>
<order>5</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getCampaigns</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetCampaignsviewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetReferrersgetCampaignsforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3289,12 +3336,14 @@
<action>getVisitsUntilConversion</action>
<order>101</order>
<parameters>
+ <forceView>1</forceView>
+ <viewDataTable>table</viewDataTable>
<module>Goals</module>
<action>getVisitsUntilConversion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetGoalsgetVisitsUntilConversiondocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetGoalsgetVisitsUntilConversionforceView1viewDataTabletabledocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3315,12 +3364,14 @@
<action>getDaysToConversion</action>
<order>102</order>
<parameters>
+ <forceView>1</forceView>
+ <viewDataTable>table</viewDataTable>
<module>Goals</module>
<action>getDaysToConversion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>0</idGoal>
</parameters>
- <uniqueId>widgetGoalsgetDaysToConversiondocumentationForGoalsPage1idGoal0</uniqueId>
+ <uniqueId>widgetGoalsgetDaysToConversionforceView1viewDataTabletabledocumentationForGoalsPage1idGoal0</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3648,13 +3699,14 @@
<action>getCustomVariables</action>
<order>301</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>CustomVariables</module>
<action>getCustomVariables</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetCustomVariablesgetCustomVariablesviewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetCustomVariablesgetCustomVariablesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3675,13 +3727,14 @@
<action>getVisitInformationPerServerTime</action>
<order>302</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>VisitTime</module>
<action>getVisitInformationPerServerTime</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeviewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3702,13 +3755,14 @@
<action>getCountry</action>
<order>201</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getCountry</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetCountryviewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetUserCountrygetCountryforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3729,13 +3783,14 @@
<action>getContinent</action>
<order>202</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getContinent</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetContinentviewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetUserCountrygetContinentforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3756,13 +3811,14 @@
<action>getRegion</action>
<order>203</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getRegion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetRegionviewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetUserCountrygetRegionforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3783,13 +3839,14 @@
<action>getCity</action>
<order>204</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>UserCountry</module>
<action>getCity</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetUserCountrygetCityviewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetUserCountrygetCityforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3810,13 +3867,14 @@
<action>getReferrerType</action>
<order>1</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getReferrerType</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetReferrerTypeviewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetReferrersgetReferrerTypeforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3837,13 +3895,14 @@
<action>getKeywords</action>
<order>2</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getKeywords</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetKeywordsviewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetReferrersgetKeywordsforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3864,13 +3923,14 @@
<action>getSearchEngines</action>
<order>3</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getSearchEngines</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetSearchEnginesviewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetReferrersgetSearchEnginesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3891,13 +3951,14 @@
<action>getWebsites</action>
<order>4</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getWebsites</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetWebsitesviewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetReferrersgetWebsitesforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3918,13 +3979,14 @@
<action>getCampaigns</action>
<order>5</order>
<parameters>
+ <forceView>1</forceView>
<viewDataTable>tableGoals</viewDataTable>
<module>Referrers</module>
<action>getCampaigns</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetReferrersgetCampaignsviewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetReferrersgetCampaignsforceView1viewDataTabletableGoalsdocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>tableGoals</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3945,12 +4007,14 @@
<action>getVisitsUntilConversion</action>
<order>101</order>
<parameters>
+ <forceView>1</forceView>
+ <viewDataTable>table</viewDataTable>
<module>Goals</module>
<action>getVisitsUntilConversion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetGoalsgetVisitsUntilConversiondocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetGoalsgetVisitsUntilConversionforceView1viewDataTabletabledocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -3971,12 +4035,14 @@
<action>getDaysToConversion</action>
<order>102</order>
<parameters>
+ <forceView>1</forceView>
+ <viewDataTable>table</viewDataTable>
<module>Goals</module>
<action>getDaysToConversion</action>
<documentationForGoalsPage>1</documentationForGoalsPage>
<idGoal>ecommerceOrder</idGoal>
</parameters>
- <uniqueId>widgetGoalsgetDaysToConversiondocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
+ <uniqueId>widgetGoalsgetDaysToConversionforceView1viewDataTabletabledocumentationForGoalsPage1idGoalecommerceOrder</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -4161,11 +4227,10 @@
<action>getPlanetRatios</action>
<order>212</order>
<parameters>
- <viewDataTable>graphPie</viewDataTable>
<module>ExampleUI</module>
<action>getPlanetRatios</action>
</parameters>
- <uniqueId>widgetExampleUIgetPlanetRatiosviewDataTablegraphPie</uniqueId>
+ <uniqueId>widgetExampleUIgetPlanetRatios</uniqueId>
<viewDataTable>graphPie</viewDataTable>
<isReport>1</isReport>
</row>
@@ -4206,11 +4271,10 @@
<action>getPlanetRatiosWithLogos</action>
<order>213</order>
<parameters>
- <viewDataTable>cloud</viewDataTable>
<module>ExampleUI</module>
<action>getPlanetRatiosWithLogos</action>
</parameters>
- <uniqueId>widgetExampleUIgetPlanetRatiosWithLogosviewDataTablecloud</uniqueId>
+ <uniqueId>widgetExampleUIgetPlanetRatiosWithLogos</uniqueId>
<viewDataTable>cloud</viewDataTable>
<isReport>1</isReport>
</row>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata.xml
index 16b269c1bb..ead3c57fb7 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getWidgetMetadata.xml
@@ -334,7 +334,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Operating System families</name>
+ <name>Browser engines</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -347,14 +347,14 @@
<order>20</order>
</subcategory>
<module>DevicesDetection</module>
- <action>getOsFamilies</action>
- <order>108</order>
+ <action>getBrowserEngines</action>
+ <order>110</order>
<parameters>
<module>DevicesDetection</module>
- <action>getOsFamilies</action>
+ <action>getBrowserEngines</action>
</parameters>
- <uniqueId>widgetDevicesDetectiongetOsFamilies</uniqueId>
- <viewDataTable>table</viewDataTable>
+ <uniqueId>widgetDevicesDetectiongetBrowserEngines</uniqueId>
+ <viewDataTable>graphPie</viewDataTable>
<isReport>1</isReport>
</row>
<row>
@@ -433,7 +433,7 @@
</widgets>
</row>
<row>
- <name>Browser engines</name>
+ <name>Browser Plugins</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -445,20 +445,19 @@
<name>Software</name>
<order>20</order>
</subcategory>
- <module>DevicesDetection</module>
- <action>getBrowserEngines</action>
- <order>110</order>
+ <module>DevicePlugins</module>
+ <action>getPlugin</action>
+ <order>113</order>
<parameters>
- <viewDataTable>graphPie</viewDataTable>
- <module>DevicesDetection</module>
- <action>getBrowserEngines</action>
+ <module>DevicePlugins</module>
+ <action>getPlugin</action>
</parameters>
- <uniqueId>widgetDevicesDetectiongetBrowserEnginesviewDataTablegraphPie</uniqueId>
- <viewDataTable>graphPie</viewDataTable>
+ <uniqueId>widgetDevicePluginsgetPlugin</uniqueId>
+ <viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Browser Plugins</name>
+ <name>Operating System families</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -470,19 +469,19 @@
<name>Software</name>
<order>20</order>
</subcategory>
- <module>DevicePlugins</module>
- <action>getPlugin</action>
- <order>113</order>
+ <module>DevicesDetection</module>
+ <action>getOsFamilies</action>
+ <order>108</order>
<parameters>
- <module>DevicePlugins</module>
- <action>getPlugin</action>
+ <module>DevicesDetection</module>
+ <action>getOsFamilies</action>
</parameters>
- <uniqueId>widgetDevicePluginsgetPlugin</uniqueId>
+ <uniqueId>widgetDevicesDetectiongetOsFamilies</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Visitor Map</name>
+ <name>Browser language</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -494,14 +493,16 @@
<name>Locations</name>
<order>25</order>
</subcategory>
- <module>UserCountryMap</module>
- <action>visitorMap</action>
- <order>1</order>
+ <module>UserLanguage</module>
+ <action>getLanguage</action>
+ <order>108</order>
<parameters>
- <module>UserCountryMap</module>
- <action>visitorMap</action>
+ <module>UserLanguage</module>
+ <action>getLanguage</action>
</parameters>
- <uniqueId>widgetUserCountryMapvisitorMap</uniqueId>
+ <uniqueId>widgetUserLanguagegetLanguage</uniqueId>
+ <viewDataTable>table</viewDataTable>
+ <isReport>1</isReport>
</row>
<row>
<name>City</name>
@@ -528,7 +529,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Browser language</name>
+ <name>Region</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -540,19 +541,19 @@
<name>Locations</name>
<order>25</order>
</subcategory>
- <module>UserLanguage</module>
- <action>getLanguage</action>
- <order>108</order>
+ <module>UserCountry</module>
+ <action>getRegion</action>
+ <order>107</order>
<parameters>
- <module>UserLanguage</module>
- <action>getLanguage</action>
+ <module>UserCountry</module>
+ <action>getRegion</action>
</parameters>
- <uniqueId>widgetUserLanguagegetLanguage</uniqueId>
+ <uniqueId>widgetUserCountrygetRegion</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Region</name>
+ <name>Continent</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -565,18 +566,18 @@
<order>25</order>
</subcategory>
<module>UserCountry</module>
- <action>getRegion</action>
- <order>107</order>
+ <action>getContinent</action>
+ <order>106</order>
<parameters>
<module>UserCountry</module>
- <action>getRegion</action>
+ <action>getContinent</action>
</parameters>
- <uniqueId>widgetUserCountrygetRegion</uniqueId>
+ <uniqueId>widgetUserCountrygetContinent</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Continent</name>
+ <name>Visitor Map</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -588,16 +589,14 @@
<name>Locations</name>
<order>25</order>
</subcategory>
- <module>UserCountry</module>
- <action>getContinent</action>
- <order>106</order>
+ <module>UserCountryMap</module>
+ <action>visitorMap</action>
+ <order>1</order>
<parameters>
- <module>UserCountry</module>
- <action>getContinent</action>
+ <module>UserCountryMap</module>
+ <action>visitorMap</action>
</parameters>
- <uniqueId>widgetUserCountrygetContinent</uniqueId>
- <viewDataTable>table</viewDataTable>
- <isReport>1</isReport>
+ <uniqueId>widgetUserCountryMapvisitorMap</uniqueId>
</row>
<row>
<name>Country</name>
@@ -648,7 +647,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Visits by Days Since Last Visit</name>
+ <name>Frequency Overview</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -660,19 +659,47 @@
<name>Engagement</name>
<order>30</order>
</subcategory>
- <module>VisitorInterest</module>
- <action>getNumberOfVisitsByDaysSinceLast</action>
- <order>130</order>
+ <module>VisitFrequency</module>
+ <action>get</action>
+ <order>2</order>
<parameters>
- <module>VisitorInterest</module>
- <action>getNumberOfVisitsByDaysSinceLast</action>
+ <forceView>1</forceView>
+ <viewDataTable>sparklines</viewDataTable>
+ <module>VisitFrequency</module>
+ <action>get</action>
</parameters>
- <uniqueId>widgetVisitorInterestgetNumberOfVisitsByDaysSinceLast</uniqueId>
- <viewDataTable>table</viewDataTable>
+ <uniqueId>widgetVisitFrequencygetforceView1viewDataTablesparklines</uniqueId>
+ <viewDataTable>sparklines</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Visits per visit duration</name>
+ <name>Returning Visits Over Time</name>
+ <category>
+ <id>General_Visitors</id>
+ <name>Visitors</name>
+ <order>5</order>
+ <icon>icon-reporting-visitors</icon>
+ </category>
+ <subcategory>
+ <id>VisitorInterest_Engagement</id>
+ <name>Engagement</name>
+ <order>30</order>
+ </subcategory>
+ <module>VisitFrequency</module>
+ <action>getEvolutionGraph</action>
+ <order>1</order>
+ <parameters>
+ <forceView>1</forceView>
+ <viewDataTable>graphEvolution</viewDataTable>
+ <module>VisitFrequency</module>
+ <action>getEvolutionGraph</action>
+ </parameters>
+ <uniqueId>widgetVisitFrequencygetEvolutionGraphforceView1viewDataTablegraphEvolution</uniqueId>
+ <viewDataTable>graphEvolution</viewDataTable>
+ <isReport>1</isReport>
+ </row>
+ <row>
+ <name>Visits by Days Since Last Visit</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -685,15 +712,14 @@
<order>30</order>
</subcategory>
<module>VisitorInterest</module>
- <action>getNumberOfVisitsPerVisitDuration</action>
- <order>115</order>
+ <action>getNumberOfVisitsByDaysSinceLast</action>
+ <order>130</order>
<parameters>
- <viewDataTable>cloud</viewDataTable>
<module>VisitorInterest</module>
- <action>getNumberOfVisitsPerVisitDuration</action>
+ <action>getNumberOfVisitsByDaysSinceLast</action>
</parameters>
- <uniqueId>widgetVisitorInterestgetNumberOfVisitsPerVisitDurationviewDataTablecloud</uniqueId>
- <viewDataTable>cloud</viewDataTable>
+ <uniqueId>widgetVisitorInterestgetNumberOfVisitsByDaysSinceLast</uniqueId>
+ <viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
@@ -713,16 +739,15 @@
<action>getNumberOfVisitsPerPage</action>
<order>120</order>
<parameters>
- <viewDataTable>cloud</viewDataTable>
<module>VisitorInterest</module>
<action>getNumberOfVisitsPerPage</action>
</parameters>
- <uniqueId>widgetVisitorInterestgetNumberOfVisitsPerPageviewDataTablecloud</uniqueId>
+ <uniqueId>widgetVisitorInterestgetNumberOfVisitsPerPage</uniqueId>
<viewDataTable>cloud</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Returning Visits Over Time</name>
+ <name>Visits by Visit Number</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -734,17 +759,15 @@
<name>Engagement</name>
<order>30</order>
</subcategory>
- <module>VisitFrequency</module>
- <action>getEvolutionGraph</action>
- <order>1</order>
+ <module>VisitorInterest</module>
+ <action>getNumberOfVisitsByVisitCount</action>
+ <order>125</order>
<parameters>
- <forceView>1</forceView>
- <viewDataTable>graphEvolution</viewDataTable>
- <module>VisitFrequency</module>
- <action>getEvolutionGraph</action>
+ <module>VisitorInterest</module>
+ <action>getNumberOfVisitsByVisitCount</action>
</parameters>
- <uniqueId>widgetVisitFrequencygetEvolutionGraphforceView1viewDataTablegraphEvolution</uniqueId>
- <viewDataTable>graphEvolution</viewDataTable>
+ <uniqueId>widgetVisitorInterestgetNumberOfVisitsByVisitCount</uniqueId>
+ <viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
@@ -766,7 +789,7 @@
<uniqueId>widgetLivegetVisitorProfilePopup</uniqueId>
</row>
<row>
- <name>Frequency Overview</name>
+ <name>Visits per visit duration</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -778,21 +801,19 @@
<name>Engagement</name>
<order>30</order>
</subcategory>
- <module>VisitFrequency</module>
- <action>get</action>
- <order>2</order>
+ <module>VisitorInterest</module>
+ <action>getNumberOfVisitsPerVisitDuration</action>
+ <order>115</order>
<parameters>
- <forceView>1</forceView>
- <viewDataTable>sparklines</viewDataTable>
- <module>VisitFrequency</module>
- <action>get</action>
+ <module>VisitorInterest</module>
+ <action>getNumberOfVisitsPerVisitDuration</action>
</parameters>
- <uniqueId>widgetVisitFrequencygetforceView1viewDataTablesparklines</uniqueId>
- <viewDataTable>sparklines</viewDataTable>
+ <uniqueId>widgetVisitorInterestgetNumberOfVisitsPerVisitDuration</uniqueId>
+ <viewDataTable>cloud</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Visits by Visit Number</name>
+ <name>Visits by Day of Week</name>
<category>
<id>General_Visitors</id>
<name>Visitors</name>
@@ -800,19 +821,19 @@
<icon>icon-reporting-visitors</icon>
</category>
<subcategory>
- <id>VisitorInterest_Engagement</id>
- <name>Engagement</name>
- <order>30</order>
+ <id>VisitTime_SubmenuTimes</id>
+ <name>Times</name>
+ <order>35</order>
</subcategory>
- <module>VisitorInterest</module>
- <action>getNumberOfVisitsByVisitCount</action>
+ <module>VisitTime</module>
+ <action>getByDayOfWeek</action>
<order>125</order>
<parameters>
- <module>VisitorInterest</module>
- <action>getNumberOfVisitsByVisitCount</action>
+ <module>VisitTime</module>
+ <action>getByDayOfWeek</action>
</parameters>
- <uniqueId>widgetVisitorInterestgetNumberOfVisitsByVisitCount</uniqueId>
- <viewDataTable>table</viewDataTable>
+ <uniqueId>widgetVisitTimegetByDayOfWeek</uniqueId>
+ <viewDataTable>graphVerticalBar</viewDataTable>
<isReport>1</isReport>
</row>
<row>
@@ -832,11 +853,10 @@
<action>getVisitInformationPerLocalTime</action>
<order>115</order>
<parameters>
- <viewDataTable>graphVerticalBar</viewDataTable>
<module>VisitTime</module>
<action>getVisitInformationPerLocalTime</action>
</parameters>
- <uniqueId>widgetVisitTimegetVisitInformationPerLocalTimeviewDataTablegraphVerticalBar</uniqueId>
+ <uniqueId>widgetVisitTimegetVisitInformationPerLocalTime</uniqueId>
<viewDataTable>graphVerticalBar</viewDataTable>
<isReport>1</isReport>
</row>
@@ -857,36 +877,10 @@
<action>getVisitInformationPerServerTime</action>
<order>120</order>
<parameters>
- <viewDataTable>graphVerticalBar</viewDataTable>
<module>VisitTime</module>
<action>getVisitInformationPerServerTime</action>
</parameters>
- <uniqueId>widgetVisitTimegetVisitInformationPerServerTimeviewDataTablegraphVerticalBar</uniqueId>
- <viewDataTable>graphVerticalBar</viewDataTable>
- <isReport>1</isReport>
- </row>
- <row>
- <name>Visits by Day of Week</name>
- <category>
- <id>General_Visitors</id>
- <name>Visitors</name>
- <order>5</order>
- <icon>icon-reporting-visitors</icon>
- </category>
- <subcategory>
- <id>VisitTime_SubmenuTimes</id>
- <name>Times</name>
- <order>35</order>
- </subcategory>
- <module>VisitTime</module>
- <action>getByDayOfWeek</action>
- <order>125</order>
- <parameters>
- <viewDataTable>graphVerticalBar</viewDataTable>
- <module>VisitTime</module>
- <action>getByDayOfWeek</action>
- </parameters>
- <uniqueId>widgetVisitTimegetByDayOfWeekviewDataTablegraphVerticalBar</uniqueId>
+ <uniqueId>widgetVisitTimegetVisitInformationPerServerTime</uniqueId>
<viewDataTable>graphVerticalBar</viewDataTable>
<isReport>1</isReport>
</row>
@@ -937,7 +931,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Entry pages</name>
+ <name>Entry Page Titles</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -950,18 +944,18 @@
<order>10</order>
</subcategory>
<module>Actions</module>
- <action>getEntryPageUrls</action>
- <order>103</order>
+ <action>getEntryPageTitles</action>
+ <order>106</order>
<parameters>
<module>Actions</module>
- <action>getEntryPageUrls</action>
+ <action>getEntryPageTitles</action>
</parameters>
- <uniqueId>widgetActionsgetEntryPageUrls</uniqueId>
+ <uniqueId>widgetActionsgetEntryPageTitles</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Entry Page Titles</name>
+ <name>Entry pages</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -974,18 +968,18 @@
<order>10</order>
</subcategory>
<module>Actions</module>
- <action>getEntryPageTitles</action>
- <order>106</order>
+ <action>getEntryPageUrls</action>
+ <order>103</order>
<parameters>
<module>Actions</module>
- <action>getEntryPageTitles</action>
+ <action>getEntryPageUrls</action>
</parameters>
- <uniqueId>widgetActionsgetEntryPageTitles</uniqueId>
+ <uniqueId>widgetActionsgetEntryPageUrls</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Exit page titles</name>
+ <name>Exit pages</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -998,18 +992,18 @@
<order>15</order>
</subcategory>
<module>Actions</module>
- <action>getExitPageTitles</action>
- <order>107</order>
+ <action>getExitPageUrls</action>
+ <order>104</order>
<parameters>
<module>Actions</module>
- <action>getExitPageTitles</action>
+ <action>getExitPageUrls</action>
</parameters>
- <uniqueId>widgetActionsgetExitPageTitles</uniqueId>
+ <uniqueId>widgetActionsgetExitPageUrls</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Exit pages</name>
+ <name>Exit page titles</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1022,13 +1016,13 @@
<order>15</order>
</subcategory>
<module>Actions</module>
- <action>getExitPageUrls</action>
- <order>104</order>
+ <action>getExitPageTitles</action>
+ <order>107</order>
<parameters>
<module>Actions</module>
- <action>getExitPageUrls</action>
+ <action>getExitPageTitles</action>
</parameters>
- <uniqueId>widgetActionsgetExitPageUrls</uniqueId>
+ <uniqueId>widgetActionsgetExitPageTitles</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1057,7 +1051,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Pages Following a Site Search</name>
+ <name>Page Titles Following a Site Search</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1070,18 +1064,18 @@
<order>25</order>
</subcategory>
<module>Actions</module>
- <action>getPageUrlsFollowingSiteSearch</action>
- <order>116</order>
+ <action>getPageTitlesFollowingSiteSearch</action>
+ <order>119</order>
<parameters>
<module>Actions</module>
- <action>getPageUrlsFollowingSiteSearch</action>
+ <action>getPageTitlesFollowingSiteSearch</action>
</parameters>
- <uniqueId>widgetActionsgetPageUrlsFollowingSiteSearch</uniqueId>
+ <uniqueId>widgetActionsgetPageTitlesFollowingSiteSearch</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Site Search Keywords</name>
+ <name>Search Keywords with No Results</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1094,18 +1088,18 @@
<order>25</order>
</subcategory>
<module>Actions</module>
- <action>getSiteSearchKeywords</action>
- <order>115</order>
+ <action>getSiteSearchNoResultKeywords</action>
+ <order>118</order>
<parameters>
<module>Actions</module>
- <action>getSiteSearchKeywords</action>
+ <action>getSiteSearchNoResultKeywords</action>
</parameters>
- <uniqueId>widgetActionsgetSiteSearchKeywords</uniqueId>
+ <uniqueId>widgetActionsgetSiteSearchNoResultKeywords</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Page Titles Following a Site Search</name>
+ <name>Pages Following a Site Search</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1118,18 +1112,18 @@
<order>25</order>
</subcategory>
<module>Actions</module>
- <action>getPageTitlesFollowingSiteSearch</action>
- <order>119</order>
+ <action>getPageUrlsFollowingSiteSearch</action>
+ <order>116</order>
<parameters>
<module>Actions</module>
- <action>getPageTitlesFollowingSiteSearch</action>
+ <action>getPageUrlsFollowingSiteSearch</action>
</parameters>
- <uniqueId>widgetActionsgetPageTitlesFollowingSiteSearch</uniqueId>
+ <uniqueId>widgetActionsgetPageUrlsFollowingSiteSearch</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Search Keywords with No Results</name>
+ <name>Site Search Keywords</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1142,13 +1136,13 @@
<order>25</order>
</subcategory>
<module>Actions</module>
- <action>getSiteSearchNoResultKeywords</action>
- <order>118</order>
+ <action>getSiteSearchKeywords</action>
+ <order>115</order>
<parameters>
<module>Actions</module>
- <action>getSiteSearchNoResultKeywords</action>
+ <action>getSiteSearchKeywords</action>
</parameters>
- <uniqueId>widgetActionsgetSiteSearchNoResultKeywords</uniqueId>
+ <uniqueId>widgetActionsgetSiteSearchKeywords</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1225,7 +1219,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Event Names</name>
+ <name>Event Actions</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1238,19 +1232,19 @@
<order>40</order>
</subcategory>
<module>Events</module>
- <action>getName</action>
- <order>102</order>
+ <action>getAction</action>
+ <order>101</order>
<parameters>
<module>Events</module>
- <action>getName</action>
- <secondaryDimension>eventAction</secondaryDimension>
+ <action>getAction</action>
+ <secondaryDimension>eventName</secondaryDimension>
</parameters>
- <uniqueId>widgetEventsgetNamesecondaryDimensioneventAction</uniqueId>
+ <uniqueId>widgetEventsgetActionsecondaryDimensioneventName</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Event Categories</name>
+ <name>Event Names</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1263,19 +1257,19 @@
<order>40</order>
</subcategory>
<module>Events</module>
- <action>getCategory</action>
- <order>100</order>
+ <action>getName</action>
+ <order>102</order>
<parameters>
<module>Events</module>
- <action>getCategory</action>
+ <action>getName</action>
<secondaryDimension>eventAction</secondaryDimension>
</parameters>
- <uniqueId>widgetEventsgetCategorysecondaryDimensioneventAction</uniqueId>
+ <uniqueId>widgetEventsgetNamesecondaryDimensioneventAction</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Event Actions</name>
+ <name>Event Categories</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1288,19 +1282,19 @@
<order>40</order>
</subcategory>
<module>Events</module>
- <action>getAction</action>
- <order>101</order>
+ <action>getCategory</action>
+ <order>100</order>
<parameters>
<module>Events</module>
- <action>getAction</action>
- <secondaryDimension>eventName</secondaryDimension>
+ <action>getCategory</action>
+ <secondaryDimension>eventAction</secondaryDimension>
</parameters>
- <uniqueId>widgetEventsgetActionsecondaryDimensioneventName</uniqueId>
+ <uniqueId>widgetEventsgetCategorysecondaryDimensioneventAction</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Event Actions</name>
+ <name>Event Names</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1313,19 +1307,19 @@
<order>40</order>
</subcategory>
<module>Events</module>
- <action>getAction</action>
- <order>101</order>
+ <action>getName</action>
+ <order>102</order>
<parameters>
<module>Events</module>
- <action>getAction</action>
- <secondaryDimension>eventName</secondaryDimension>
+ <action>getName</action>
+ <secondaryDimension>eventAction</secondaryDimension>
</parameters>
- <uniqueId>widgetEventsgetActionsecondaryDimensioneventName</uniqueId>
+ <uniqueId>widgetEventsgetNamesecondaryDimensioneventAction</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Event Names</name>
+ <name>Event Categories</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1338,19 +1332,19 @@
<order>40</order>
</subcategory>
<module>Events</module>
- <action>getName</action>
- <order>102</order>
+ <action>getCategory</action>
+ <order>100</order>
<parameters>
<module>Events</module>
- <action>getName</action>
+ <action>getCategory</action>
<secondaryDimension>eventAction</secondaryDimension>
</parameters>
- <uniqueId>widgetEventsgetNamesecondaryDimensioneventAction</uniqueId>
+ <uniqueId>widgetEventsgetCategorysecondaryDimensioneventAction</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Event Categories</name>
+ <name>Event Actions</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1363,19 +1357,19 @@
<order>40</order>
</subcategory>
<module>Events</module>
- <action>getCategory</action>
- <order>100</order>
+ <action>getAction</action>
+ <order>101</order>
<parameters>
<module>Events</module>
- <action>getCategory</action>
- <secondaryDimension>eventAction</secondaryDimension>
+ <action>getAction</action>
+ <secondaryDimension>eventName</secondaryDimension>
</parameters>
- <uniqueId>widgetEventsgetCategorysecondaryDimensioneventAction</uniqueId>
+ <uniqueId>widgetEventsgetActionsecondaryDimensioneventName</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Content Piece</name>
+ <name>Content Name</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1388,13 +1382,13 @@
<order>45</order>
</subcategory>
<module>Contents</module>
- <action>getContentPieces</action>
- <order>136</order>
+ <action>getContentNames</action>
+ <order>135</order>
<parameters>
<module>Contents</module>
- <action>getContentPieces</action>
+ <action>getContentNames</action>
</parameters>
- <uniqueId>widgetContentsgetContentPieces</uniqueId>
+ <uniqueId>widgetContentsgetContentNames</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1447,7 +1441,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Content Name</name>
+ <name>Content Piece</name>
<category>
<id>General_Actions</id>
<name>Actions</name>
@@ -1460,18 +1454,18 @@
<order>45</order>
</subcategory>
<module>Contents</module>
- <action>getContentNames</action>
- <order>135</order>
+ <action>getContentPieces</action>
+ <order>136</order>
<parameters>
<module>Contents</module>
- <action>getContentNames</action>
+ <action>getContentPieces</action>
</parameters>
- <uniqueId>widgetContentsgetContentNames</uniqueId>
+ <uniqueId>widgetContentsgetContentPieces</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Referrer Types</name>
+ <name>Referrers</name>
<category>
<id>Referrers_Referrers</id>
<name>Referrers</name>
@@ -1484,19 +1478,18 @@
<order>5</order>
</subcategory>
<module>Referrers</module>
- <action>getReferrerType</action>
- <order>101</order>
+ <action>getAll</action>
+ <order>102</order>
<parameters>
- <viewDataTable>tableAllColumns</viewDataTable>
<module>Referrers</module>
- <action>getReferrerType</action>
+ <action>getAll</action>
</parameters>
- <uniqueId>widgetReferrersgetReferrerTypeviewDataTabletableAllColumns</uniqueId>
+ <uniqueId>widgetReferrersgetAll</uniqueId>
<viewDataTable>tableAllColumns</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Referrers</name>
+ <name>Referrer Types</name>
<category>
<id>Referrers_Referrers</id>
<name>Referrers</name>
@@ -1509,19 +1502,18 @@
<order>5</order>
</subcategory>
<module>Referrers</module>
- <action>getAll</action>
- <order>102</order>
+ <action>getReferrerType</action>
+ <order>101</order>
<parameters>
- <viewDataTable>tableAllColumns</viewDataTable>
<module>Referrers</module>
- <action>getAll</action>
+ <action>getReferrerType</action>
</parameters>
- <uniqueId>widgetReferrersgetAllviewDataTabletableAllColumns</uniqueId>
+ <uniqueId>widgetReferrersgetReferrerType</uniqueId>
<viewDataTable>tableAllColumns</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Keywords</name>
+ <name>Search Engines</name>
<category>
<id>Referrers_Referrers</id>
<name>Referrers</name>
@@ -1534,18 +1526,18 @@
<order>10</order>
</subcategory>
<module>Referrers</module>
- <action>getKeywords</action>
- <order>103</order>
+ <action>getSearchEngines</action>
+ <order>107</order>
<parameters>
<module>Referrers</module>
- <action>getKeywords</action>
+ <action>getSearchEngines</action>
</parameters>
- <uniqueId>widgetReferrersgetKeywords</uniqueId>
+ <uniqueId>widgetReferrersgetSearchEngines</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Search Engines</name>
+ <name>Keywords</name>
<category>
<id>Referrers_Referrers</id>
<name>Referrers</name>
@@ -1558,13 +1550,13 @@
<order>10</order>
</subcategory>
<module>Referrers</module>
- <action>getSearchEngines</action>
- <order>107</order>
+ <action>getKeywords</action>
+ <order>103</order>
<parameters>
<module>Referrers</module>
- <action>getSearchEngines</action>
+ <action>getKeywords</action>
</parameters>
- <uniqueId>widgetReferrersgetSearchEngines</uniqueId>
+ <uniqueId>widgetReferrersgetKeywords</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1609,11 +1601,10 @@
<action>getSocials</action>
<order>111</order>
<parameters>
- <viewDataTable>graphPie</viewDataTable>
<module>Referrers</module>
<action>getSocials</action>
</parameters>
- <uniqueId>widgetReferrersgetSocialsviewDataTablegraphPie</uniqueId>
+ <uniqueId>widgetReferrersgetSocials</uniqueId>
<viewDataTable>graphPie</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1775,7 +1766,7 @@
<uniqueId>widgetEcommercegetEcommerceLog</uniqueId>
</row>
<row>
- <name>Product SKU</name>
+ <name>Product Category</name>
<category>
<id>Goals_Ecommerce</id>
<name>Ecommerce</name>
@@ -1788,18 +1779,18 @@
<order>10</order>
</subcategory>
<module>Goals</module>
- <action>getItemsSku</action>
- <order>130</order>
+ <action>getItemsCategory</action>
+ <order>132</order>
<parameters>
<module>Goals</module>
- <action>getItemsSku</action>
+ <action>getItemsCategory</action>
</parameters>
- <uniqueId>widgetGoalsgetItemsSku</uniqueId>
+ <uniqueId>widgetGoalsgetItemsCategory</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Product Name</name>
+ <name>Product SKU</name>
<category>
<id>Goals_Ecommerce</id>
<name>Ecommerce</name>
@@ -1812,18 +1803,18 @@
<order>10</order>
</subcategory>
<module>Goals</module>
- <action>getItemsName</action>
- <order>131</order>
+ <action>getItemsSku</action>
+ <order>130</order>
<parameters>
<module>Goals</module>
- <action>getItemsName</action>
+ <action>getItemsSku</action>
</parameters>
- <uniqueId>widgetGoalsgetItemsName</uniqueId>
+ <uniqueId>widgetGoalsgetItemsSku</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Product Category</name>
+ <name>Product SKU</name>
<category>
<id>Goals_Ecommerce</id>
<name>Ecommerce</name>
@@ -1836,13 +1827,13 @@
<order>10</order>
</subcategory>
<module>Goals</module>
- <action>getItemsCategory</action>
- <order>132</order>
+ <action>getItemsSku</action>
+ <order>130</order>
<parameters>
<module>Goals</module>
- <action>getItemsCategory</action>
+ <action>getItemsSku</action>
</parameters>
- <uniqueId>widgetGoalsgetItemsCategory</uniqueId>
+ <uniqueId>widgetGoalsgetItemsSku</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -1871,7 +1862,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Product SKU</name>
+ <name>Product Name</name>
<category>
<id>Goals_Ecommerce</id>
<name>Ecommerce</name>
@@ -1884,13 +1875,13 @@
<order>10</order>
</subcategory>
<module>Goals</module>
- <action>getItemsSku</action>
- <order>130</order>
+ <action>getItemsName</action>
+ <order>131</order>
<parameters>
<module>Goals</module>
- <action>getItemsSku</action>
+ <action>getItemsName</action>
</parameters>
- <uniqueId>widgetGoalsgetItemsSku</uniqueId>
+ <uniqueId>widgetGoalsgetItemsName</uniqueId>
<viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
@@ -2421,7 +2412,7 @@
</widgets>
</row>
<row>
- <name>Data tables</name>
+ <name>Advanced tag cloud: with logos and links</name>
<category>
<id>ExampleUI_UiFramework</id>
<name>UI Framework</name>
@@ -2429,19 +2420,19 @@
<icon />
</category>
<subcategory>
- <id>ExampleUI_GetTemperaturesDataTable</id>
- <name>Data tables</name>
+ <id>Tag clouds</id>
+ <name>Tag clouds</name>
<order>99</order>
</subcategory>
<module>ExampleUI</module>
- <action>getTemperatures</action>
- <order>210</order>
+ <action>getPlanetRatiosWithLogos</action>
+ <order>213</order>
<parameters>
<module>ExampleUI</module>
- <action>getTemperatures</action>
+ <action>getPlanetRatiosWithLogos</action>
</parameters>
- <uniqueId>widgetExampleUIgetTemperatures</uniqueId>
- <viewDataTable>table</viewDataTable>
+ <uniqueId>widgetExampleUIgetPlanetRatiosWithLogos</uniqueId>
+ <viewDataTable>cloud</viewDataTable>
<isReport>1</isReport>
</row>
<row>
@@ -2453,21 +2444,19 @@
<icon />
</category>
<subcategory>
- <id>Bar graph</id>
- <name>Bar graph</name>
+ <id>ExampleUI_GetTemperaturesDataTable</id>
+ <name>Data tables</name>
<order>99</order>
</subcategory>
<module>ExampleUI</module>
<action>getTemperatures</action>
<order>210</order>
<parameters>
- <forceView>1</forceView>
- <viewDataTable>graphVerticalBar</viewDataTable>
<module>ExampleUI</module>
<action>getTemperatures</action>
</parameters>
- <uniqueId>widgetExampleUIgetTemperaturesforceView1viewDataTablegraphVerticalBar</uniqueId>
- <viewDataTable>graphVerticalBar</viewDataTable>
+ <uniqueId>widgetExampleUIgetTemperatures</uniqueId>
+ <viewDataTable>table</viewDataTable>
<isReport>1</isReport>
</row>
<row>
@@ -2553,7 +2542,7 @@
<isReport>1</isReport>
</row>
<row>
- <name>Advanced tag cloud: with logos and links</name>
+ <name>Data tables</name>
<category>
<id>ExampleUI_UiFramework</id>
<name>UI Framework</name>
@@ -2561,24 +2550,25 @@
<icon />
</category>
<subcategory>
- <id>Tag clouds</id>
- <name>Tag clouds</name>
+ <id>Bar graph</id>
+ <name>Bar graph</name>
<order>99</order>
</subcategory>
<module>ExampleUI</module>
- <action>getPlanetRatiosWithLogos</action>
- <order>213</order>
+ <action>getTemperatures</action>
+ <order>210</order>
<parameters>
- <viewDataTable>cloud</viewDataTable>
+ <forceView>1</forceView>
+ <viewDataTable>graphVerticalBar</viewDataTable>
<module>ExampleUI</module>
- <action>getPlanetRatiosWithLogos</action>
+ <action>getTemperatures</action>
</parameters>
- <uniqueId>widgetExampleUIgetPlanetRatiosWithLogosviewDataTablecloud</uniqueId>
- <viewDataTable>cloud</viewDataTable>
+ <uniqueId>widgetExampleUIgetTemperaturesforceView1viewDataTablegraphVerticalBar</uniqueId>
+ <viewDataTable>graphVerticalBar</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Simple tag cloud</name>
+ <name>Pie graph</name>
<category>
<id>ExampleUI_UiFramework</id>
<name>UI Framework</name>
@@ -2586,25 +2576,23 @@
<icon />
</category>
<subcategory>
- <id>Tag clouds</id>
- <name>Tag clouds</name>
+ <id>Pie graph</id>
+ <name>Pie graph</name>
<order>99</order>
</subcategory>
<module>ExampleUI</module>
<action>getPlanetRatios</action>
- <order>5</order>
+ <order>212</order>
<parameters>
- <forceView>1</forceView>
- <viewDataTable>cloud</viewDataTable>
<module>ExampleUI</module>
<action>getPlanetRatios</action>
</parameters>
- <uniqueId>widgetExampleUIgetPlanetRatiosforceView1viewDataTablecloud</uniqueId>
- <viewDataTable>cloud</viewDataTable>
+ <uniqueId>widgetExampleUIgetPlanetRatios</uniqueId>
+ <viewDataTable>graphPie</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Pie graph</name>
+ <name>Simple tag cloud</name>
<category>
<id>ExampleUI_UiFramework</id>
<name>UI Framework</name>
@@ -2612,24 +2600,25 @@
<icon />
</category>
<subcategory>
- <id>Pie graph</id>
- <name>Pie graph</name>
+ <id>Tag clouds</id>
+ <name>Tag clouds</name>
<order>99</order>
</subcategory>
<module>ExampleUI</module>
<action>getPlanetRatios</action>
- <order>212</order>
+ <order>5</order>
<parameters>
- <viewDataTable>graphPie</viewDataTable>
+ <forceView>1</forceView>
+ <viewDataTable>cloud</viewDataTable>
<module>ExampleUI</module>
<action>getPlanetRatios</action>
</parameters>
- <uniqueId>widgetExampleUIgetPlanetRatiosviewDataTablegraphPie</uniqueId>
- <viewDataTable>graphPie</viewDataTable>
+ <uniqueId>widgetExampleUIgetPlanetRatiosforceView1viewDataTablecloud</uniqueId>
+ <viewDataTable>cloud</viewDataTable>
<isReport>1</isReport>
</row>
<row>
- <name>Piwik PRO Blog</name>
+ <name>Support Piwik!</name>
<category>
<id>About Piwik</id>
<name>About Piwik</name>
@@ -2637,50 +2626,32 @@
<icon />
</category>
<subcategory />
- <module>PiwikPro</module>
- <action>rssPiwikPro</action>
- <order>99</order>
- <parameters>
- <module>PiwikPro</module>
- <action>rssPiwikPro</action>
- </parameters>
- <uniqueId>widgetPiwikProrssPiwikPro</uniqueId>
- </row>
- <row>
- <name>SEO Rankings</name>
- <category>
- <id>SEO</id>
- <name>SEO</name>
- <order>99</order>
- <icon />
- </category>
- <subcategory />
- <module>SEO</module>
- <action>getRank</action>
- <order>99</order>
+ <module>CoreHome</module>
+ <action>getDonateForm</action>
+ <order>5</order>
<parameters>
- <module>SEO</module>
- <action>getRank</action>
+ <module>CoreHome</module>
+ <action>getDonateForm</action>
</parameters>
- <uniqueId>widgetSEOgetRank</uniqueId>
+ <uniqueId>widgetCoreHomegetDonateForm</uniqueId>
</row>
<row>
- <name>Insights Overview</name>
+ <name>Piwik PRO: Advanced Analytics &amp; Services</name>
<category>
- <id>Insights_WidgetCategory</id>
- <name>Insights</name>
+ <id>About Piwik</id>
+ <name>About Piwik</name>
<order>99</order>
<icon />
</category>
<subcategory />
- <module>Insights</module>
- <action>getInsightsOverview</action>
+ <module>PiwikPro</module>
+ <action>promoPiwikPro</action>
<order>99</order>
<parameters>
- <module>Insights</module>
- <action>getInsightsOverview</action>
+ <module>PiwikPro</module>
+ <action>promoPiwikPro</action>
</parameters>
- <uniqueId>widgetInsightsgetInsightsOverview</uniqueId>
+ <uniqueId>widgetPiwikPropromoPiwikPro</uniqueId>
</row>
<row>
<name>Welcome!</name>
@@ -2719,7 +2690,7 @@
<uniqueId>widgetReferrersgetKeywordsForPage</uniqueId>
</row>
<row>
- <name>Support Piwik!</name>
+ <name>Piwik.org Blog</name>
<category>
<id>About Piwik</id>
<name>About Piwik</name>
@@ -2727,32 +2698,50 @@
<icon />
</category>
<subcategory />
- <module>CoreHome</module>
- <action>getDonateForm</action>
- <order>5</order>
+ <module>ExampleRssWidget</module>
+ <action>rssPiwik</action>
+ <order>99</order>
<parameters>
- <module>CoreHome</module>
- <action>getDonateForm</action>
+ <module>ExampleRssWidget</module>
+ <action>rssPiwik</action>
</parameters>
- <uniqueId>widgetCoreHomegetDonateForm</uniqueId>
+ <uniqueId>widgetExampleRssWidgetrssPiwik</uniqueId>
</row>
<row>
- <name>Example Widget Name</name>
+ <name>Insights Overview</name>
<category>
- <id>About Piwik</id>
- <name>About Piwik</name>
+ <id>Insights_WidgetCategory</id>
+ <name>Insights</name>
<order>99</order>
<icon />
</category>
<subcategory />
- <module>ExamplePlugin</module>
- <action>myExampleWidget</action>
+ <module>Insights</module>
+ <action>getInsightsOverview</action>
<order>99</order>
<parameters>
- <module>ExamplePlugin</module>
- <action>myExampleWidget</action>
+ <module>Insights</module>
+ <action>getInsightsOverview</action>
</parameters>
- <uniqueId>widgetExamplePluginmyExampleWidget</uniqueId>
+ <uniqueId>widgetInsightsgetInsightsOverview</uniqueId>
+ </row>
+ <row>
+ <name>SEO Rankings</name>
+ <category>
+ <id>SEO</id>
+ <name>SEO</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory />
+ <module>SEO</module>
+ <action>getRank</action>
+ <order>99</order>
+ <parameters>
+ <module>SEO</module>
+ <action>getRank</action>
+ </parameters>
+ <uniqueId>widgetSEOgetRank</uniqueId>
</row>
<row>
<name>Movers and Shakers</name>
@@ -2773,7 +2762,25 @@
<uniqueId>widgetInsightsgetOverallMoversAndShakers</uniqueId>
</row>
<row>
- <name>Piwik PRO: Advanced Analytics &amp; Services</name>
+ <name>Piwik Changelog</name>
+ <category>
+ <id>About Piwik</id>
+ <name>About Piwik</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory />
+ <module>ExampleRssWidget</module>
+ <action>rssChangelog</action>
+ <order>99</order>
+ <parameters>
+ <module>ExampleRssWidget</module>
+ <action>rssChangelog</action>
+ </parameters>
+ <uniqueId>widgetExampleRssWidgetrssChangelog</uniqueId>
+ </row>
+ <row>
+ <name>Piwik PRO Blog</name>
<category>
<id>About Piwik</id>
<name>About Piwik</name>
@@ -2782,16 +2789,16 @@
</category>
<subcategory />
<module>PiwikPro</module>
- <action>promoPiwikPro</action>
+ <action>rssPiwikPro</action>
<order>99</order>
<parameters>
<module>PiwikPro</module>
- <action>promoPiwikPro</action>
+ <action>rssPiwikPro</action>
</parameters>
- <uniqueId>widgetPiwikPropromoPiwikPro</uniqueId>
+ <uniqueId>widgetPiwikProrssPiwikPro</uniqueId>
</row>
<row>
- <name>Piwik.org Blog</name>
+ <name>System Check</name>
<category>
<id>About Piwik</id>
<name>About Piwik</name>
@@ -2799,17 +2806,17 @@
<icon />
</category>
<subcategory />
- <module>ExampleRssWidget</module>
- <action>rssPiwik</action>
- <order>99</order>
+ <module>Installation</module>
+ <action>getSystemCheck</action>
+ <order>16</order>
<parameters>
- <module>ExampleRssWidget</module>
- <action>rssPiwik</action>
+ <module>Installation</module>
+ <action>getSystemCheck</action>
</parameters>
- <uniqueId>widgetExampleRssWidgetrssPiwik</uniqueId>
+ <uniqueId>widgetInstallationgetSystemCheck</uniqueId>
</row>
<row>
- <name>Piwik Changelog</name>
+ <name>System Summary</name>
<category>
<id>About Piwik</id>
<name>About Piwik</name>
@@ -2817,13 +2824,49 @@
<icon />
</category>
<subcategory />
- <module>ExampleRssWidget</module>
- <action>rssChangelog</action>
+ <module>CoreHome</module>
+ <action>getSystemSummary</action>
+ <order>15</order>
+ <parameters>
+ <module>CoreHome</module>
+ <action>getSystemSummary</action>
+ </parameters>
+ <uniqueId>widgetCoreHomegetSystemSummary</uniqueId>
+ </row>
+ <row>
+ <name>Latest Piwik Plugin Updates</name>
+ <category>
+ <id>About Piwik</id>
+ <name>About Piwik</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory />
+ <module>CorePluginsAdmin</module>
+ <action>getNewPlugins</action>
+ <order>19</order>
+ <parameters>
+ <module>CorePluginsAdmin</module>
+ <action>getNewPlugins</action>
+ </parameters>
+ <uniqueId>widgetCorePluginsAdmingetNewPlugins</uniqueId>
+ </row>
+ <row>
+ <name>Example Widget Name</name>
+ <category>
+ <id>About Piwik</id>
+ <name>About Piwik</name>
+ <order>99</order>
+ <icon />
+ </category>
+ <subcategory />
+ <module>ExamplePlugin</module>
+ <action>myExampleWidget</action>
<order>99</order>
<parameters>
- <module>ExampleRssWidget</module>
- <action>rssChangelog</action>
+ <module>ExamplePlugin</module>
+ <action>myExampleWidget</action>
</parameters>
- <uniqueId>widgetExampleRssWidgetrssChangelog</uniqueId>
+ <uniqueId>widgetExamplePluginmyExampleWidget</uniqueId>
</row>
</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getSystemSettings.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getSystemSettings.xml
index 5bf91acc3d..bbb174f08e 100644
--- a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getSystemSettings.xml
+++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getSystemSettings.xml
@@ -1,7 +1,52 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
+ <pluginName>CoreUpdater</pluginName>
+ <title>Update settings</title>
+ <settings>
+ <row>
+ <name>release_channel</name>
+ <title />
+ <value>latest_stable</value>
+ <defaultValue>latest_stable</defaultValue>
+ <type>string</type>
+ <uiControl>radio</uiControl>
+ <uiControlAttributes>
+ </uiControlAttributes>
+ <availableValues>
+ <latest_stable>Latest stable release (Recommended)</latest_stable>
+ <latest_beta>Latest beta release</latest_beta>
+ <latest_2x_stable>Latest stable 2.X (Long Term Support version)</latest_2x_stable>
+ <latest_2x_beta>Latest beta 2.X (Long Term Support version)</latest_2x_beta>
+ </availableValues>
+ <description />
+ <inlineHelp>While our &lt;a href='?module=Proxy&amp;action=redirect&amp;url=http://piwik.org/participate/development-process/' target='_blank'&gt;development process&lt;/a&gt; includes thousands of automated tests, Beta Testers play a key role in achieving the &quot;No bug policy&quot; in Piwik.&lt;br/&gt;If Piwik is a critical part of your business, we recommend you use the latest stable release. If you use the latest beta and you find a bug or have a suggestion, please &lt;a href='?module=Proxy&amp;action=redirect&amp;url=http%3A%2F%2Fdeveloper.piwik.org%2Fguides%2Fcore-team-workflow%23influencing-piwik-development' target='_blank'&gt;see here&lt;/a&gt;.&lt;br /&gt;LTS (Long Term Support) versions receive only security and bug fixes.</inlineHelp>
+ <introduction>Release channel</introduction>
+ <condition />
+ </row>
+ <row>
+ <name>enable_plugin_update_communication</name>
+ <title />
+ <value>0</value>
+ <defaultValue>0</defaultValue>
+ <type>boolean</type>
+ <uiControl>radio</uiControl>
+ <uiControlAttributes>
+ </uiControlAttributes>
+ <availableValues>
+ <row key="1">Yes</row>
+ <row key="0">No (Default)</row>
+ </availableValues>
+ <description />
+ <inlineHelp>An email will be sent to Super Users when there is a new version available for a plugin.</inlineHelp>
+ <introduction>Send an email when a plugin update is available</introduction>
+ <condition />
+ </row>
+ </settings>
+ </row>
+ <row>
<pluginName>ExampleSettingsPlugin</pluginName>
+ <title>ExampleSettingsPlugin</title>
<settings>
<row>
<name>metric</name>
@@ -19,7 +64,7 @@
</availableValues>
<description>Choose the metric that should be displayed in the browser tab</description>
<inlineHelp />
- <introduction>Only Super Users can change the following settings:</introduction>
+ <introduction />
<condition />
</row>
<row>
@@ -85,6 +130,7 @@ Another line</defaultValue>
</row>
<row>
<pluginName>AnonymousPiwikUsageMeasurement</pluginName>
+ <title>AnonymousPiwikUsageMeasurement</title>
<settings>
<row>
<name>canUserOptOut</name>
@@ -197,8 +243,41 @@ Another line</defaultValue>
</row>
<row>
<pluginName>QueuedTracking</pluginName>
+ <title>QueuedTracking</title>
<settings>
<row>
+ <name>useSentinelBackend</name>
+ <title>Enable Redis Sentinel'</title>
+ <value>0</value>
+ <defaultValue>0</defaultValue>
+ <type>boolean</type>
+ <uiControl>checkbox</uiControl>
+ <uiControlAttributes>
+ <size>3</size>
+ </uiControlAttributes>
+ <availableValues />
+ <description />
+ <inlineHelp>If enabled, the Redis Sentinel feature will be used. Make sure to update host and port if needed. Once you have enabled and saved the change, you will be able to specify multiple hosts and ports comma separated.</inlineHelp>
+ <introduction />
+ <condition />
+ </row>
+ <row>
+ <name>sentinelMasterName</name>
+ <title>Redis Sentinel Master name</title>
+ <value>mymaster</value>
+ <defaultValue>mymaster</defaultValue>
+ <type>string</type>
+ <uiControl>text</uiControl>
+ <uiControlAttributes>
+ <size>200</size>
+ </uiControlAttributes>
+ <availableValues />
+ <description />
+ <inlineHelp>The sentinel master name only needs to be configured if Sentinel is enabled.</inlineHelp>
+ <introduction />
+ <condition />
+ </row>
+ <row>
<name>redisHost</name>
<title>Redis host</title>
<value>127.0.0.1</value>
@@ -206,11 +285,11 @@ Another line</defaultValue>
<type>string</type>
<uiControl>text</uiControl>
<uiControlAttributes>
- <size>300</size>
+ <size>500</size>
</uiControlAttributes>
<availableValues />
<description />
- <inlineHelp>Remote host of the Redis server. Max 300 characters are allowed.</inlineHelp>
+ <inlineHelp>Remote host of the Redis server. Max 500 characters are allowed.</inlineHelp>
<introduction />
<condition />
</row>
@@ -219,10 +298,10 @@ Another line</defaultValue>
<title>Redis port</title>
<value>6379</value>
<defaultValue>6379</defaultValue>
- <type>integer</type>
+ <type>string</type>
<uiControl>text</uiControl>
<uiControlAttributes>
- <size>5</size>
+ <size>100</size>
</uiControlAttributes>
<availableValues />
<description />
diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getUserSettings.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getUserSettings.xml
index 0d18c736bb..151e26bdc7 100644
--- a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getUserSettings.xml
+++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__CorePluginsAdmin.getUserSettings.xml
@@ -2,6 +2,7 @@
<result>
<row>
<pluginName>ExampleSettingsPlugin</pluginName>
+ <title>ExampleSettingsPlugin</title>
<settings>
<row>
<name>autoRefresh</name>
@@ -57,6 +58,7 @@
</row>
<row>
<pluginName>AnonymousPiwikUsageMeasurement</pluginName>
+ <title>AnonymousPiwikUsageMeasurement</title>
<settings>
<row>
<name>userTrackingEnabled</name>
diff --git a/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml
index 5bf91acc3d..bbb174f08e 100644
--- a/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml
+++ b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getSystemSettings.xml
@@ -1,7 +1,52 @@
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
+ <pluginName>CoreUpdater</pluginName>
+ <title>Update settings</title>
+ <settings>
+ <row>
+ <name>release_channel</name>
+ <title />
+ <value>latest_stable</value>
+ <defaultValue>latest_stable</defaultValue>
+ <type>string</type>
+ <uiControl>radio</uiControl>
+ <uiControlAttributes>
+ </uiControlAttributes>
+ <availableValues>
+ <latest_stable>Latest stable release (Recommended)</latest_stable>
+ <latest_beta>Latest beta release</latest_beta>
+ <latest_2x_stable>Latest stable 2.X (Long Term Support version)</latest_2x_stable>
+ <latest_2x_beta>Latest beta 2.X (Long Term Support version)</latest_2x_beta>
+ </availableValues>
+ <description />
+ <inlineHelp>While our &lt;a href='?module=Proxy&amp;action=redirect&amp;url=http://piwik.org/participate/development-process/' target='_blank'&gt;development process&lt;/a&gt; includes thousands of automated tests, Beta Testers play a key role in achieving the &quot;No bug policy&quot; in Piwik.&lt;br/&gt;If Piwik is a critical part of your business, we recommend you use the latest stable release. If you use the latest beta and you find a bug or have a suggestion, please &lt;a href='?module=Proxy&amp;action=redirect&amp;url=http%3A%2F%2Fdeveloper.piwik.org%2Fguides%2Fcore-team-workflow%23influencing-piwik-development' target='_blank'&gt;see here&lt;/a&gt;.&lt;br /&gt;LTS (Long Term Support) versions receive only security and bug fixes.</inlineHelp>
+ <introduction>Release channel</introduction>
+ <condition />
+ </row>
+ <row>
+ <name>enable_plugin_update_communication</name>
+ <title />
+ <value>0</value>
+ <defaultValue>0</defaultValue>
+ <type>boolean</type>
+ <uiControl>radio</uiControl>
+ <uiControlAttributes>
+ </uiControlAttributes>
+ <availableValues>
+ <row key="1">Yes</row>
+ <row key="0">No (Default)</row>
+ </availableValues>
+ <description />
+ <inlineHelp>An email will be sent to Super Users when there is a new version available for a plugin.</inlineHelp>
+ <introduction>Send an email when a plugin update is available</introduction>
+ <condition />
+ </row>
+ </settings>
+ </row>
+ <row>
<pluginName>ExampleSettingsPlugin</pluginName>
+ <title>ExampleSettingsPlugin</title>
<settings>
<row>
<name>metric</name>
@@ -19,7 +64,7 @@
</availableValues>
<description>Choose the metric that should be displayed in the browser tab</description>
<inlineHelp />
- <introduction>Only Super Users can change the following settings:</introduction>
+ <introduction />
<condition />
</row>
<row>
@@ -85,6 +130,7 @@ Another line</defaultValue>
</row>
<row>
<pluginName>AnonymousPiwikUsageMeasurement</pluginName>
+ <title>AnonymousPiwikUsageMeasurement</title>
<settings>
<row>
<name>canUserOptOut</name>
@@ -197,8 +243,41 @@ Another line</defaultValue>
</row>
<row>
<pluginName>QueuedTracking</pluginName>
+ <title>QueuedTracking</title>
<settings>
<row>
+ <name>useSentinelBackend</name>
+ <title>Enable Redis Sentinel'</title>
+ <value>0</value>
+ <defaultValue>0</defaultValue>
+ <type>boolean</type>
+ <uiControl>checkbox</uiControl>
+ <uiControlAttributes>
+ <size>3</size>
+ </uiControlAttributes>
+ <availableValues />
+ <description />
+ <inlineHelp>If enabled, the Redis Sentinel feature will be used. Make sure to update host and port if needed. Once you have enabled and saved the change, you will be able to specify multiple hosts and ports comma separated.</inlineHelp>
+ <introduction />
+ <condition />
+ </row>
+ <row>
+ <name>sentinelMasterName</name>
+ <title>Redis Sentinel Master name</title>
+ <value>mymaster</value>
+ <defaultValue>mymaster</defaultValue>
+ <type>string</type>
+ <uiControl>text</uiControl>
+ <uiControlAttributes>
+ <size>200</size>
+ </uiControlAttributes>
+ <availableValues />
+ <description />
+ <inlineHelp>The sentinel master name only needs to be configured if Sentinel is enabled.</inlineHelp>
+ <introduction />
+ <condition />
+ </row>
+ <row>
<name>redisHost</name>
<title>Redis host</title>
<value>127.0.0.1</value>
@@ -206,11 +285,11 @@ Another line</defaultValue>
<type>string</type>
<uiControl>text</uiControl>
<uiControlAttributes>
- <size>300</size>
+ <size>500</size>
</uiControlAttributes>
<availableValues />
<description />
- <inlineHelp>Remote host of the Redis server. Max 300 characters are allowed.</inlineHelp>
+ <inlineHelp>Remote host of the Redis server. Max 500 characters are allowed.</inlineHelp>
<introduction />
<condition />
</row>
@@ -219,10 +298,10 @@ Another line</defaultValue>
<title>Redis port</title>
<value>6379</value>
<defaultValue>6379</defaultValue>
- <type>integer</type>
+ <type>string</type>
<uiControl>text</uiControl>
<uiControlAttributes>
- <size>5</size>
+ <size>100</size>
</uiControlAttributes>
<availableValues />
<description />
diff --git a/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getUserSettings.xml b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getUserSettings.xml
index 0d18c736bb..151e26bdc7 100644
--- a/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getUserSettings.xml
+++ b/tests/PHPUnit/System/expected/test_noVisit__CorePluginsAdmin.getUserSettings.xml
@@ -2,6 +2,7 @@
<result>
<row>
<pluginName>ExampleSettingsPlugin</pluginName>
+ <title>ExampleSettingsPlugin</title>
<settings>
<row>
<name>autoRefresh</name>
@@ -57,6 +58,7 @@
</row>
<row>
<pluginName>AnonymousPiwikUsageMeasurement</pluginName>
+ <title>AnonymousPiwikUsageMeasurement</title>
<settings>
<row>
<name>userTrackingEnabled</name>
diff --git a/tests/PHPUnit/Unit/AssetManager/stylesheets/CssWithURLs.css b/tests/PHPUnit/Unit/AssetManager/stylesheets/CssWithURLs.css
index f53dbe37b5..d40a341a58 100644
--- a/tests/PHPUnit/Unit/AssetManager/stylesheets/CssWithURLs.css
+++ b/tests/PHPUnit/Unit/AssetManager/stylesheets/CssWithURLs.css
@@ -9,4 +9,5 @@ p {
font-size: 20px;
/* url relative to file: must be rewritten*/
background: url(images/test-image.png);
+ height: calc(100% + 45px);
} \ No newline at end of file
diff --git a/tests/PHPUnit/Unit/AssetManager/stylesheets/ExpectedMergeResult.css b/tests/PHPUnit/Unit/AssetManager/stylesheets/ExpectedMergeResult.css
index 12acb9937c..903190bb02 100644
--- a/tests/PHPUnit/Unit/AssetManager/stylesheets/ExpectedMergeResult.css
+++ b/tests/PHPUnit/Unit/AssetManager/stylesheets/ExpectedMergeResult.css
@@ -1,30 +1,30 @@
/* compile_me_once={{{CACHE-BUSTER-JS}}} */
/* Piwik CSS file is compiled with Less. You may be interested in writing a custom Theme for Piwik! */
-#page #header {
- color: white;
-}
-#footer {
- color: red;
-}
+#page #header { color:white; }
+#footer { color:red; }
.box {
- color: #fe33ac;
- border-color: #fdcdea;
+ color:#fe33ac;
+ border-color:#fdcdea;
}
.box div {
- -webkit-box-shadow: 0 0 5px rgba(0,0,0,0.3);
- -moz-box-shadow: 0 0 5px rgba(0,0,0,0.3);
- box-shadow: 0 0 5px rgba(0,0,0,0.3);
+ -webkit-box-shadow:0 0 5px rgba(0,0,0,0.3);
+ -moz-box-shadow:0 0 5px rgba(0,0,0,0.3);
+ box-shadow:0 0 5px rgba(0,0,0,0.3);
}
h1 {
- color: orange;
- text-align: center;
- background: url(tests/PHPUnit/Unit/AssetManager/stylesheets/images/test-image.png);
+ color: orange;
+ text-align: center;
+ /* url relative to root: must not be rewritten*/
+ background: url(tests/PHPUnit/Unit/AssetManager/stylesheets/images/test-image.png);
}
+
p {
- font-size: 20px;
- background: url(tests/PHPUnit/Unit/AssetManager/stylesheets/images/test-image.png);
+ font-size: 20px;
+ /* url relative to file: must be rewritten*/
+ background: url(tests/PHPUnit/Unit/AssetManager/stylesheets/images/test-image.png);
+ height: calc(100% + 45px);
}
body {
- background-color: #b0c4de;
+ background-color:#b0c4de;
}
/* customization via event */ \ No newline at end of file
diff --git a/tests/PHPUnit/Unit/Report/ReportWidgetConfigTest.php b/tests/PHPUnit/Unit/Report/ReportWidgetConfigTest.php
index d1ac8d4021..d506cccb81 100644
--- a/tests/PHPUnit/Unit/Report/ReportWidgetConfigTest.php
+++ b/tests/PHPUnit/Unit/Report/ReportWidgetConfigTest.php
@@ -156,12 +156,12 @@ class ReportWidgetConfigTest extends \PHPUnit_Framework_TestCase
$this->assertSame(array('module' => 'CoreHome', 'action' => 'renderMe'), $this->config->getParameters());
}
- public function test_getParameters_ShouldReturnViewDataTableIfSet()
+ public function test_getParameters_ShouldNotReturnViewDataTableIfItIsNotForced()
{
$this->setModuleAndAction();
$this->config->setDefaultViewDataTable('graph');
- $this->assertSame(array('viewDataTable' => 'graph', 'module' => 'CoreHome', 'action' => 'renderMe'), $this->config->getParameters());
+ $this->assertSame(array('module' => 'CoreHome', 'action' => 'renderMe'), $this->config->getParameters());
}
public function test_getParameters_ShouldForceViewDataTableIfSet()
diff --git a/tests/PHPUnit/Unit/Report/ReportWidgetFactoryTest.php b/tests/PHPUnit/Unit/Report/ReportWidgetFactoryTest.php
index 2f49fee3cb..279d5bf68f 100644
--- a/tests/PHPUnit/Unit/Report/ReportWidgetFactoryTest.php
+++ b/tests/PHPUnit/Unit/Report/ReportWidgetFactoryTest.php
@@ -81,7 +81,6 @@ class ReportWidgetFactoryTest extends \PHPUnit_Framework_TestCase
$this->assertSame('getBasicReport', $config->getAction());
$this->assertSame(array(
- 'viewDataTable' => 'graph',
'module' => 'TestPlugin',
'action' => 'getBasicReport',
'idGoal' => '1'
diff --git a/tests/PHPUnit/proxy/piwik.php b/tests/PHPUnit/proxy/piwik.php
index 5e542379f6..5e542379f6 100755..100644
--- a/tests/PHPUnit/proxy/piwik.php
+++ b/tests/PHPUnit/proxy/piwik.php
diff --git a/tests/UI/expected-ui-screenshots b/tests/UI/expected-ui-screenshots
-Subproject 2b4719d94dfbcea6f710d6c0cf47000ff0cc7f0
+Subproject 00ad6369be546780a203e0dace7260c879fe51c
diff --git a/tests/UI/specs/ActionsDataTable_spec.js b/tests/UI/specs/ActionsDataTable_spec.js
index 4c149ce0c3..a870b842b8 100644
--- a/tests/UI/specs/ActionsDataTable_spec.js
+++ b/tests/UI/specs/ActionsDataTable_spec.js
@@ -28,29 +28,31 @@ describe("ActionsDataTable", function () {
expect.screenshot('subtables_loaded').to.be.capture(function (page) {
page.click('tr.subDataTable:first');
page.click('tr.subDataTable:eq(2)');
- page.evaluate(function () {
- $('.foldDataTableFooterDrawer').click(); // open the footer icons controls
- });
+ }, done);
+ });
+
+ it("should show configuration options", function (done) {
+ expect.screenshot('configuration_options').to.be.captureSelector('.tableConfiguration', function (page) {
+ page.click('.dropdownConfigureIcon');
}, done);
});
it("should flatten table when flatten link clicked", function (done) {
expect.screenshot('flattened').to.be.capture(function (page) {
- page.mouseMove('.tableConfiguration');
page.click('.dataTableFlatten');
}, done);
});
it("should exclude low population rows when exclude low population link clicked", function (done) {
expect.screenshot('exclude_low_population').to.be.capture(function (page) {
- page.mouseMove('.tableConfiguration');
+ page.click('.dropdownConfigureIcon');
page.click('.dataTableExcludeLowPopulation');
}, done);
});
it("should load normal view when switch to view hierarchical view link is clicked", function (done) {
expect.screenshot('unflattened').to.be.capture(function (page) {
- page.mouseMove('.tableConfiguration');
+ page.click('.dropdownConfigureIcon span');
page.click('.dataTableFlatten');
}, done);
});
@@ -83,13 +85,25 @@ describe("ActionsDataTable", function () {
}, done);
});
- it("should search through table when search input entered and search button clicked", function (done) {
+ it("should show the search when clicking on the search icon", function (done) {
+ expect.screenshot('search_visible').to.be.capture(function (page) {
+ page.click('.dataTableAction.searchAction');
+ }, done);
+ });
+
+ it("should search through table when search input entered and search button clicked and input should be visible", function (done) {
expect.screenshot('search').to.be.capture(function (page) {
- page.sendKeys('.dataTableSearchPattern>input[type=text]', 'i');
- page.click('.dataTableSearchPattern>input[type=submit]');
+ page.sendKeys('.searchAction .dataTableSearchInput', 'i');
+ page.click('.searchAction .icon-search');
}, done);
});
-
+
+ it("should close search when clicking on the x icon", function (done) {
+ expect.screenshot('search_closed').to.be.capture(function (page) {
+ page.click('.searchAction .icon-close');
+ }, done);
+ });
+
it("should automatically expand subtables if it contains only one folder", function (done) {
expect.screenshot('auto_expand').to.be.capture(function (page) {
page.load(url + '&viewDataTable=table');
diff --git a/tests/UI/specs/BarGraph_spec.js b/tests/UI/specs/BarGraph_spec.js
index 29bfbe73b2..3f0b8d3810 100644
--- a/tests/UI/specs/BarGraph_spec.js
+++ b/tests/UI/specs/BarGraph_spec.js
@@ -35,7 +35,7 @@ describe("BarGraph", function () {
it("should display multiple metrics when another metric picked", function (done) {
expect.screenshot('other_metric').to.be.capture(function (page) {
- page.click('.jqplot-seriespicker-popover input:not(:checked)');
+ page.click('.jqplot-seriespicker-popover input:not(:checked):first + label');
}, done);
});
}); \ No newline at end of file
diff --git a/tests/UI/specs/CoreUpdaterDb_spec.js b/tests/UI/specs/CoreUpdaterDb_spec.js
index 33236fda5b..032ab0933d 100644
--- a/tests/UI/specs/CoreUpdaterDb_spec.js
+++ b/tests/UI/specs/CoreUpdaterDb_spec.js
@@ -43,7 +43,7 @@ describe("CoreUpdaterDb", function () {
it("should show the donation form when the update process is complete", function (done) {
expect.screenshot("updated").to.be.capture(function (page) {
- page.click('.submit');
+ page.click('.btn');
}, done);
});
});
diff --git a/tests/UI/specs/DashboardManager_spec.js b/tests/UI/specs/DashboardManager_spec.js
index ae6e2eddc4..a2bc2aaa94 100644
--- a/tests/UI/specs/DashboardManager_spec.js
+++ b/tests/UI/specs/DashboardManager_spec.js
@@ -11,7 +11,7 @@ describe("DashboardManager", function () {
this.timeout(0);
- var selectorToCapture = '.dashboard-manager';
+ var selectorToCapture = '.dashboard-manager,.dashboard-manager .dropdown';
var generalParams = 'idSite=1&period=day&date=2012-01-01';
var url = '?module=CoreHome&action=index&' + generalParams + '#?' + generalParams + '&category=Dashboard_Dashboard&subcategory=5';
@@ -32,6 +32,7 @@ describe("DashboardManager", function () {
expect.screenshot("widget_list_shown").to.be.captureSelector(selectorToCapture, function (page) {
page.mouseMove('.widgetpreview-categorylist>li:contains(Live!)'); // have to mouse move twice... otherwise Live! will just be highlighted
page.mouseMove('.widgetpreview-categorylist>li:contains(Visitors):first');
+ page.click('.widgetpreview-categorylist>li:contains(Visitors):first');
}, done);
});
@@ -57,7 +58,7 @@ describe("DashboardManager", function () {
page.click('.dashboard-manager .title');
page.click('li[data-action=createDashboard]');
page.sendKeys('#createDashboardName', 'newdash2');
- page.click('.ui-dialog[aria-describedby=createDashboardConfirm] button>span:contains(Yes)');
+ page.click('.modal.open .modal-footer a:contains(Ok)');
}, done);
});
@@ -66,7 +67,7 @@ describe("DashboardManager", function () {
page.contains('ul.navbar ul li.sfActive:contains(newdash2)');
page.click('.dashboard-manager .title');
page.click('li[data-action=removeDashboard]');
- page.click('.ui-dialog[aria-describedby=removeDashboardConfirm] button>span:contains(Yes)');
+ page.click('.modal.open .modal-footer a:contains(Yes)');
page.mouseMove('.dashboard-manager');
page.evaluate(function () {
$('.widgetTop').removeClass('widgetTopHover');
diff --git a/tests/UI/specs/Dashboard_spec.js b/tests/UI/specs/Dashboard_spec.js
index 2489f69637..0c4f28f080 100644
--- a/tests/UI/specs/Dashboard_spec.js
+++ b/tests/UI/specs/Dashboard_spec.js
@@ -122,22 +122,24 @@ describe("Dashboard", function () {
page.click('.dashboard-manager .title');
page.mouseMove('.widgetpreview-categorylist>li:contains(Live!)'); // have to mouse move twice... otherwise Live! will just be highlighted
+ page.click('.widgetpreview-categorylist>li:contains(Live!)');
+
page.mouseMove('.widgetpreview-categorylist>li:contains(Times):first');
+ page.click('.widgetpreview-categorylist>li:contains(Times):first');
page.mouseMove('.widgetpreview-widgetlist>li:contains(Visits per local time)');
-
page.click('.widgetpreview-widgetlist>li:contains(Visits per local time)');
}, done);
});
it("should remove widget when remove widget icon is clicked", function (done) {
expect.screenshot("widget_move_removed").to.be.capture(function (page) {
- var widget = '[id="widgetVisitTimegetVisitInformationPerLocalTimeviewDataTablegraphVerticalBar"]';
+ var widget = '[id="widgetVisitTimegetVisitInformationPerLocalTime"]';
page.mouseMove(widget + ' .widgetTop');
page.click(widget + ' .button#close');
- page.click('.ui-dialog button>span:contains(Yes)');
+ page.click('.modal.open .modal-footer a:contains(Yes)');
page.mouseMove('.dashboard-manager');
}, done);
});
@@ -146,8 +148,8 @@ describe("Dashboard", function () {
expect.screenshot("change_layout").to.be.capture(function (page) {
page.click('.dashboard-manager .title');
page.click('li[data-action=showChangeDashboardLayoutDialog]');
- page.click('div[layout=50-50]');
- page.click('.ui-dialog button>span:contains(Save)');
+ page.click('.modal.open div[layout=50-50]');
+ page.click('.modal.open .modal-footer a:contains(Save)');
}, done);
});
@@ -157,7 +159,7 @@ describe("Dashboard", function () {
page.click('li[data-action=renameDashboard]');
page.evaluate(function () {
$('#newDashboardName:visible').val('newname'); // don't use sendKeys or click, since in this test it appears to trigger a seg fault on travis
- $('.ui-dialog[aria-describedby=renameDashboardConfirm] button>span:contains(Save):visible').click();
+ $('.modal.open .modal-footer a:contains(Save):visible').click();
});
}, done);
});
@@ -173,7 +175,7 @@ describe("Dashboard", function () {
page.evaluate(function () {
$('[id=copyDashboardUser]:last').val('superUserLogin');
});
- page.click('.ui-dialog button>span:contains(Ok)');
+ page.click('.modal.open .modal-footer a:contains(Ok)');
page.load(url.replace("idDashboard=5", "idDashboard=6"));
}, done);
@@ -183,7 +185,7 @@ describe("Dashboard", function () {
expect.screenshot("reset").to.be.capture(function (page) {
page.click('.dashboard-manager .title');
page.click('li[data-action=resetDashboard]');
- page.click('.ui-dialog button>span:contains(Yes)', 4000);
+ page.click('.modal.open .modal-footer a:contains(Yes)', 4000);
page.mouseMove('.dashboard-manager');
}, done);
});
@@ -192,7 +194,7 @@ describe("Dashboard", function () {
expect.screenshot("removed").to.be.capture(function (page) {
page.click('.dashboard-manager .title');
page.click('li[data-action=removeDashboard]');
- page.click('.ui-dialog[aria-describedby=removeDashboardConfirm] button>span:contains(Yes)');
+ page.click('.modal.open .modal-footer a:contains(Yes)');
page.mouseMove('.dashboard-manager');
page.evaluate(function () {
$('.widgetTop').removeClass('widgetTopHover');
@@ -205,7 +207,7 @@ describe("Dashboard", function () {
page.load(url);
page.click('.dashboard-manager .title');
page.click('li[data-action=setAsDefaultWidgets]');
- page.click('.ui-dialog button>span:contains(Yes)');
+ page.click('.modal.open .modal-footer a:contains(Yes)');
}, done);
});
@@ -214,7 +216,7 @@ describe("Dashboard", function () {
page.click('.dashboard-manager .title');
page.click('li[data-action=createDashboard]');
page.sendKeys('#createDashboardName:visible', 'newdash2');
- page.click('.ui-dialog[aria-describedby=createDashboardConfirm] button>span:contains(Yes)');
+ page.click('.modal.open .modal-footer a:contains(Ok)');
// toggle map widget to prevent failures
page.mouseMove('#widgetUserCountryMapvisitorMap .widgetTop', 3000);
page.click('#widgetUserCountryMapvisitorMap #minimise');
diff --git a/tests/UI/specs/EvolutionGraph_spec.js b/tests/UI/specs/EvolutionGraph_spec.js
index f0ff8e7701..ecf6f3220d 100644
--- a/tests/UI/specs/EvolutionGraph_spec.js
+++ b/tests/UI/specs/EvolutionGraph_spec.js
@@ -18,6 +18,11 @@ describe("EvolutionGraph", function () {
testEnvironment.callApi("Annotations.deleteAll", {idSite: 3}, done);
});
+ function showDataTableFooter(page)
+ {
+ page.mouseMove('.dataTableFeatures');
+ }
+
it("should load correctly", function (done) {
expect.screenshot('initial').to.be.capture(function (page) {
page.load(url);
@@ -44,21 +49,35 @@ describe("EvolutionGraph", function () {
it("should show multiple metrics when another metric picked", function (done) {
expect.screenshot('two_metrics').to.be.capture(function (page) {
- page.click('.jqplot-seriespicker-popover input:not(:checked)');
+ page.click('.jqplot-seriespicker-popover input:not(:checked):first + label');
+ }, done);
+ });
+
+ it("should show table actions on hover", function (done) {
+ expect.screenshot('table_actions').to.be.capture(function (page) {
+ showDataTableFooter(page);
+ }, done);
+ });
+
+ it("should show export formats on click including image", function (done) {
+ expect.screenshot('export_formats').to.be.capture(function (page) {
+ page.click('.activateExportSelection');
}, done);
});
it("should show graph as image when export as image icon clicked", function (done) {
expect.screenshot('export_image').to.be.capture(function (page) {
- page.click('#dataTableFooterExportAsImageIcon>a');
+ page.click('#dataTableFooterExportAsImageIcon');
}, done);
});
it("should display more periods when limit selection changed", function (done) {
expect.screenshot('limit_changed').to.be.capture(function (page) {
- page.click('.limitSelection');
+ page.click('.ui-dialog .ui-widget-header button:visible');
+ showDataTableFooter(page);
+ page.click('.limitSelection input');
page.evaluate(function () {
- $('.limitSelection ul li[value=60]').click();
+ $('.limitSelection ul li:contains(60) span').click();
});
}, done);
});
@@ -66,8 +85,10 @@ describe("EvolutionGraph", function () {
// annotations tests
it("should show annotations when annotation icon on x-axis clicked", function (done) {
expect.screenshot('annotations_single_period').to.be.capture(function (page) {
+ showDataTableFooter(page);
+ page.click('.limitSelection input');
page.evaluate(function () {
- $('.limitSelection ul li[value=30]').click(); // change limit back
+ $('.limitSelection ul li:contains(30) span').click(); // change limit back
});
page.click('.evolution-annotations>span[data-count!=0]', 3000);
@@ -76,6 +97,7 @@ describe("EvolutionGraph", function () {
it("should show all annotations when annotations footer link clicked", function (done) {
expect.screenshot('annotations_all').to.be.capture(function (page) {
+ showDataTableFooter(page);
page.click('.annotationView', 3000);
}, done);
});
@@ -83,6 +105,7 @@ describe("EvolutionGraph", function () {
it("should show no annotations message when no annotations for site", function (done) {
expect.screenshot('annotations_none').to.be.capture(function (page) {
page.load(page.getCurrentUrl().replace(/idSite=[^&]*/, "idSite=3") + "&columns=nb_visits");
+ showDataTableFooter(page);
page.click('.annotationView', 3000);
}, done);
});
@@ -127,7 +150,7 @@ describe("EvolutionGraph", function () {
page.sendKeys('.annotation-edit', 'edited annotation');
page.click('.annotation-period-edit>a');
page.evaluate(function () {
- $('.ui-datepicker-calendar td a:contains(16)').click();
+ $('.annotation-meta .ui-datepicker-calendar td a:contains(16)').click();
});
page.click('.annotation-list-range');
page.click('input.annotation-save', 3000);
diff --git a/tests/UI/specs/GoalsTable_spec.js b/tests/UI/specs/GoalsTable_spec.js
index d74b036367..58f37969e0 100644
--- a/tests/UI/specs/GoalsTable_spec.js
+++ b/tests/UI/specs/GoalsTable_spec.js
@@ -16,7 +16,8 @@ describe("GoalsTable", function () {
it("should load when the goals icon is clicked", function (done) {
expect.screenshot('initial').to.be.capture(function (page) {
page.load(url);
- page.click('.tableIconsGroup a[data-footer-icon-id=tableGoals]');
+ page.click('.activateVisualizationSelection');
+ page.click('.tableIcon[data-footer-icon-id=tableGoals]');
}, done);
});
@@ -50,7 +51,8 @@ describe("GoalsTable", function () {
it("should show abandoned carts data when the abandoned carts link is clicked", function (done) {
expect.screenshot('goals_table_abandoned_carts').to.be.capture(function (page) {
- page.click('.tableIconsGroup a[data-footer-icon-id=ecommerceAbandonedCart]');
+ page.click('.activateVisualizationSelection');
+ page.click('.tableIcon[data-footer-icon-id=ecommerceAbandonedCart]');
}, done);
});
}); \ No newline at end of file
diff --git a/tests/UI/specs/Login_spec.js b/tests/UI/specs/Login_spec.js
index db3e1f6aa0..89bcb6627b 100644
--- a/tests/UI/specs/Login_spec.js
+++ b/tests/UI/specs/Login_spec.js
@@ -49,7 +49,7 @@ describe("Login", function () {
it("should redirect to login when logout link clicked", function (done) {
expect.screenshot("login_form").to.be.capture("logout_form", function (page) {
- page.click("#topRightBar .icon-sign-out");
+ page.click("nav .right .icon-sign-out");
}, done);
});
@@ -99,7 +99,7 @@ describe("Login", function () {
it("should login successfully when formless login used", function (done) {
expect.page("").contains('#dashboard', 'formless_login', function (page) {
- page.click("#topRightBar .icon-sign-out");
+ page.click("nav .right .icon-sign-out");
page.load(formlessLoginUrl);
}, done);
});
diff --git a/tests/UI/specs/MeasurableManager_spec.js b/tests/UI/specs/MeasurableManager_spec.js
index 500f2c0acc..74c1c1f97f 100644
--- a/tests/UI/specs/MeasurableManager_spec.js
+++ b/tests/UI/specs/MeasurableManager_spec.js
@@ -21,7 +21,7 @@ describe("MeasurableManager", function () {
function assertScreenshotEquals(screenshotName, done, test)
{
- expect.screenshot(screenshotName).to.be.captureSelector('.sitesManagerList,.sitesButtonBar,.sites-manager-header,.ui-dialog.ui-widget', test, done);
+ expect.screenshot(screenshotName).to.be.captureSelector('.sitesManagerList,.sitesButtonBar,.sites-manager-header,.ui-dialog.ui-widget,.modal.open', test, done);
}
it("should load correctly and should not use SitesManager wording as another type is enabled", function (done) {
@@ -45,7 +45,7 @@ describe("MeasurableManager", function () {
it("should load mobile app specific fields", function (done) {
assertScreenshotEquals("add_measurable_view", done, function (page) {
- page.click('.ui-dialog-content button:contains(Mobile App)');
+ page.click('.modal.open .btn:contains(Mobile App)');
page.evaluate(function () {
$('.form-help:contains(UTC time is)').hide();
});
diff --git a/tests/UI/specs/Menus_spec.js b/tests/UI/specs/Menus_spec.js
index 75142efd4a..f8b478f01d 100644
--- a/tests/UI/specs/Menus_spec.js
+++ b/tests/UI/specs/Menus_spec.js
@@ -16,7 +16,7 @@ describe("Menus", function () {
function openMenuItem(page, menuItem)
{
- page.click('#secondNavBar .navbar a:contains('+ menuItem + ')');
+ page.click('#secondNavBar .navbar a:contains('+ menuItem + '):first');
}
// main menu tests
@@ -34,7 +34,7 @@ describe("Menus", function () {
it('should change the menu when a lower menu item is clicked in the main menu', function (done) {
expect.screenshot('mainmenu_lower_clicked').to.be.captureSelector('#secondNavBar', function (page) {
- openMenuItem(page, 'Visitor Log');
+ openMenuItem(page, 'Custom Variables');
}, done);
});
@@ -48,7 +48,6 @@ describe("Menus", function () {
it('should change the admin page correctly when an admin menu item is clicked', function (done) {
expect.screenshot('admin_changed').to.be.captureSelector('#secondNavBar', function (page) {
openMenuItem(page, 'Manage');
- openMenuItem(page, 'Websites');
}, done);
});
});
diff --git a/tests/UI/specs/Overlay_spec.js b/tests/UI/specs/Overlay_spec.js
index c0adc30a43..79de66f8cc 100644
--- a/tests/UI/specs/Overlay_spec.js
+++ b/tests/UI/specs/Overlay_spec.js
@@ -46,7 +46,7 @@ describe("Overlay", function () {
expect.screenshot("page_link_clicks").to.be.capture(function (page) {
var pos = page.webpage.evaluate(function () {
var iframe = $('iframe'),
- innerOffset = $('.btn.btn-lg', iframe.contents()).offset();
+ innerOffset = $('.btn.btn-large', iframe.contents()).offset();
return {
x: iframe.offset().left + innerOffset.left,
y: iframe.offset().top + innerOffset.top
diff --git a/tests/UI/specs/PeriodSelector_spec.js b/tests/UI/specs/PeriodSelector_spec.js
index 7668d27375..410c4026d7 100644
--- a/tests/UI/specs/PeriodSelector_spec.js
+++ b/tests/UI/specs/PeriodSelector_spec.js
@@ -13,12 +13,18 @@ describe("PeriodSelector", function () {
var generalParams = 'idSite=1&period=day&date=2012-01-01';
var url = '?module=CoreHome&action=index&' + generalParams + '#?' + generalParams + '&category=General_Actions&subcategory=General_Pages';
+ var selector = '#periodString,#periodString .dropdown';
+
it("should load correctly", function (done) {
- expect.screenshot("loaded").to.be.captureSelector('#periodString', function (page) {
+ expect.screenshot("loaded").to.be.captureSelector(selector, function (page) {
page.load(url);
// disable broadcast.propagateNewPage & remove loading gif
page.evaluate(function () {
+ piwikHelper.isAngularRenderingThePage = function () {
+ return false;
+ };
+
broadcast.propagateNewPage = function () {};
$('#ajaxLoadingCalendar').remove();
});
@@ -26,19 +32,19 @@ describe("PeriodSelector", function () {
});
it("should expand when clicked", function (done) {
- expect.screenshot("expanded").to.be.captureSelector('#periodString', function (page) {
- page.click('.periodSelector');
+ expect.screenshot("expanded").to.be.captureSelector(selector, function (page) {
+ page.click('.periodSelector .title');
}, done);
});
it("should select a date when a date is clicked in day-period mode", function (done) {
- expect.screenshot("day_selected").to.be.captureSelector('#periodString', function (page) {
+ expect.screenshot("day_selected").to.be.captureSelector(selector, function (page) {
page.click('.period-date .ui-datepicker-calendar a:contains(12)');
}, done);
});
it("should change the month displayed when a month is selected in the month dropdown", function (done) {
- expect.screenshot("month_changed").to.be.captureSelector('#periodString', function (page) {
+ expect.screenshot("month_changed").to.be.captureSelector(selector, function (page) {
page.evaluate(function () {
$('.ui-datepicker-month').val(1).trigger('change');
});
@@ -46,7 +52,7 @@ describe("PeriodSelector", function () {
});
it("should change the year displayed when a year is selected in the year dropdown", function (done) {
- expect.screenshot("year_changed").to.be.captureSelector('#periodString', function (page) {
+ expect.screenshot("year_changed").to.be.captureSelector(selector, function (page) {
page.evaluate(function () {
$('.ui-datepicker-year').val(2013).trigger('change');
});
@@ -54,34 +60,34 @@ describe("PeriodSelector", function () {
});
it("should change the date when a date is clicked in week-period mode", function (done) {
- expect.screenshot("week_selected").to.be.captureSelector('#periodString', function (page) {
+ expect.screenshot("week_selected").to.be.captureSelector(selector, function (page) {
page.click('label[for=period_id_week]');
page.click('.period-date .ui-datepicker-calendar a:contains(13)');
}, done);
});
it("should change the date when a date is clicked in month-period mode", function (done) {
- expect.screenshot("month_selected").to.be.captureSelector('#periodString', function (page) {
+ expect.screenshot("month_selected").to.be.captureSelector(selector, function (page) {
page.click('label[for=period_id_month]');
page.click('.period-date .ui-datepicker-calendar a:contains(14)');
}, done);
});
it("should change the date when a date is clicked in year-period mode", function (done) {
- expect.screenshot("year_selected").to.be.captureSelector('#periodString', function (page) {
+ expect.screenshot("year_selected").to.be.captureSelector(selector, function (page) {
page.click('label[for=period_id_year]');
page.click('.period-date .ui-datepicker-calendar a:contains(15)');
}, done);
});
it("should display the range picker when the range radio button is clicked", function (done) {
- expect.screenshot("range_picker_displayed").to.be.captureSelector('#periodString', function (page) {
+ expect.screenshot("range_picker_displayed").to.be.captureSelector(selector, function (page) {
page.click('label[for=period_id_range]');
}, done);
});
it("should change from & to dates when range picker calendar dates are clicked", function (done) {
- expect.screenshot("date_range_selected").to.be.captureSelector('#periodString', function (page) {
+ expect.screenshot("date_range_selected").to.be.captureSelector(selector, function (page) {
page.click('#calendarFrom .ui-datepicker-calendar a:contains(10)');
page.click('#calendarTo .ui-datepicker-calendar a:contains(18)');
page.mouseMove('#calendarApply');
diff --git a/tests/UI/specs/PieGraph_spec.js b/tests/UI/specs/PieGraph_spec.js
index 7c48ce2663..c1b498c65a 100644
--- a/tests/UI/specs/PieGraph_spec.js
+++ b/tests/UI/specs/PieGraph_spec.js
@@ -33,7 +33,7 @@ describe("PieGraph", function () {
it("should change displayed metric when another metric picked", function (done) {
expect.screenshot('other_metric').to.be.capture(function (page) {
- page.click('.jqplot-seriespicker-popover input:not(:checked)');
+ page.click('.jqplot-seriespicker-popover input:not(:checked):first + label');
}, done);
});
}); \ No newline at end of file
diff --git a/tests/UI/specs/PivotByDimension_spec.js b/tests/UI/specs/PivotByDimension_spec.js
index 86a5815d53..cfe367438b 100644
--- a/tests/UI/specs/PivotByDimension_spec.js
+++ b/tests/UI/specs/PivotByDimension_spec.js
@@ -15,12 +15,17 @@ describe("PivotByDimension", function () {
cvarsUrl = "?module=CoreHome&action=index&idSite=1&period=year&date=2012-08-09#?idSite=1&period=year&date=2012-08-09&category=General_Visitors&subcategory=CustomVariables_CustomVariables"
;
+ function showDataTableFooter(page)
+ {
+ page.mouseMove('.dataTableFeatures');
+ }
+
it("should pivot a report correctly when the pivot cog option is selected", function (done) {
expect.screenshot('pivoted').to.be.captureSelector('.dataTable,.expandDataTableFooterDrawer', function (page) {
page.load(eventsUrl);
page.click('.dimension:contains(Event Names)');
- page.click('.expandDataTableFooterDrawer');
- page.mouseMove('.tableConfiguration');
+ showDataTableFooter(page);
+ page.click('.dropdownConfigureIcon');
page.click('.dataTablePivotBySubtable');
page.mouseMove({x: -15, y: -15}); // make sure nothing is highlighted
}, done);
@@ -33,8 +38,8 @@ describe("PivotByDimension", function () {
it("should display the pivot option on reports that set a custom columns_to_display", function (done) {
expect.screenshot('pivoted_columns_report').to.be.captureSelector('.dataTable,.expandDataTableFooterDrawer', function (page) {
page.load(cvarsUrl);
- page.click('.expandDataTableFooterDrawer');
- page.mouseMove('.tableConfiguration');
+ showDataTableFooter(page);
+ page.click('.dropdownConfigureIcon');
page.click('.dataTablePivotBySubtable');
page.mouseMove({x: -15, y: -15}); // make sure nothing is highlighted
}, done);
diff --git a/tests/UI/specs/QuickAccess_spec.js b/tests/UI/specs/QuickAccess_spec.js
index 75879d2729..52a37e4c58 100644
--- a/tests/UI/specs/QuickAccess_spec.js
+++ b/tests/UI/specs/QuickAccess_spec.js
@@ -8,7 +8,7 @@
*/
describe("QuickAccess", function () {
- var selectorToCapture = "#search,.quick-access";
+ var selectorToCapture = ".quick-access,.quick-access .dropdown";
this.timeout(0);
@@ -16,7 +16,7 @@ describe("QuickAccess", function () {
function enterSearchTerm(page, searchTermToAdd)
{
- page.sendKeys("#search input", searchTermToAdd);
+ page.sendKeys(".quick-access input", searchTermToAdd);
}
function captureSelector(screenshotName, done, selector, callback)
diff --git a/tests/UI/specs/ReportExporting_spec.js b/tests/UI/specs/ReportExporting_spec.js
index 0b51df0754..bede23ff86 100644
--- a/tests/UI/specs/ReportExporting_spec.js
+++ b/tests/UI/specs/ReportExporting_spec.js
@@ -19,8 +19,7 @@ describe("ReportExporting", function () {
expect.file('Referrers.getWebsites_exported.' + format.toLowerCase() + '.txt').to.be.pageContents(function (page) {
if (page.getCurrentUrl() != referrersGetWebsitesUrl) {
page.load(referrersGetWebsitesUrl);
- page.click('a.tableIcon[var=export]');
- page.click('a.tableIcon[var=export]'); // have to click twice in phantomjs
+ page.click('.activateExportSelection');
}
page.downloadLink('.exportToFormatItems a[format=' + format + ']');
@@ -33,8 +32,7 @@ describe("ReportExporting", function () {
expect.file('VisitsSummary.get_exported.' + format.toLowerCase() + '.txt').to.be.pageContents(function (page) {
if (page.getCurrentUrl() != visitsSummaryGetUrl) {
page.load(visitsSummaryGetUrl);
- page.click('a.tableIcon[var=export]');
- page.click('a.tableIcon[var=export]'); // have to click twice in phantomjs
+ page.click('.activateExportSelection');
}
page.downloadLink('.exportToFormatItems a[format=' + format + ']');
@@ -50,8 +48,7 @@ describe("ReportExporting", function () {
page.mouseMove('tbody tr:first-child');
page.mouseMove('a.actionRowEvolution:visible'); // necessary to get popover to display
page.click('a.actionRowEvolution:visible');
-
- page.click('.ui-dialog a.tableIcon[var=export]');
+ page.click('.ui-dialog .activateExportSelection');
}
page.downloadLink('.ui-dialog .exportToFormatItems a[format=' + format + ']');
diff --git a/tests/UI/specs/SegmentSelectorEditor_spec.js b/tests/UI/specs/SegmentSelectorEditor_spec.js
index 2bb5721762..16e42a6017 100644
--- a/tests/UI/specs/SegmentSelectorEditor_spec.js
+++ b/tests/UI/specs/SegmentSelectorEditor_spec.js
@@ -51,16 +51,24 @@ describe("SegmentSelectorEditorTest", function () {
}, done);
});
+ it("should show the egment editor's available segments dropdown", function (done) {
+ expect.screenshot("6_segment_editor_droplist").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.mouseMove('.available_segments a.dropList');
+ page.click('.available_segments a.dropList');
+ }, done);
+ });
+
it("should change segment when another available segment clicked in segment editor's available segments dropdown", function (done) {
expect.screenshot("6_segment_editor_different").to.be.captureSelector(selectorsToCapture, function (page) {
- page.click('.available_segments a.dropList');
- page.click('li.ui-menu-item a:contains(Add new segment)');
+ page.click('.ui-menu-item a:contains(Add new segment)');
}, done);
});
it("should close the segment editor when the close link is clicked", function (done) {
expect.screenshot("7_segment_editor_closed").to.be.captureSelector(selectorsToCapture, function (page) {
- page.click('.segmentEditorPanel .segment-footer .close');
+ page.evaluate(function () {
+ $('.segmentEditorPanel .segment-footer .close').click();
+ });
}, done);
});
@@ -112,7 +120,9 @@ describe("SegmentSelectorEditorTest", function () {
page.sendKeys('input.edit_segment_name', 'new segment');
page.click('.segmentEditorPanel .metric_category:contains(Actions)'); // click somewhere else to save new name
- page.click('button.saveAndApply');
+ page.evaluate(function () {
+ $('button.saveAndApply').click();
+ });
page.click('.segmentationContainer');
}, done);
@@ -172,14 +182,16 @@ describe("SegmentSelectorEditorTest", function () {
});
it("should correctly show delete dialog when the delete link is clicked", function (done) {
- expect.screenshot('deleted_dialog').to.be.captureSelector('.ui-dialog', function (page) {
- page.click('.segmentEditorPanel a.delete');
+ expect.screenshot('deleted_dialog').to.be.captureSelector('.modal.open', function (page) {
+ page.evaluate(function () {
+ $('.segmentEditorPanel a.delete').click();
+ });
}, done);
});
it("should correctly remove the segment when the delete dialog is confirmed", function (done) {
- expect.screenshot('deleted').to.be.captureSelector(selectorsToCapture + ',.ui-dialog', function (page) {
- page.click('.ui-dialog button>span:contains(Yes):visible');
+ expect.screenshot('deleted').to.be.captureSelector(selectorsToCapture + ',.ui-dialog,.modal.open', function (page) {
+ page.click('.modal.open .modal-footer a:contains(Yes):visible');
page.click('.segmentationContainer .title');
}, done);
diff --git a/tests/UI/specs/SitesManager_spec.js b/tests/UI/specs/SitesManager_spec.js
index 93abba308b..853dc9de38 100644
--- a/tests/UI/specs/SitesManager_spec.js
+++ b/tests/UI/specs/SitesManager_spec.js
@@ -38,9 +38,6 @@ describe("SitesManager", function () {
it("should load correctly and show page 0", function (done) {
assertScreenshotEquals("loaded", done, function (page) {
page.load(url);
- page.evaluate(function () {
- $('.form-help:contains(UTC time is)').hide();
- });
});
});
@@ -79,4 +76,13 @@ describe("SitesManager", function () {
searchForText(page, 'RanDoMSearChTerm');
});
});
+
+ it("should load the global settings page", function (done) {
+ assertScreenshotEquals("global_settings", done, function (page) {
+ page.load('?module=SitesManager&action=globalSettings&idSite=1&period=day&date=yesterday&showaddsite=false');
+ page.evaluate(function () {
+ $('.form-help:contains(UTC time is)').hide();
+ });
+ });
+ });
}); \ No newline at end of file
diff --git a/tests/UI/specs/UIIntegration_spec.js b/tests/UI/specs/UIIntegration_spec.js
index b7d73c2529..541fd33292 100644
--- a/tests/UI/specs/UIIntegration_spec.js
+++ b/tests/UI/specs/UIIntegration_spec.js
@@ -45,7 +45,7 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
// dashboard tests
it("should load dashboard1 correctly", function (done) {
- expect.screenshot("dashboard1").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("dashboard1").to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Dashboard_Dashboard&subcategory=1");
page.evaluate(function () {
@@ -56,19 +56,19 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
});
it("should load dashboard2 correctly", function (done) {
- expect.screenshot("dashboard2").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("dashboard2").to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Dashboard_Dashboard&subcategory=2");
}, done);
});
it("should load dashboard3 correctly", function (done) {
- expect.screenshot("dashboard3").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("dashboard3").to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Dashboard_Dashboard&subcategory=3");
}, done);
});
it("should load dashboard4 correctly", function (done) {
- expect.screenshot("dashboard4").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("dashboard4").to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Dashboard_Dashboard&subcategory=4");
}, done);
});
@@ -82,68 +82,70 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
// visitors pages
it('should load visitors > overview page correctly', function (done) {
- expect.screenshot("visitors_overview").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("visitors_overview").to.be.captureSelector('.pageWrap', function (page) {
// use columns query param to make sure columns works when supplied in URL fragment
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Visitors&subcategory=General_Overview&columns=nb_visits,nb_actions");
}, done);
});
it('should reload the visitors > overview page when clicking on the visitors overview page element again', function (done) {
- expect.screenshot("visitors_overview").to.be.captureSelector("visitors_overview_reloaded", '.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("visitors_overview").to.be.captureSelector("visitors_overview_reloaded", '.pageWrap', function (page) {
page.click('#VisitsSummary_index > a.item');
}, done);
});
it('should load visitors > visitor log page correctly', function (done) {
- expect.screenshot("visitors_visitorlog").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("visitors_visitorlog").to.be.skippedOnAbort();
+ expect.screenshot("visitors_visitorlog").to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Visitors&subcategory=Live_VisitorLog");
}, done);
});
it('should load visitors with site search > visitor log page correctly', function (done) {
- expect.screenshot("visitors_with_site_search_visitorlog").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
- page.load("?" + urlBase + "#" + generalParams + "&module=Live&action=indexVisitorLog&period=day&date=2012-01-11");
+ expect.screenshot("visitors_with_site_search_visitorlog").to.be.skippedOnAbort();
+ expect.screenshot("visitors_with_site_search_visitorlog").to.be.captureSelector('.pageWrap', function (page) {
+ page.load("?" + urlBase + "#?" + generalParams + "&category=General_Visitors&subcategory=Live_VisitorLog&period=day&date=2012-01-11");
}, done);
});
it('should load the visitors > devices page correctly', function (done) {
- expect.screenshot("visitors_devices").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("visitors_devices").to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Visitors&subcategory=DevicesDetection_Devices");
}, done);
});
it('should load visitors > locations & provider page correctly', function (done) {
- expect.screenshot("visitors_locations_provider").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("visitors_locations_provider").to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Visitors&subcategory=UserCountry_SubmenuLocations");
}, done);
});
it('should load the visitors > software page correctly', function (done) {
- expect.screenshot("visitors_software").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("visitors_software").to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Visitors&subcategory=DevicesDetection_Software");
}, done);
});
it('should load the visitors > times page correctly', function (done) {
- expect.screenshot("visitors_times").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("visitors_times").to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Visitors&subcategory=VisitTime_SubmenuTimes");
}, done);
});
it('should load the visitors > engagement page correctly', function (done) {
- expect.screenshot("visitors_engagement").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("visitors_engagement").to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Visitors&subcategory=VisitorInterest_Engagement");
}, done);
});
it('should load the visitors > custom variables page correctly', function (done) {
- expect.screenshot('visitors_custom_vars').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('visitors_custom_vars').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Visitors&subcategory=CustomVariables_CustomVariables");
}, done);
});
it('should load the visitors > real-time map page correctly', function (done) {
- expect.screenshot('visitors_realtime_map').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('visitors_realtime_map').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + idSite2Params + "&category=General_Visitors&subcategory=UserCountryMap_RealTimeMap"
+ "&showDateTime=0&realtimeWindow=last2&changeVisitAlpha=0&enableAnimation=0&doNotRefreshVisits=1"
+ "&removeOldVisits=0");
@@ -152,16 +154,16 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
// actions pages
it('should load the actions > pages page correctly', function (done) {
- expect.screenshot('actions_pages').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('actions_pages').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=General_Pages");
}, done);
});
// actions pages
it('should load the actions > pages help tooltip, including the "Report generated time"', function (done) {
- expect.screenshot('actions_pages_tooltip_help').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('actions_pages_tooltip_help').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=General_Pages");
- page.mouseMove('h2[piwik-enriched-headline]');
+ page.mouseMove('[piwik-enriched-headline]');
page.click(".helpIcon");
page.evaluate(function () {
$('.helpDate:visible').hide();
@@ -170,43 +172,43 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
});
it('should load the actions > entry pages page correctly', function (done) {
- expect.screenshot('actions_entry_pages').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('actions_entry_pages').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=Actions_SubmenuPagesEntry");
}, done);
});
it('should load the actions > exit pages page correctly', function (done) {
- expect.screenshot('actions_exit_pages').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('actions_exit_pages').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=Actions_SubmenuPagesExit");
}, done);
});
it('should load the actions > page titles page correctly', function (done) {
- expect.screenshot('actions_page_titles').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('actions_page_titles').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=Actions_SubmenuPageTitles");
}, done);
});
it('should load the actions > site search page correctly', function (done) {
- expect.screenshot('actions_site_search').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('actions_site_search').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=Actions_SubmenuSitesearch");
}, done);
});
it('should load the actions > outlinks page correctly', function (done) {
- expect.screenshot('actions_outlinks').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('actions_outlinks').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=General_Outlinks");
}, done);
});
it('should load the actions > downloads page correctly', function (done) {
- expect.screenshot('actions_downloads').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('actions_downloads').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=General_Downloads");
}, done);
});
it('should load the actions > contents page correctly', function (done) {
- expect.screenshot('actions_contents').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('actions_contents').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=Contents_Contents&period=day&date=2012-01-01");
}, done);
});
@@ -231,51 +233,51 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
// referrers pages
it('should load the referrers > overview page correctly', function (done) {
- expect.screenshot('referrers_overview').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('referrers_overview').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Referrers_Referrers&subcategory=General_Overview");
}, done);
});
// referrers pages
it('should load the referrers > overview page correctly', function (done) {
- expect.screenshot('referrers_allreferrers').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('referrers_allreferrers').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Referrers_Referrers&subcategory=Referrers_WidgetGetAll");
}, done);
});
it('should display metric tooltip correctly', function (done) {
- expect.screenshot("metric_tooltip").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("metric_tooltip").to.be.captureSelector('.pageWrap', function (page) {
page.mouseMove('[data-report="Referrers.getReferrerType"] #nb_visits .thDIV', 500);
}, done);
});
it('should load the referrers > search engines & keywords page correctly', function (done) {
- expect.screenshot('referrers_search_engines_keywords').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('referrers_search_engines_keywords').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Referrers_Referrers&subcategory=Referrers_SubmenuSearchEngines");
}, done);
});
it('should load the referrers > websites & social page correctly', function (done) {
- expect.screenshot('referrers_websites_social').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('referrers_websites_social').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Referrers_Referrers&subcategory=Referrers_SubmenuWebsites");
}, done);
});
it('should load the referrers > campaigns page correctly', function (done) {
- expect.screenshot('referrers_campaigns').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('referrers_campaigns').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Referrers_Referrers&subcategory=Referrers_Campaigns");
}, done);
});
// goals pages
it('should load the goals > ecommerce page correctly', function (done) {
- expect.screenshot('goals_ecommerce').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer,.dataTable', function (page) {
+ expect.screenshot('goals_ecommerce').to.be.captureSelector('.pageWrap,.dataTable', function (page) {
page.load( "?" + urlBase + "#?" + generalParams + "&category=Goals_Ecommerce&subcategory=General_Overview")
}, done);
});
it('should load the goals > overview page correctly', function (done) {
- expect.screenshot('goals_overview').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer,.dataTable', function (page) {
+ expect.screenshot('goals_overview').to.be.captureSelector('.pageWrap,.dataTable', function (page) {
page.load( "?" + urlBase + "#?" + generalParams + "&category=Goals_Goals&subcategory=General_Overview");
}, done);
});
@@ -288,64 +290,64 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
});
it('should load the goals > single goal page correctly', function (done) {
- expect.screenshot('goals_individual_goal').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer,.dataTable', function (page) {
+ expect.screenshot('goals_individual_goal').to.be.captureSelector('.pageWrap,.dataTable', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Goals_Goals&subcategory=1");
}, done);
});
// Events pages
it('should load the Events > index page correctly', function (done) {
- expect.screenshot('events_overview').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer,.dataTable', function (page) {
+ expect.screenshot('events_overview').to.be.captureSelector('.pageWrap,.dataTable', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Actions&subcategory=Events_Events");
}, done);
});
// one page w/ segment
it('should load the visitors > overview page correctly when a segment is specified', function (done) {
- expect.screenshot('visitors_overview_segment').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('visitors_overview_segment').to.be.captureSelector('.pageWrap,.top_controls', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=General_Visitors&subcategory=General_Overview&segment=" + segment);
}, done);
});
// example ui pages
it('should load the example ui > dataTables page correctly', function (done) {
- expect.screenshot('exampleui_dataTables').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('exampleui_dataTables').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=ExampleUI_UiFramework&subcategory=ExampleUI_GetTemperaturesDataTable");
}, done);
});
it('should load the example ui > barGraph page correctly', function (done) {
- expect.screenshot('exampleui_barGraph').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('exampleui_barGraph').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=ExampleUI_UiFramework&subcategory=Bar%20graph");
}, done);
});
it('should load the example ui > pieGraph page correctly', function (done) {
- expect.screenshot('exampleui_pieGraph').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('exampleui_pieGraph').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=ExampleUI_UiFramework&subcategory=Pie%20graph");
}, done);
});
it('should load the example ui > tagClouds page correctly', function (done) {
- expect.screenshot('exampleui_tagClouds').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('exampleui_tagClouds').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=ExampleUI_UiFramework&subcategory=Tag%20clouds");
}, done);
});
it('should load the example ui > sparklines page correctly', function (done) {
- expect.screenshot('exampleui_sparklines').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('exampleui_sparklines').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=ExampleUI_UiFramework&subcategory=Sparklines");
}, done);
});
it('should load the example ui > evolution graph page correctly', function (done) {
- expect.screenshot('exampleui_evolutionGraph').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('exampleui_evolutionGraph').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=ExampleUI_UiFramework&subcategory=Evolution%20Graph");
}, done);
});
it('should load the example ui > treemap page correctly', function (done) {
- expect.screenshot('exampleui_treemap').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot('exampleui_treemap').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=ExampleUI_UiFramework&subcategory=Treemap");
page.wait(2000);
}, done);
@@ -354,6 +356,7 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
// widgetize
it('should load the widgetized visitor log correctly', function (done) {
expect.screenshot('widgetize_visitor_log').to.be.capture(function (page) {
+ expect.screenshot("widgetize_visitor_log").to.be.skippedOnAbort();
page.load("?" + widgetizeParams + "&" + generalParams + "&moduleToWidgetize=Live&actionToWidgetize=getVisitorLog");
page.evaluate(function () {
$('.expandDataTableFooterDrawer').click();
@@ -368,6 +371,7 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
});
it('should widgetize the ecommerce log correctly', function (done) {
+ expect.screenshot("widgetize_ecommercelog").to.be.skippedOnAbort();
expect.screenshot('widgetize_ecommercelog').to.be.capture(function (page) {
page.load("?" + widgetizeParams + "&" + generalParams + "&moduleToWidgetize=Ecommerce&actionToWidgetize=getEcommerceLog&filter_limit=-1");
}, done);
@@ -388,29 +392,36 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
// Ecommerce
it('should load the ecommerce overview page', function (done) {
- expect.screenshot('ecommerce_overview').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer,.dataTable', function (page) {
+ expect.screenshot('ecommerce_overview').to.be.captureSelector('.pageWrap,.dataTable', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Goals_Ecommerce&subcategory=General_Overview");
}, done);
});
it('should load the ecommerce log page', function (done) {
- expect.screenshot('ecommerce_log').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ expect.screenshot("ecommerce_log").to.be.skippedOnAbort();
+ expect.screenshot('ecommerce_log').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Goals_Ecommerce&subcategory=Goals_EcommerceLog");
}, done);
});
it('should load the ecommerce products page', function (done) {
- expect.screenshot('ecommerce_products').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer,.dataTable', function (page) {
+ expect.screenshot('ecommerce_products').to.be.captureSelector('.pageWrap,.dataTable', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Goals_Ecommerce&subcategory=Goals_Products");
}, done);
});
it('should load the ecommerce sales page', function (done) {
- expect.screenshot('ecommerce_sales').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer,.dataTable', function (page) {
+ expect.screenshot('ecommerce_sales').to.be.captureSelector('.pageWrap,.dataTable', function (page) {
page.load("?" + urlBase + "#?" + generalParams + "&category=Goals_Ecommerce&subcategory=Ecommerce_Sales");
}, done);
});
+ it('should load the Admin home page correct', function (done) {
+ expect.screenshot('admin_home').to.be.captureSelector('.pageWrap', function (page) {
+ page.load("?" + generalParams + "&module=CoreAdminHome&action=home");
+ }, done);
+ });
+
// Admin user settings (plugins not displayed)
it('should load the Manage > Websites admin page correctly', function (done) {
expect.screenshot('admin_manage_websites').to.be.captureSelector('.pageWrap', function (page) {
@@ -473,12 +484,6 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
}, done);
});
- it('should load the Settings > Mobile Messaging user page correctly', function (done) {
- expect.screenshot('user_settings_mobilemessaging').to.be.captureSelector('.pageWrap', function (page) {
- page.load("?" + generalParams + "&module=MobileMessaging&action=userSettings");
- }, done);
- });
-
it('should load the themes admin page correctly', function (done) {
expect.screenshot('admin_themes').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + generalParams + "&module=CorePluginsAdmin&action=themes");
@@ -490,19 +495,7 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
page.load("?" + generalParams + "&module=CorePluginsAdmin&action=plugins");
}, done);
});
-
- it('should load the plugin settings admin page correctly', function (done) {
- expect.screenshot('admin_plugin_settings').to.be.captureSelector('.pageWrap', function (page) {
- page.load("?" + generalParams + "&module=CoreAdminHome&action=generalSettings");
- }, done);
- });
-
- it('should load the plugin settings user page correctly', function (done) {
- expect.screenshot('user_plugin_settings').to.be.captureSelector('.pageWrap', function (page) {
- page.load("?" + generalParams + "&module=UsersManager&action=userSettings");
- }, done);
- });
-
+
it('should load the config file page correctly', function (done) {
expect.screenshot('admin_diagnostics_configfile').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + generalParams + "&module=Diagnostics&action=configfile");
@@ -577,7 +570,8 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
expect.screenshot('widgets_listing').to.be.captureSelector('.pageWrap', function (page) {
page.load("?" + generalParams + "&module=Widgetize&action=index");
- page.mouseMove('.widgetpreview-categorylist>li:contains(Visitors)');
+ page.mouseMove('.widgetpreview-categorylist>li:contains(Visitors):first');
+ page.click('.widgetpreview-categorylist>li:contains(Visitors):first');
page.mouseMove('.widgetpreview-widgetlist li:contains(Visits Over Time)');
page.click('.widgetpreview-widgetlist li:contains(Visits Over Time)');
page.evaluate(function () {
@@ -614,14 +608,12 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
page.load("?" + generalParams + "&module=Feedback&action=index");
page.evaluate(function () {
- $('h2 span').each(function () {
+ $('.enrichedHeadline span').each(function () {
if ($(this).text().indexOf("Piwik") !== -1) {
var replace = $(this).text().replace(/Piwik\s*\d+\.\d+(\.\d+)?([\-a-z]*\d+)?/g, 'Piwik');
$(this).text(replace);
}
});
-
- $('#header').hide();
});
}, done);
});
@@ -684,6 +676,9 @@ describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
});
it('should load the segmented visitor log correctly when a segment is selected', function (done) {
+
+ expect.screenshot("segmented_visitorlog").to.be.skippedOnAbort();
+
var url = "?module=CoreHome&action=index&idSite=1&period=year&date=2012-01-13#?category=General_Visitors&subcategory=CustomVariables_CustomVariables&idSite=1&period=year&date=2012-01-13";
expect.page(url).contains('.ui-dialog > .ui-dialog-content > div.dataTableVizVisitorLog:visible', 'segmented_visitorlog', function (page) {
page.click('.segmentationTitle');
diff --git a/tests/UI/specs/ViewDataTable_spec.js b/tests/UI/specs/ViewDataTable_spec.js
index 4dc412cad7..a7254b3ef6 100644
--- a/tests/UI/specs/ViewDataTable_spec.js
+++ b/tests/UI/specs/ViewDataTable_spec.js
@@ -22,6 +22,7 @@ describe("ViewDataTableTest", function () { // TODO: should remove Test suffix f
it("should load all columns when all columns clicked", function (done) {
expect.screenshot("1_all_columns").to.be.capture(function (page) {
+ page.click('.activateVisualizationSelection');
page.click('.tableIcon[data-footer-icon-id=tableAllColumns]');
}, done);
});
@@ -40,11 +41,17 @@ describe("ViewDataTableTest", function () { // TODO: should remove Test suffix f
it("should exclude low population rows when low population clicked", function (done) {
expect.screenshot("4_exclude_low_population").to.be.capture(function (page) {
- page.mouseMove('.tableConfiguration');
+ page.click('.dropdownConfigureIcon');
page.click('.dataTableExcludeLowPopulation');
}, done);
});
+ it("should show all available visualizations for this report", function (done) {
+ expect.screenshot("5_visualizations").to.be.captureSelector('.dataTableFooterIcons', function (page) {
+ page.click('.activateVisualizationSelection');
+ }, done);
+ });
+
it("should load goals table when goals footer icon clicked", function (done) {
expect.screenshot("5_goals").to.be.capture(function (page) {
page.click('.tableIcon[data-footer-icon-id=tableGoals]');
@@ -53,27 +60,28 @@ describe("ViewDataTableTest", function () { // TODO: should remove Test suffix f
it("should load bar graph when bar graph footer icon clicked", function (done) {
expect.screenshot('6_bar_graph').to.be.capture(function (page) {
- page.mouseMove('.tableIconsGroup:nth-child(3)');
+ page.click('.activateVisualizationSelection');
page.click('.tableIcon[data-footer-icon-id=graphVerticalBar]');
}, done);
});
it("should load pie graph when pie graph footer icon clicked", function (done) {
expect.screenshot('7_pie_graph').to.be.capture(function (page) {
- page.mouseMove('.tableIconsGroup:nth-child(2)');
+ page.click('.activateVisualizationSelection');
page.click('.tableIcon[data-footer-icon-id=graphPie]');
}, done);
});
it("should load a tag cloud when tag cloud footer icon clicked", function (done) {
expect.screenshot('8_tag_cloud').to.be.capture(function (page) {
- page.mouseMove('.tableIconsGroup:nth-child(3)');
+ page.click('.activateVisualizationSelection');
page.click('.tableIcon[data-footer-icon-id=cloud]');
}, done);
});
it("should load normal table when normal table footer icon clicked", function (done) {
expect.screenshot('9_normal_table').to.be.capture(function (page) {
+ page.click('.activateVisualizationSelection');
page.click('.tableIcon[data-footer-icon-id=table]');
page.mouseMove({x: -10, y: -10}); // mae sure no row is highlighted
}, done);
@@ -81,33 +89,35 @@ describe("ViewDataTableTest", function () { // TODO: should remove Test suffix f
it("should show the limit selector when the limit selector is clicked", function (done) {
expect.screenshot('limit_selector_open').to.be.capture(function (page) {
- page.click('.limitSelection');
+ page.click('.limitSelection input');
}, done);
});
it("should change the number of rows when new limit selected", function (done) {
expect.screenshot('10_change_limit').to.be.capture(function (page) {
- page.click('.limitSelection ul li[value=10]');
+ page.evaluate(function () {
+ $('.limitSelection ul li:contains(10):first span').click();
+ });
}, done);
});
it("should flatten the table when the flatten link is clicked", function (done) {
expect.screenshot('11_flattened').to.be.capture(function (page) {
- page.mouseMove('.tableConfiguration');
+ page.click('.dropdownConfigureIcon');
page.click('.dataTableFlatten');
}, done);
});
it("should show aggregate rows when the aggregate rows option is clicked", function (done) {
expect.screenshot('12_aggregate_shown').to.be.capture(function (page) {
- page.mouseMove('.tableConfiguration');
+ page.click('.dropdownConfigureIcon');
page.click('.dataTableIncludeAggregateRows');
}, done);
});
it("should make the report hierarchical when the flatten link is clicked again", function (done) {
expect.screenshot('13_make_hierarchical').to.be.capture(function (page) {
- page.mouseMove('.tableConfiguration');
+ page.click('.dropdownConfigureIcon');
page.click('.dataTableFlatten');
}, done);
});
@@ -127,14 +137,15 @@ describe("ViewDataTableTest", function () { // TODO: should remove Test suffix f
it("should search the table when a search string is entered and the search button clicked", function (done) {
expect.screenshot('15_search').to.be.capture(function (page) {
- page.sendKeys('.dataTableSearchPattern>input[type=text]', 'term');
- page.click('.dataTableSearchPattern>input[type=submit]');
+ page.click('.dataTableAction.searchAction');
+ page.sendKeys('.searchAction .dataTableSearchInput', 'term');
+ page.click('.searchAction .icon-search');
}, done);
});
it("should display the export options when clicking the export icon", function (done) {
expect.screenshot('export_options').to.be.capture(function (page) {
- page.click('.exportToFormatIcons', 2000);
+ page.click('.activateExportSelection');
}, done);
});
diff --git a/tests/lib/screenshot-testing/node_modules/jambalaya/package.json b/tests/lib/screenshot-testing/node_modules/jambalaya/package.json
new file mode 100644
index 0000000000..a67673982f
--- /dev/null
+++ b/tests/lib/screenshot-testing/node_modules/jambalaya/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "jambalaya",
+ "version": "1.3.0",
+ "description": "Configuration based IoC container for node.js.",
+ "main": "index.js",
+ "scripts": {
+ "test": "mocha tests"
+ },
+ "keywords": [
+ "ioc",
+ "di",
+ "dependency",
+ "injection",
+ "inversion",
+ "control",
+ "json"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/diosmosis/jambalaya.git"
+ },
+ "author": "diosmosis",
+ "license": "ISC",
+ "devDependencies": {
+ "mocha": "~2.1",
+ "chai": "~1.10"
+ }
+}
diff --git a/tests/lib/screenshot-testing/npm-debug.log b/tests/lib/screenshot-testing/npm-debug.log
new file mode 100644
index 0000000000..632b7d709b
--- /dev/null
+++ b/tests/lib/screenshot-testing/npm-debug.log
@@ -0,0 +1,165 @@
+0 info it worked if it ends with ok
+1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'install', 'jambalaya' ]
+2 info using npm@1.4.28
+3 info using node@v0.10.35
+4 verbose node symlink /usr/bin/node
+5 warn package.json screenshot-testing@1.0.0 No description
+6 warn package.json screenshot-testing@1.0.0 No repository field.
+7 warn package.json screenshot-testing@1.0.0 No README data
+8 warn package.json jambalaya@1.3.0 No README data
+9 verbose readDependencies using package.json deps
+10 verbose cache add [ 'jambalaya@^1.1.1', null ]
+11 verbose cache add name=undefined spec="jambalaya@^1.1.1" args=["jambalaya@^1.1.1",null]
+12 verbose parsed url { protocol: null,
+12 verbose parsed url slashes: null,
+12 verbose parsed url auth: null,
+12 verbose parsed url host: null,
+12 verbose parsed url port: null,
+12 verbose parsed url hostname: null,
+12 verbose parsed url hash: null,
+12 verbose parsed url search: null,
+12 verbose parsed url query: null,
+12 verbose parsed url pathname: 'jambalaya@^1.1.1',
+12 verbose parsed url path: 'jambalaya@^1.1.1',
+12 verbose parsed url href: 'jambalaya@^1.1.1' }
+13 verbose cache add name="jambalaya" spec="^1.1.1" args=["jambalaya","^1.1.1"]
+14 verbose parsed url { protocol: null,
+14 verbose parsed url slashes: null,
+14 verbose parsed url auth: null,
+14 verbose parsed url host: null,
+14 verbose parsed url port: null,
+14 verbose parsed url hostname: null,
+14 verbose parsed url hash: null,
+14 verbose parsed url search: null,
+14 verbose parsed url query: null,
+14 verbose parsed url pathname: '^1.1.1',
+14 verbose parsed url path: '^1.1.1',
+14 verbose parsed url href: '^1.1.1' }
+15 verbose addNamed [ 'jambalaya', '^1.1.1' ]
+16 verbose addNamed [ null, '>=1.1.1-0 <2.0.0-0' ]
+17 silly lockFile e060f6ec-jambalaya-1-1-1 jambalaya@^1.1.1
+18 verbose lock jambalaya@^1.1.1 /home/vagrant/.npm/e060f6ec-jambalaya-1-1-1.lock
+19 silly addNameRange { name: 'jambalaya',
+19 silly addNameRange range: '>=1.1.1-0 <2.0.0-0',
+19 silly addNameRange hasData: false }
+20 verbose request where is /jambalaya
+21 verbose request registry https://registry.npmjs.org/
+22 verbose request id ae0e1b127b7dd500
+23 verbose url raw /jambalaya
+24 verbose url resolving [ 'https://registry.npmjs.org/', './jambalaya' ]
+25 verbose url resolved https://registry.npmjs.org/jambalaya
+26 verbose request where is https://registry.npmjs.org/jambalaya
+27 info trying registry request attempt 1 at 02:19:21
+28 verbose etag "8Q4IN3LB4133SYEZ97HYQYJ9Q"
+29 http GET https://registry.npmjs.org/jambalaya
+30 http 304 https://registry.npmjs.org/jambalaya
+31 silly registry.get cb [ 304,
+31 silly registry.get { date: 'Wed, 08 Jul 2015 02:37:26 GMT',
+31 silly registry.get via: '1.1 varnish',
+31 silly registry.get 'cache-control': 'max-age=60',
+31 silly registry.get etag: '"8Q4IN3LB4133SYEZ97HYQYJ9Q"',
+31 silly registry.get age: '0',
+31 silly registry.get connection: 'keep-alive',
+31 silly registry.get 'x-served-by': 'cache-mel6523-MEL',
+31 silly registry.get 'x-cache': 'MISS',
+31 silly registry.get 'x-cache-hits': '0',
+31 silly registry.get 'x-timer': 'S1436323046.470491,VS0,VE956',
+31 silly registry.get vary: 'Accept' } ]
+32 verbose etag https://registry.npmjs.org/jambalaya from cache
+33 silly addNameRange number 2 { name: 'jambalaya', range: '>=1.1.1-0 <2.0.0-0', hasData: true }
+34 silly addNameRange versions [ 'jambalaya', [ '1.0.0', '1.1.0', '1.1.1', '1.2.0', '1.3.0' ] ]
+35 verbose addNamed [ 'jambalaya', '1.3.0' ]
+36 verbose addNamed [ '1.3.0', '1.3.0' ]
+37 silly lockFile 06897cd8-jambalaya-1-3-0 jambalaya@1.3.0
+38 verbose lock jambalaya@1.3.0 /home/vagrant/.npm/06897cd8-jambalaya-1-3-0.lock
+39 silly lockFile 06897cd8-jambalaya-1-3-0 jambalaya@1.3.0
+40 silly lockFile 06897cd8-jambalaya-1-3-0 jambalaya@1.3.0
+41 silly lockFile e060f6ec-jambalaya-1-1-1 jambalaya@^1.1.1
+42 silly lockFile e060f6ec-jambalaya-1-1-1 jambalaya@^1.1.1
+43 silly resolved [ { name: 'jambalaya',
+43 silly resolved version: '1.3.0',
+43 silly resolved description: 'Configuration based IoC container for node.js.',
+43 silly resolved main: 'index.js',
+43 silly resolved scripts: { test: 'mocha tests' },
+43 silly resolved keywords:
+43 silly resolved [ 'ioc',
+43 silly resolved 'di',
+43 silly resolved 'dependency',
+43 silly resolved 'injection',
+43 silly resolved 'inversion',
+43 silly resolved 'control',
+43 silly resolved 'json' ],
+43 silly resolved repository:
+43 silly resolved { type: 'git',
+43 silly resolved url: 'https://github.com/diosmosis/jambalaya.git' },
+43 silly resolved author: { name: 'diosmosis' },
+43 silly resolved license: 'ISC',
+43 silly resolved devDependencies: { mocha: '~2.1', chai: '~1.10' },
+43 silly resolved gitHead: '639c7d2809bfd5e0c0e7ea2ae0d49f4e36392876',
+43 silly resolved bugs: { url: 'https://github.com/diosmosis/jambalaya/issues' },
+43 silly resolved homepage: 'https://github.com/diosmosis/jambalaya',
+43 silly resolved _id: 'jambalaya@1.3.0',
+43 silly resolved _shasum: 'bd8ae7a157a9fba8f3cfad61185db14ba4f205b4',
+43 silly resolved _from: 'jambalaya@^1.1.1',
+43 silly resolved _npmVersion: '2.11.2',
+43 silly resolved _nodeVersion: '0.12.6',
+43 silly resolved _npmUser:
+43 silly resolved { name: 'diosmosis',
+43 silly resolved email: 'diosmosis@users.noreply.github.com' },
+43 silly resolved maintainers: [ [Object] ],
+43 silly resolved dist:
+43 silly resolved { shasum: 'bd8ae7a157a9fba8f3cfad61185db14ba4f205b4',
+43 silly resolved tarball: 'http://registry.npmjs.org/jambalaya/-/jambalaya-1.3.0.tgz' },
+43 silly resolved directories: {},
+43 silly resolved _resolved: 'https://registry.npmjs.org/jambalaya/-/jambalaya-1.3.0.tgz',
+43 silly resolved readme: 'ERROR: No README data found!' } ]
+44 info install jambalaya@1.3.0 into /home/vagrant/www/piwik/tests/lib/screenshot-testing
+45 info installOne jambalaya@1.3.0
+46 verbose node_modules/jambalaya unbuild
+47 info preuninstall jambalaya@1.3.0
+48 info uninstall jambalaya@1.3.0
+49 verbose true,/home/vagrant/www/piwik/tests/lib/screenshot-testing/node_modules,/home/vagrant/www/piwik/tests/lib/screenshot-testing/node_modules unbuild jambalaya@1.3.0
+50 info postuninstall jambalaya@1.3.0
+51 verbose tar unpack /home/vagrant/.npm/jambalaya/1.3.0/package.tgz
+52 silly lockFile e6a1e181-t-testing-node-modules-jambalaya tar:///home/vagrant/www/piwik/tests/lib/screenshot-testing/node_modules/jambalaya
+53 verbose lock tar:///home/vagrant/www/piwik/tests/lib/screenshot-testing/node_modules/jambalaya /home/vagrant/.npm/e6a1e181-t-testing-node-modules-jambalaya.lock
+54 silly lockFile dbf5b771--npm-jambalaya-1-3-0-package-tgz tar:///home/vagrant/.npm/jambalaya/1.3.0/package.tgz
+55 verbose lock tar:///home/vagrant/.npm/jambalaya/1.3.0/package.tgz /home/vagrant/.npm/dbf5b771--npm-jambalaya-1-3-0-package-tgz.lock
+56 silly gunzTarPerm modes [ '755', '644' ]
+57 silly gunzTarPerm extractEntry package.json
+58 silly gunzTarPerm modified mode [ 'package.json', 436, 420 ]
+59 silly gunzTarPerm extractEntry .npmignore
+60 silly gunzTarPerm modified mode [ '.npmignore', 436, 420 ]
+61 silly gunzTarPerm extractEntry README.md
+62 silly gunzTarPerm modified mode [ 'README.md', 436, 420 ]
+63 error Error: EPERM, chown '/home/vagrant/www/piwik/tests/lib/screenshot-testing/node_modules/jambalaya/package.json'
+63 error { [Error: EPERM, chown '/home/vagrant/www/piwik/tests/lib/screenshot-testing/node_modules/jambalaya/package.json']
+63 error errno: 50,
+63 error code: 'EPERM',
+63 error path: '/home/vagrant/www/piwik/tests/lib/screenshot-testing/node_modules/jambalaya/package.json',
+63 error fstream_finish_call: 'chown',
+63 error fstream_type: 'File',
+63 error fstream_path: '/home/vagrant/www/piwik/tests/lib/screenshot-testing/node_modules/jambalaya/package.json',
+63 error fstream_class: 'FileWriter',
+63 error fstream_stack:
+63 error [ '/usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:308:19',
+63 error '/usr/lib/node_modules/npm/node_modules/graceful-fs/polyfills.js:143:7',
+63 error 'Object.oncomplete (evalmachine.<anonymous>:108:15)' ] }
+64 error Please try running this command again as root/Administrator.
+65 error System Linux 3.13.0-37-generic
+66 error command "/usr/bin/node" "/usr/bin/npm" "install" "jambalaya"
+67 error cwd /home/vagrant/www/piwik/tests/lib/screenshot-testing
+68 error node -v v0.10.35
+69 error npm -v 1.4.28
+70 error path /home/vagrant/www/piwik/tests/lib/screenshot-testing/node_modules/jambalaya/package.json
+71 error fstream_path /home/vagrant/www/piwik/tests/lib/screenshot-testing/node_modules/jambalaya/package.json
+72 error fstream_type File
+73 error fstream_class FileWriter
+74 error fstream_finish_call chown
+75 error code EPERM
+76 error errno 50
+77 error stack Error: EPERM, chown '/home/vagrant/www/piwik/tests/lib/screenshot-testing/node_modules/jambalaya/package.json'
+78 error fstream_stack /usr/lib/node_modules/npm/node_modules/fstream/lib/writer.js:308:19
+78 error fstream_stack /usr/lib/node_modules/npm/node_modules/graceful-fs/polyfills.js:143:7
+78 error fstream_stack Object.oncomplete (evalmachine.<anonymous>:108:15)
+79 verbose exit [ 50, true ]
diff --git a/tests/lib/screenshot-testing/run-tests.js b/tests/lib/screenshot-testing/run-tests.js
index 6b1138066e..2e4879f0aa 100644
--- a/tests/lib/screenshot-testing/run-tests.js
+++ b/tests/lib/screenshot-testing/run-tests.js
@@ -32,6 +32,8 @@ require('./support/fs-extras');
phantom.injectJs('./support/globals.js');
+console.log('PhantomJS version: ' + phantom.version.major + '.' + phantom.version.minor + '.' + phantom.version.patch);
+
// make sure script works wherever it's executed from
require('fs').changeWorkingDirectory(__dirname);
diff --git a/tests/lib/screenshot-testing/support/chai-extras.js b/tests/lib/screenshot-testing/support/chai-extras.js
index e0b672bae0..e796d46903 100644
--- a/tests/lib/screenshot-testing/support/chai-extras.js
+++ b/tests/lib/screenshot-testing/support/chai-extras.js
@@ -11,6 +11,21 @@ var fs = require('fs'),
PageRenderer = require('./page-renderer.js').PageRenderer,
AssertionError = chai.AssertionError;
+var testsToIgnoreIfAborted = [];
+
+function shouldTestBeSkippedOnAbort(screenName){
+
+ for (var i in testsToIgnoreIfAborted) {
+ // we skip test if needed but still upload the screenshot for the diff just a few lines further up
+ if (testsToIgnoreIfAborted[i] + '.png' === screenName) {
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
// add screenshot keyword to `expect`
expect.screenshot = function (file, prefix) {
if (!prefix) {
@@ -133,6 +148,13 @@ function capture(screenName, compareAgainst, selector, pageSetupFn, comparisonTh
var indent = " ";
err.stack = err.message + "\n" + indent + getPageLogsString(pageRenderer.pageLogs, indent);
+ if (shouldTestBeSkippedOnAbort(screenName)) {
+ console.log('SKIPPING TEST ' + screenName + ' AS IT RANDOMLY GETS ABORTED:');
+ console.log(err.stack);
+ done();
+ return;
+ }
+
done(err);
return;
}
@@ -348,6 +370,11 @@ chai.Assertion.addChainableMethod('capture', function () {
capture(screenName, compareAgainst, null, pageSetupFn, comparisonThreshold, done);
});
+chai.Assertion.addChainableMethod('skippedOnAbort', function () {
+ var compareAgainst = this.__flags['object'];
+ testsToIgnoreIfAborted.push(compareAgainst);
+});
+
// add `contains` assertion
chai.Assertion.addChainableMethod('contains', function () {
var self = this,
diff --git a/tests/lib/screenshot-testing/support/page-renderer.js b/tests/lib/screenshot-testing/support/page-renderer.js
index 5c92abb276..34fca8c69c 100644
--- a/tests/lib/screenshot-testing/support/page-renderer.js
+++ b/tests/lib/screenshot-testing/support/page-renderer.js
@@ -241,12 +241,24 @@ PageRenderer.prototype._load = function (url, callback) {
var self = this;
this.webpage.open(url, function (status) {
+ if (VERBOSE) {
+ self._logMessage('Webpage open event');
+ }
+
self._isInitializing = false;
+ self._isLoading = false;
this.evaluate(function () {
var $ = window.jQuery;
+
if ($) {
$('html').addClass('uiTest');
+ $.fx.off = true;
+
+ var css = document.createElement('style');
+ css.type = 'text/css';
+ css.innerHTML = '* { -webkit-transition: none !important; transition: none !important; -webkit-animation: none !important; animation: none !important; }';
+ document.body.appendChild(css);
}
});
@@ -354,6 +366,10 @@ PageRenderer.prototype.capture = function (outputPath, callback, selector) {
return;
}
+ if (self.aborted) {
+ return false;
+ }
+
var result = page.evaluate(function(selector) {
var docWidth = $(document).width(),
docHeight = $(document).height();
@@ -431,12 +447,13 @@ PageRenderer.prototype.capture = function (outputPath, callback, selector) {
}
this._executeEvents(events, function () {
+
+ clearTimeout(timeout);
+
if (self.aborted) {
return;
}
- clearTimeout(timeout);
-
try {
if (outputPath) {
@@ -444,17 +461,30 @@ PageRenderer.prototype.capture = function (outputPath, callback, selector) {
// _setCorrectViewportSize might cause a re-render. We should wait for a while for the re-render to
// finish before capturing a screenshot to avoid possible random failures.
- var timeInMsToWaitForReRenderToFinish = 400;
+ var timeInMsToWaitForReRenderToFinish = 500;
setTimeout(function () {
var previousClipRect = self.webpage.clipRect;
- setClipRect(self.webpage, selector);
+ try {
+ if (self.aborted) {
+ return;
+ }
- self.webpage.render(outputPath);
- self._viewportSizeOverride = null;
- self.webpage.clipRect = previousClipRect;
+ setClipRect(self.webpage, selector);
- callback();
+ self.webpage.render(outputPath);
+ self._viewportSizeOverride = null;
+ self.webpage.clipRect = previousClipRect;
+
+ if (!self.aborted) {
+ callback();
+ }
+
+ } catch (e) {
+ if (previousClipRect) {
+ self.webpage.clipRect = previousClipRect;
+ }
+ }
}, timeInMsToWaitForReRenderToFinish);
@@ -463,7 +493,10 @@ PageRenderer.prototype.capture = function (outputPath, callback, selector) {
}
} catch (e) {
- self.webpage.clipRect = previousClipRect;
+
+ if (self.aborted) {
+ return;
+ }
callback(e);
}
@@ -479,7 +512,7 @@ PageRenderer.prototype._executeEvents = function (events, callback, i) {
i = i || 0;
var evt = events[i];
- if (!evt) {
+ if (!evt || this.aborted) {
callback();
return;
}
@@ -581,6 +614,10 @@ PageRenderer.prototype._getImageLoadingCount = function () {
PageRenderer.prototype._waitForNextEvent = function (events, callback, i, waitTime) {
+ if (this.aborted) {
+ return;
+ }
+
function hasPendingResources(self)
{
function isEmpty(obj) {
@@ -608,6 +645,12 @@ PageRenderer.prototype._waitForNextEvent = function (events, callback, i, waitTi
var self = this;
setTimeout(function () {
+ if (self.aborted) {
+ // call execute events one more time so it can trigger its callback and finish the test
+ self._executeEvents(events, callback, i + 1);
+ return;
+ }
+
if (!self._isLoading && !self._isInitializing && !self._isNavigationRequested && !hasPendingResources(self)) {
self._executeEvents(events, callback, i + 1);
} else {
@@ -739,21 +782,36 @@ PageRenderer.prototype._setupWebpageEvents = function () {
};
this.webpage.onLoadStarted = function () {
+ if (VERBOSE) {
+ self._logMessage('onLoadStarted');
+ }
+
self._isInitializing = false;
self._isLoading = true;
};
this.webpage.onPageCreated = function onPageCreated(popupPage) {
+ if (VERBOSE) {
+ self._logMessage('onPageCreated');
+ }
+
popupPage.onLoadFinished = function onLoadFinished() {
self._isNavigationRequested = false;
};
};
this.webpage.onUrlChanged = function onUrlChanged(url) {
+ if (VERBOSE) {
+ self._logMessage('onUrlChanged: ' + url);
+ }
self._isNavigationRequested = false;
};
this.webpage.onNavigationRequested = function (url, type, willNavigate, isMainFrame) {
+ if (VERBOSE) {
+ self._logMessage('onNavigationRequested: ' + url);
+ }
+
self._isInitializing = false;
if (isMainFrame && self._requestedUrl !== url && willNavigate) {
@@ -778,6 +836,8 @@ PageRenderer.prototype._setupWebpageEvents = function () {
this.webpage.onLoadFinished = function (status) {
if (status !== 'success' && VERBOSE) {
self._logMessage('Page did not load successfully (it could be on purpose if a tests wants to test this behaviour): ' + status);
+ } else if (VERBOSE) {
+ self._logMessage('onLoadFinished: ' + status);
}
self._isInitializing = false;
diff --git a/tests/resources/OmniFixture-dump.sql b/tests/resources/OmniFixture-dump.sql
index 521614f11a..1f7542fcbb 100644
--- a/tests/resources/OmniFixture-dump.sql
+++ b/tests/resources/OmniFixture-dump.sql
@@ -739,6 +739,21 @@ LOCK TABLES `site_setting` WRITE;
UNLOCK TABLES;
--
+-- Table structure for table `plugin_setting`
+--
+
+DROP TABLE IF EXISTS `plugin_setting`;
+CREATE TABLE `plugin_setting` (
+ `plugin_name` varchar(60) NOT NULL,
+ `setting_name` varchar(255) NOT NULL,
+ `setting_value` longtext NOT NULL,
+ `user_login` varchar(100) NOT NULL DEFAULT '',
+ PRIMARY KEY (`plugin_name`,`setting_name`,`user_login`),
+ INDEX(plugin_name, user_login)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+
+--
-- Table structure for table `site_url`
--
diff --git a/tests/resources/overlay-test-site/index.html b/tests/resources/overlay-test-site/index.html
index 27517450b0..9d2673a425 100644
--- a/tests/resources/overlay-test-site/index.html
+++ b/tests/resources/overlay-test-site/index.html
@@ -65,7 +65,7 @@
<h1>Navbar example</h1>
<p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p>
<p>
- <a class="btn btn-lg btn-primary" href="page-3.html" role="button">Big Button.</a>
+ <a class="btn btn-large btn-primary" href="page-3.html" role="button">Big Button.</a>
</p>
</div>
diff --git a/tests/resources/screenshot-override/override.css b/tests/resources/screenshot-override/override.css
index 1e746d1d5d..111b83f73c 100644
--- a/tests/resources/screenshot-override/override.css
+++ b/tests/resources/screenshot-override/override.css
@@ -14,6 +14,10 @@ span.plugin-version {
visibility:hidden;
}
+.realTimeMap_datetime {
+ visibility: hidden;
+}
+
/* add some space around the segment editor & other controls so screenshots are clearer */
.widget>.segmentEditorPanel, .widget>.dashboardSettings, .widget>.sites_autocomplete, .widget>.periodSelector {
margin-top:1em;
@@ -29,15 +33,6 @@ body > .widget {
overflow-y: hidden !important;
}
-/* Verdana does not have the down arrow U+2193 */
-.dashboard-manager .addWidget, .dashboard-manager .manageDashboard {
- font-family: Arial !important;
-}
-
-#logo .description a {
- font-family: Arial !important;
-}
-
.providerDescription {
border-style: solid;
}
@@ -45,4 +40,11 @@ body > .widget {
/* do not display RSS feed widget's contents */
#widgetExampleRssWidgetrssPiwik .rss {
display:none;
+}
+
+body * {
+ -webkit-transition: none !important;
+ transition: none !important;
+ -webkit-animation: none !important;
+ animation: none !important;
} \ No newline at end of file
diff --git a/tests/resources/screenshot-override/override.js b/tests/resources/screenshot-override/override.js
index 054ff13de3..37971a600b 100644
--- a/tests/resources/screenshot-override/override.js
+++ b/tests/resources/screenshot-override/override.js
@@ -2,4 +2,6 @@ $(document).ready(function () {
$('.ui-inline-help:contains(UTC time is)').hide();
$('[notification-id=ControllerAdmin_HttpIsUsed]').hide();
+
+ $.fx.off = true;
}); \ No newline at end of file
diff --git a/tests/travis b/tests/travis
-Subproject 2551892dc296f1abc500acf7b04380689a64588
+Subproject 41e9efcb897239ed1fd899a4e29b5888a008213