Skip to content
Extraits de code Groupes Projets
Valider 6f6a2a9b rédigé par Thomas Steur's avatar Thomas Steur
Parcourir les fichiers

When Piwik DB needs to be upgraded, the API should return a valid response

parent 0841a4c8
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -10,6 +10,7 @@ namespace Piwik\Plugins\CoreUpdater;
use Exception;
use Piwik\Access;
use Piwik\API\ResponseBuilder;
use Piwik\Common;
use Piwik\Filesystem;
use Piwik\FrontController;
......@@ -73,6 +74,15 @@ class CoreUpdater extends \Piwik\Plugin
if (FrontController::shouldRethrowException()) {
throw new Exception("Piwik and/or some plugins have been upgraded to a new version. \n" .
"--> Please run the update process first. See documentation: http://piwik.org/docs/update/ \n");
} elseif ($module === 'API') {
$outputFormat = strtolower(Common::getRequestVar('format', 'xml', 'string', $_GET + $_POST));
$response = new ResponseBuilder($outputFormat);
$e = new Exception('Database Upgrade Required. Your Piwik database is out-of-date, and must be upgraded before you can continue.');
echo $response->getResponseException($e);
Common::sendResponseCode(503);
exit;
} else {
Piwik::redirectToModule('CoreUpdater');
}
......
......@@ -17,6 +17,18 @@ describe("CoreUpdaterDb", function () {
testEnvironment.save();
});
function apiUpgradeTest(format) {
it("should start the updater when an old version of Piwik is detected in the DB", function (done) {
expect.file('CoreUpdater.API.ErrorMessage' + format + '.txt').to.be.pageContents(function (page) {
page.load('');
page.downloadUrl('?module=API&method=API.getPiwikVersion&format=' + format);
}, done);
});
}
var formats = ['CSV', 'TSV', 'XML', 'JSON', 'PHP'];
formats.forEach(apiUpgradeTest);
it("should start the updater when an old version of Piwik is detected in the DB", function (done) {
expect.screenshot("main").to.be.capture(function (page) {
page.load("");
......
......@@ -114,6 +114,10 @@ PageRenderer.prototype.downloadLink = function (selector, waitTime) {
this.queuedEvents.push([this._downloadLink, waitTime, selector]);
};
PageRenderer.prototype.downloadUrl = function (url, waitTime) {
this.queuedEvents.push([this._downloadUrl, waitTime, url]);
};
PageRenderer.prototype.dragDrop = function (startSelector, endSelector, waitTime) {
this.mousedown(startSelector, waitTime);
this.mouseMove(endSelector, waitTime);
......@@ -220,16 +224,23 @@ PageRenderer.prototype._evaluate = function (impl, callback) {
};
PageRenderer.prototype._downloadLink = function (str, callback) {
var response = this.webpage.evaluate(function (selector) {
var $ = window.jQuery,
url = $(selector).attr('href');
var url = this.webpage.evaluate(function (selector) {
return $(selector).attr('href');
}, str);
this._downloadUrl(url, callback);
};
PageRenderer.prototype._downloadUrl = function (url, callback) {
var response = this.webpage.evaluate(function (url) {
var $ = window.jQuery;
return $.ajax({
type: "GET",
url: url,
async: false
}).responseText;
}, str);
}, url);
this.downloadedContents = response;
......
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