summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwinh <winnie@gitlab.com>2017-05-15 14:06:07 +0200
committerwinh <winnie@gitlab.com>2017-05-18 20:04:30 +0200
commitc45c74fdac5a3b23a54541b4937501fffe3ca632 (patch)
tree23eae8d111ef49357c9ab3e232b5fb1adda1e129
parent7fb996979f8b399c4a72d65c50fe071c2f7190e1 (diff)
downloadgitlab-ce-winh-frontend-api-users.tar.gz
Add users endpoint to frontend API class (!11374)winh-frontend-api-users
-rw-r--r--app/assets/javascripts/api.js26
-rw-r--r--spec/javascripts/api_spec.js25
2 files changed, 51 insertions, 0 deletions
diff --git a/app/assets/javascripts/api.js b/app/assets/javascripts/api.js
index 506b2cd6fe2..6680834a8d1 100644
--- a/app/assets/javascripts/api.js
+++ b/app/assets/javascripts/api.js
@@ -137,6 +137,18 @@ const Api = {
.error(callback);
},
+ users(query, options) {
+ const url = Api.buildUrl(this.usersPath);
+ return Api.wrapAjaxCall({
+ url,
+ data: Object.assign({
+ search: query,
+ per_page: 20,
+ }, options),
+ dataType: 'json',
+ });
+ },
+
buildUrl(url) {
let urlRoot = '';
if (gon.relative_url_root != null) {
@@ -144,6 +156,20 @@ const Api = {
}
return urlRoot + url.replace(':version', gon.api_version);
},
+
+ wrapAjaxCall(options) {
+ return new Promise((resolve, reject) => {
+ // jQuery 2 is not Promises/A+ compatible (missing catch)
+ $.ajax(options) // eslint-disable-line promise/catch-or-return
+ .then(data => resolve(data),
+ (jqXHR, textStatus, errorThrown) => {
+ const error = new Error(`${options.url}: ${errorThrown}`);
+ error.textStatus = textStatus;
+ reject(error);
+ },
+ );
+ });
+ },
};
export default Api;
diff --git a/spec/javascripts/api_spec.js b/spec/javascripts/api_spec.js
index 1b2ec24fd29..867322ce8ae 100644
--- a/spec/javascripts/api_spec.js
+++ b/spec/javascripts/api_spec.js
@@ -253,4 +253,29 @@ describe('Api', () => {
});
});
});
+
+ describe('users', () => {
+ it('fetches users', (done) => {
+ const query = 'dummy query';
+ const options = { unused: 'option' };
+ const expectedUrl = `${dummyUrlRoot}/api/${dummyApiVersion}/users.json`;
+ const expectedData = Object.assign({
+ search: query,
+ per_page: 20,
+ }, options);
+ spyOn(jQuery, 'ajax').and.callFake((request) => {
+ expect(request.url).toEqual(expectedUrl);
+ expect(request.dataType).toEqual('json');
+ expect(request.data).toEqual(expectedData);
+ return sendDummyResponse();
+ });
+
+ Api.users(query, options)
+ .then((response) => {
+ expect(response).toBe(dummyResponse);
+ })
+ .then(done)
+ .catch(done.fail);
+ });
+ });
});