Newer
Older
/*!
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
Thomas Steur
a validé
(function () {
describe('piwikApiClient', function () {
var piwikApi,
$httpBackend;
if (!window.piwik) window.piwik = {};
if (!window.piwik.UI) window.piwik.UI = {};
if (!window.piwik.UI.Notification) {
window.piwik.UI.Notification = function () {
this.show = function () {};
this.scrollToNotification = function () {};
return this;
};
}
Thomas Steur
a validé
beforeEach(module('piwikApp.service'));
beforeEach(inject(function($injector) {
piwikApi = $injector.get('piwikApi');
Thomas Steur
a validé
$httpBackend = $injector.get('$httpBackend');
Thomas Steur
a validé
$httpBackend.when('POST', /.*getBulkRequest.*/, /.*errorAction.*/).respond(function (method, url, data, headers) {
url = url.replace(/date=[^&]+/, "date=");
Thomas Steur
a validé
var errorResponse = {result: 'error', message: "error message"},
successResponse= "Response #2: " + url + " - " + data;
Thomas Steur
a validé
return [200, [errorResponse, successResponse]];
});
Thomas Steur
a validé
$httpBackend.when('POST', /.*getBulkRequest.*/).respond(function (method, url, data, headers) {
url = url.replace(/date=[^&]+/, "date=");
Thomas Steur
a validé
var responses = [
"Response #1: " + url + " - " + data,
"Response #2: " + url + " - " + data
];
Thomas Steur
a validé
return [200, JSON.stringify(responses)];
});
Thomas Steur
a validé
$httpBackend.when('POST', /.*/).respond(function (method, url, data, headers) {
url = url.replace(/date=[^&]+/, "date=");
return [200, "Request url: " + url];
});
}));
Thomas Steur
a validé
it("should successfully send a request to Piwik when fetch is called", function (done) {
piwikApi.fetch({
method: "SomePlugin.action"
}).then(function (response) {
Matthieu Aubry
a validé
expect(response).to.equal("Request url: index.php?date=&format=JSON&idSite=1&method=SomePlugin.action&module=API&period=day");
Thomas Steur
a validé
done();
}).catch(function (ex) {
done(ex);
});
Thomas Steur
a validé
$httpBackend.flush();
});
Thomas Steur
a validé
it("should chain multiple then callbacks correctly when a fetch succeeds", function (done) {
var firstThenDone = false;
Thomas Steur
a validé
piwikApi.fetch({
method: "SomePlugin.action"
}).then(function (response) {
firstThenDone = true;
Thomas Steur
a validé
return "newval";
}).then(function (response) {
expect(firstThenDone).to.equal(true);
expect(response).to.equal("newval");
Thomas Steur
a validé
done();
}).catch(function (ex) {
done(ex);
});
Thomas Steur
a validé
$httpBackend.flush();
it("should fail when multiple aborts are issued", function (done) {
Thomas Steur
a validé
var request = piwikApi.fetch({
method: "SomePlugin.action"
}).then(function (response) {
done(new Error("Aborted request succeeded but should fail!"));
Thomas Steur
a validé
}).catch(function (ex) {
Thomas Steur
a validé
});
Thomas Steur
a validé
request.abort();
request.abort();
Thomas Steur
a validé
$httpBackend.flush();
Thomas Steur
a validé
request.abort();
});
Thomas Steur
a validé
it("should send multiple requests concurrently when fetch is called more than once", function (done) {
var request1Done, request2Done;
Thomas Steur
a validé
function finishIfBothDone() {
if (request1Done && request2Done) {
done();
}
}
Thomas Steur
a validé
piwikApi.fetch({
method: "SomePlugin.action"
}).then(function (response) {
Matthieu Aubry
a validé
expect(response).to.equal("Request url: index.php?date=&format=JSON&idSite=1&method=SomePlugin.action&module=API&period=day");
Thomas Steur
a validé
request1Done = true;
Thomas Steur
a validé
finishIfBothDone();
}).catch(function (ex) {
done(ex);
});
Thomas Steur
a validé
piwikApi.fetch({
method: "SomeOtherPlugin.action"
}).then(function (response) {
Matthieu Aubry
a validé
expect(response).to.equal("Request url: index.php?date=&format=JSON&idSite=1&method=SomeOtherPlugin.action&module=API&period=day");
Thomas Steur
a validé
request2Done = true;
Thomas Steur
a validé
finishIfBothDone();
}).catch(function (ex) {
done(ex);
});
Thomas Steur
a validé
$httpBackend.flush();
});
Thomas Steur
a validé
it("should abort individual requests when abort() is called on a promise", function (done) {
var request1Done, request2Done;
Thomas Steur
a validé
function finishIfBothDone() {
if (request1Done && request2Done) {
done();
}
}
Thomas Steur
a validé
var request = piwikApi.fetch({
method: "SomePlugin.waitAction"
}).then(function (response) {
done(new Error("Aborted request finished!"));
}).catch(function (ex) {
request1Done = true;
finishIfBothDone();
});
piwikApi.fetch({
method: "SomeOtherPlugin.action"
}).then(function (response) {
Matthieu Aubry
a validé
expect(response).to.equal("Request url: index.php?date=&format=JSON&idSite=1&method=SomeOtherPlugin.action&module=API&period=day");
Thomas Steur
a validé
request2Done = true;
Thomas Steur
a validé
finishIfBothDone();
}).catch(function (ex) {
done(ex);
});
Thomas Steur
a validé
request.abort();
Thomas Steur
a validé
$httpBackend.flush();
});
Thomas Steur
a validé
it("should abort all requests when abortAll() is called on the piwikApi", function (done) {
var request1Done, request2Done;
Thomas Steur
a validé
function finishIfBothDone() {
if (request1Done && request2Done) {
done();
}
}
Thomas Steur
a validé
piwikApi.fetch({
method: "SomePlugin.waitAction"
}).then(function (response) {
done(new Error("Aborted request finished (request 1)!"));
}).catch(function (ex) {
request1Done = true;
finishIfBothDone();
});
piwikApi.fetch({
method: "SomePlugin.waitAction"
}).then(function (response) {
done(new Error("Aborted request finished (request 2)!"));
}).catch(function (ex) {
request2Done = true;
finishIfBothDone();
});
piwikApi.abortAll();
$httpBackend.flush();
});
Thomas Steur
a validé
it("should perform a bulk request correctly when bulkFetch is called on the piwikApi", function (done) {
piwikApi.bulkFetch([
{
method: "SomePlugin.action",
param: "value"
},
{
method: "SomeOtherPlugin.action"
}
]).then(function (response) {
Matthieu Aubry
a validé
var restOfExpected = "index.php?date=&format=JSON&idSite=1&method=API.getBulkRequest&" +
Thomas Steur
a validé
"module=API&period=day - urls%5B%5D=%3Fmethod%3DSomePlugin.action%26param%3D" +
"value&urls%5B%5D=%3Fmethod%3DSomeOtherPlugin.action&token_auth=100bf5eeeed1468f3f9d93750044d3dd";
expect(response.length).to.equal(2);
expect(response[0]).to.equal("Response #1: " + restOfExpected);
expect(response[1]).to.equal("Response #2: " + restOfExpected);
Thomas Steur
a validé
done();
}).catch(function (ex) {
done(ex);
});
Thomas Steur
a validé
$httpBackend.flush();
});
Thomas Steur
a validé
it("should correctly handle errors in a bulk request response", function (done) {
piwikApi.bulkFetch([
{
method: "SomePlugin.errorAction"
},
{
method: "SomeOtherPlugin.whatever"
}
]).then(function (response) {
done(new Error("promise resolved after bulkFetch request returned an error (response = " + JSON.stringify(response) + ")"));
}).catch(function (error) {
expect(error).to.equal("error message");
Thomas Steur
a validé
done();
});
Thomas Steur
a validé
$httpBackend.flush();
});
Thomas Steur
a validé
it("shuld correctly handle errors in a bulk request response, regardless of error location", function (done) {
piwikApi.bulkFetch([
{
method: "SomeOtherPlugin.whatever"
},
{
method: "SomePlugin.errorAction"
}
]).then(function (response) {
done(new Error("promise resolved after bulkFetch request returned an error (response = " + JSON.stringify(response) + ")"));
}).catch(function (error) {
expect(error).to.equal("error message");
Thomas Steur
a validé
done();
});
Thomas Steur
a validé
$httpBackend.flush();
});
});