Skip to content
Extraits de code Groupes Projets
Valider bba1420d rédigé par diosmosis's avatar diosmosis
Parcourir les fichiers

Refs #4739, allow JavaScript screenshot tests to override Piwik behavior by...

Refs #4739, allow JavaScript screenshot tests to override Piwik behavior by storing values in tmp/ file, add hook so plugins can setup their own test environment, reset user password on test fixture setup.
parent 498b740d
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -31,7 +31,8 @@ class Live extends \Piwik\Plugin
'WidgetsList.addWidgets' => 'addWidget',
'Menu.Reporting.addItems' => 'addMenu',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
'ViewDataTable.getDefaultType' => 'getDefaultTypeViewDataTable'
'ViewDataTable.getDefaultType' => 'getDefaultTypeViewDataTable',
'TestingEnvironment.addHooks' => 'addTestHooks'
);
}
......@@ -74,4 +75,9 @@ class Live extends \Piwik\Plugin
{
$defaultViewTypes['Live.getLastVisitsDetails'] = VisitorLog::ID;
}
}
public function addTestHooks($testingEnvironment)
{
$_GET['visitorId'] = $testingEnvironment->forcedIdVisitor;
}
}
\ No newline at end of file
Subproject commit cd98a60c785ce56b45e4d142e9af3a470619a60b
Subproject commit f9aabdf4a4112b3c0505257978435dcee4039471
......@@ -53,6 +53,7 @@ class UserCountryMap extends \Piwik\Plugin
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'Menu.Reporting.addItems' => 'addMenu',
'TestingEnvironment.addHooks' => 'addTestHooks'
);
return $hooks;
}
......@@ -78,4 +79,9 @@ class UserCountryMap extends \Piwik\Plugin
$stylesheets[] = "plugins/UserCountryMap/stylesheets/visitor-map.less";
$stylesheets[] = "plugins/UserCountryMap/stylesheets/realtime-map.less";
}
public function addTestHooks($testingEnvironment)
{
$_GET['forceNowValue'] = $testingEnvironment->forcedNowTimestamp;
}
}
......@@ -65,7 +65,7 @@ class Fixture extends PHPUnit_Framework_Assert
public $configureComponents = true;
public $persistFixtureData = false;
public $testOptions = array();
public $testEnvironment = null;
/** Adds data to Piwik. Creates sites, tracks visits, imports log files, etc. */
public function setUp()
......@@ -81,6 +81,8 @@ class Fixture extends PHPUnit_Framework_Assert
public function performSetUp($testCase, $setupEnvironmentOnly = false)
{
$this->testEnvironment = new Piwik_TestingEnvironment();
try {
\Piwik\SettingsPiwik::$piwikUrlCache = '';
......@@ -179,9 +181,7 @@ class Fixture extends PHPUnit_Framework_Assert
echo "Using existing database {$this->dbName}.";
}
foreach ($this->testOptions as $key => $value) {
Option::set("Tests." . $key, $value);
}
$this->testEnvironment->save();
}
public function isFixtureSetUp()
......@@ -198,8 +198,6 @@ class Fixture extends PHPUnit_Framework_Assert
public function performTearDown()
{
Option::deleteLike("Tests.%");
$this->tearDown();
\Piwik\SettingsPiwik::$piwikUrlCache = null;
......@@ -444,6 +442,8 @@ class Fixture extends PHPUnit_Framework_Assert
if (empty($user)) {
$model->addUser($login, $password, 'hello@example.org', $login, $token, Date::now()->getDatetime());
} else {
$model->updateUser($login, $password, 'hello@example.org', $login, $token);
}
if (empty($user['superuser_access'])) {
......
......@@ -76,11 +76,6 @@ class OmniFixture extends \Fixture
foreach ($this->fixtures as $name => $fixture) {
$fixture->setUp();
}
$this->visitorIdDeterministic = bin2hex(\Piwik\Db::fetchOne(
"SELECT idvisitor FROM " . \Piwik\Common::prefixTable('log_visit')
. " WHERE idsite = 2 AND location_latitude IS NOT NULL LIMIT 1"));
}
public function tearDown()
......
......@@ -12,6 +12,8 @@ use Piwik\Plugins\UsersManager\API as UsersManagerAPI;
use Piwik\Plugins\VisitsSummary\API as VisitsSummaryAPI;
use Piwik\AssetManager;
use Piwik\Date;
use Piwik\Common;
use Piwik\Db;
/**
* Fixture for UI tests.
......@@ -26,7 +28,14 @@ class UITestFixture extends OmniFixture
UsersManagerAPI::getInstance()->setSuperUserAccess('superUserLogin', true);
AssetManager::getInstance()->removeMergedAssets();
$this->testingEnvironment->forcedNowTimestamp = $this->now->getTimestamp();
$visitorIdDeterministic = bin2hex(Db::fetchOne(
"SELECT idvisitor FROM " . Common::prefixTable('log_visit')
. " WHERE idsite = 2 AND location_latitude IS NOT NULL LIMIT 1"));
$this->testingEnvironment->forcedIdVisitor = $visitorIdDeterministic;
// launch archiving so tests don't run out of time
$date = Date::factory($this->dateTime)->toString();
VisitsSummaryAPI::getInstance()->get($this->idSite, 'year', $date);
......
......@@ -2,7 +2,6 @@
use Piwik\Piwik;
use Piwik\Config;
use Piwik\Option;
use Piwik\Common;
use Piwik\Session\SessionNamespace;
......@@ -41,10 +40,38 @@ class Piwik_MockAccess
*/
class Piwik_TestingEnvironment
{
private $behaviorOverrideProperties = array();
public function __construct()
{
$overridePath = PIWIK_INCLUDE_PATH . '/tmp/testingPathOverride.json';
if (file_exists($overridePath)) {
$this->behaviorOverrideProperties = json_decode(file_get_contents($overridePath), true);
}
}
public function __get($key)
{
return isset($this->behaviorOverrideProperties[$key]) ? $this->behaviorOverrideProperties[$key] : null;
}
public function __set($key, $value)
{
$this->behaviorOverrideProperties[$key] = $value;
}
public function save()
{
$overridePath = PIWIK_INCLUDE_PATH . '/tmp/testingPathOverride.json';
file_put_contents($overridePath, json_encode($this->behaviorOverrideProperties));
}
public static function addHooks()
{
Piwik::addAction('Access.createAccessSingleton', function($access) {
if (empty(Option::get('Tests.testUseRegularAuth'))) {
$testingEnvironment = new Piwik_TestingEnvironment();
Piwik::addAction('Access.createAccessSingleton', function($access) use ($testingEnvironment) {
if (!$testingEnvironment->testUseRegularAuth) {
$access = new Piwik_MockAccess($access);
\Piwik\Access::setSingletonInstance($access);
}
......@@ -71,10 +98,6 @@ class Piwik_TestingEnvironment
Piwik::addAction('AssetManager.getStylesheetFiles', function(&$stylesheets) {
$stylesheets[] = 'tests/resources/screenshot-override/override.css';
});
Piwik::addAction('AssetManager.getJavaScriptFiles', function(&$jsFiles) {
$jsFiles[] = 'tests/resources/screenshot-override/jquery.waitforimages.js';
$jsFiles[] = 'tests/resources/screenshot-override/override.js';
});
Piwik::addAction('Test.Mail.send', function($mail) {
$outputFile = PIWIK_INCLUDE_PATH . 'tmp/' . Common::getRequestVar('module') . '.' . Common::getRequestVar('action') . '.mail.json';
......@@ -91,5 +114,7 @@ class Piwik_TestingEnvironment
file_put_contents($outputFile, Common::json_encode($outputContents));
});
Piwik::postEvent("TestingEnvironment.addHooks", $testingEnvironment); // for plugins that need to inject special testing logic
}
}
\ No newline at end of file
Subproject commit 1fb30650d8152bc6df694fac7920083e4a50b7cf
Subproject commit 069f9242f8bf9f3ed3b6747d4ba962de2b9cd98b
......@@ -39,6 +39,7 @@ require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/DatabaseTestCase.php';
require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/IntegrationTestCase.php';
require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/FakeAccess.php';
require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/MockPiwikOption.php';
require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/TestingEnvironment.php';
require_once file_exists(PIWIK_INCLUDE_PATH . '/vendor/autoload.php')
? PIWIK_INCLUDE_PATH . '/vendor/autoload.php' // Piwik is the main project
: PIWIK_INCLUDE_PATH . '/../../autoload.php'; // Piwik is installed as a dependency
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter