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
diff options
context:
space:
mode:
authordiosmosis <benaka@piwik.pro>2014-09-13 03:01:08 +0400
committerdiosmosis <benaka@piwik.pro>2014-09-13 03:01:08 +0400
commit07291cd4a383a8ccc396a5350563e70be1a7a1e7 (patch)
tree761f9feddff66be3b59c338f6e69660aa2f3c3bd
parentbec9ce27240da74f9b968f0fa8f9fe641f6e691d (diff)
Fix bug in setting of POST params in piwikApi angularjs object, add new bulkFetch method to piwikApi object and add tests for it.
-rw-r--r--plugins/CoreHome/angularjs/common/services/piwik-api.js32
-rw-r--r--plugins/CoreHome/angularjs/common/services/piwik-api_spec.js37
2 files changed, 64 insertions, 5 deletions
diff --git a/plugins/CoreHome/angularjs/common/services/piwik-api.js b/plugins/CoreHome/angularjs/common/services/piwik-api.js
index bd5cfee4a2..6262564248 100644
--- a/plugins/CoreHome/angularjs/common/services/piwik-api.js
+++ b/plugins/CoreHome/angularjs/common/services/piwik-api.js
@@ -125,10 +125,9 @@ angular.module('piwikApp.service').factory('piwikApi', function ($http, $q, $roo
* @return {object}
* @private
*/
- function getPostParams () {
- return {
- token_auth: piwik.token_auth
- };
+ function getPostParams (params) {
+ params.token_auth = piwik.token_auth;
+ return params;
}
/**
@@ -212,5 +211,28 @@ angular.module('piwikApp.service').factory('piwikApi', function ($http, $q, $roo
return this.fetch(getParams);
};
+ /**
+ * Convenience method that will perform a bulk request using Piwik's API.getBulkRequest method.
+ * Bulk requests allow you to execute multiple Piwik requests with one HTTP request.
+ *
+ * @param {object[]} requests
+ * @return {HttpPromise} a promise that is resolved when the request finishes. The argument passed
+ * to the .then(...) callback will be an array with one element per request
+ * made.
+ */
+ piwikApi.bulkFetch = function (requests) {
+ var bulkApiRequestParams = {
+ urls: requests.map(function (requestObj) { return '?' + $.param(requestObj); })
+ };
+
+ return this.post({method: "API.getBulkRequest"}, bulkApiRequestParams).then(function (response) {
+ if (!(response instanceof Array)) {
+ response = [response];
+ }
+
+ return response;
+ });
+ };
+
return piwikApi;
-});
+}); \ No newline at end of file
diff --git a/plugins/CoreHome/angularjs/common/services/piwik-api_spec.js b/plugins/CoreHome/angularjs/common/services/piwik-api_spec.js
index fecf56cde8..803cfa30e7 100644
--- a/plugins/CoreHome/angularjs/common/services/piwik-api_spec.js
+++ b/plugins/CoreHome/angularjs/common/services/piwik-api_spec.js
@@ -19,6 +19,17 @@ describe('piwikApiClient', function () {
$httpBackend = $injector.get('$httpBackend');
+ $httpBackend.when('POST', /.*getBulkRequest.*/).respond(function (method, url, data, headers) {
+ url = url.replace(/date=[^&]+/, "date=");
+
+ var responses = [
+ "Response #1: " + url + " - " + data,
+ "Response #2: " + url + " - " + data
+ ];
+
+ return [200, JSON.stringify(responses)];
+ });
+
$httpBackend.when('POST', /.*/).respond(function (method, url, data, headers) {
url = url.replace(/date=[^&]+/, "date=");
return [200, "Request url: " + url];
@@ -185,4 +196,30 @@ describe('piwikApiClient', function () {
$httpBackend.flush();
});
+
+ 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) {
+ var restOfExpected = "index.php?date=&format=JSON2&idSite=1&method=API.getBulkRequest&" +
+ "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);
+
+ done();
+ }).catch(function (ex) {
+ done(ex);
+ });
+
+ $httpBackend.flush();
+ });
}); \ No newline at end of file