diff options
author | diosmosis <benaka@piwik.pro> | 2014-09-13 03:01:08 +0400 |
---|---|---|
committer | diosmosis <benaka@piwik.pro> | 2014-09-13 03:01:08 +0400 |
commit | 07291cd4a383a8ccc396a5350563e70be1a7a1e7 (patch) | |
tree | 761f9feddff66be3b59c338f6e69660aa2f3c3bd | |
parent | bec9ce27240da74f9b968f0fa8f9fe641f6e691d (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.js | 32 | ||||
-rw-r--r-- | plugins/CoreHome/angularjs/common/services/piwik-api_spec.js | 37 |
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 |