From c8c239e968992729ef9a784a3f743dd5ba25d6a8 Mon Sep 17 00:00:00 2001 From: Rafael Kellermann Streit Date: Thu, 25 Jan 2018 18:02:20 -0500 Subject: [PATCH 1/6] Add a new API to use spotlight method from Meteor --- packages/rocketchat-api/package.js | 1 + packages/rocketchat-api/server/v1/spotlight.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 packages/rocketchat-api/server/v1/spotlight.js diff --git a/packages/rocketchat-api/package.js b/packages/rocketchat-api/package.js index 859ca35ffdf0..5a3c040115c2 100644 --- a/packages/rocketchat-api/package.js +++ b/packages/rocketchat-api/package.js @@ -44,4 +44,5 @@ Package.onUse(function(api) { api.addFiles('server/v1/settings.js', 'server'); api.addFiles('server/v1/stats.js', 'server'); api.addFiles('server/v1/users.js', 'server'); + api.addFiles('server/v1/spotlight.js', 'server'); }); diff --git a/packages/rocketchat-api/server/v1/spotlight.js b/packages/rocketchat-api/server/v1/spotlight.js new file mode 100644 index 000000000000..daf4e243ecce --- /dev/null +++ b/packages/rocketchat-api/server/v1/spotlight.js @@ -0,0 +1,14 @@ +RocketChat.API.v1.addRoute('spotlight', { authRequired: true }, { + get() { + check(this.queryParams, { + query: String + }); + + const { query } = this.queryParams; + + let result; + Meteor.runAsUser(this.userId, () => result = Meteor.call('spotlight', query, null)); + + return RocketChat.API.v1.success(result); + } +}); \ No newline at end of file From 8ab094ad8240e7055da8b01e75ea3bd01a8ec083 Mon Sep 17 00:00:00 2001 From: Rafael Kellermann Streit Date: Fri, 26 Jan 2018 08:01:39 -0500 Subject: [PATCH 2/6] Add new line at the end of the file --- packages/rocketchat-api/server/v1/spotlight.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-api/server/v1/spotlight.js b/packages/rocketchat-api/server/v1/spotlight.js index daf4e243ecce..bed45fca57aa 100644 --- a/packages/rocketchat-api/server/v1/spotlight.js +++ b/packages/rocketchat-api/server/v1/spotlight.js @@ -11,4 +11,4 @@ RocketChat.API.v1.addRoute('spotlight', { authRequired: true }, { return RocketChat.API.v1.success(result); } -}); \ No newline at end of file +}); From bf85c6d591ae346abe48f7f3a04f9172a0e35b6c Mon Sep 17 00:00:00 2001 From: Rafael Kellermann Streit Date: Fri, 26 Jan 2018 08:06:22 -0500 Subject: [PATCH 3/6] Create tests for Spotlight REST API --- tests/end-to-end/api/11-spotlight.js | 40 ++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/end-to-end/api/11-spotlight.js diff --git a/tests/end-to-end/api/11-spotlight.js b/tests/end-to-end/api/11-spotlight.js new file mode 100644 index 000000000000..fcd9ca1a488f --- /dev/null +++ b/tests/end-to-end/api/11-spotlight.js @@ -0,0 +1,40 @@ +/* eslint-env mocha */ +/* globals expect */ + +import {getCredentials, api, request, credentials } from '../../data/api-data.js'; + +describe('[Spotlight]', function() { + this.retries(0); + + before(done => getCredentials(done)); + + describe('[/spotlight]', () => { + it('should fail when does not have query param', (done) => { + request.get(api('spotlight')) + .set(credentials) + .expect('Content-Type', 'application/json') + .expect(400) + .expect((res) => { + expect(res.body).to.have.property('success', false); + expect(res.body).to.have.property('error'); + }) + .end(done); + }); + + it('should return objects for a valid query param', (done) => { + request.get(api('spotlight')) + .query({ + query: 'foobar' + }) + .set(credentials) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('users').that.have.lengthOf(0); + expect(res.body).to.have.property('rooms').that.have.lengthOf(0); + }) + .end(done); + }); + }); +}); From 39956cd0131a140949e6386116e6ab253a5172e5 Mon Sep 17 00:00:00 2001 From: Rafael Kellermann Streit Date: Fri, 26 Jan 2018 08:33:28 -0500 Subject: [PATCH 4/6] Few code adjustments --- packages/rocketchat-api/server/v1/spotlight.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/rocketchat-api/server/v1/spotlight.js b/packages/rocketchat-api/server/v1/spotlight.js index bed45fca57aa..adce82e5a811 100644 --- a/packages/rocketchat-api/server/v1/spotlight.js +++ b/packages/rocketchat-api/server/v1/spotlight.js @@ -7,7 +7,12 @@ RocketChat.API.v1.addRoute('spotlight', { authRequired: true }, { const { query } = this.queryParams; let result; - Meteor.runAsUser(this.userId, () => result = Meteor.call('spotlight', query, null)); + Meteor.runAsUser(this.userId, () => + result = Meteor.call('spotlight', query, null, { + rooms: true, + users: true + }) + ); return RocketChat.API.v1.success(result); } From 47e0d05fe2f150a6b365b57e1bc6a48fd8172aa5 Mon Sep 17 00:00:00 2001 From: Rafael Kellermann Streit Date: Fri, 26 Jan 2018 08:48:01 -0500 Subject: [PATCH 5/6] Add docs to the method signature --- packages/rocketchat-api/server/v1/spotlight.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/rocketchat-api/server/v1/spotlight.js b/packages/rocketchat-api/server/v1/spotlight.js index adce82e5a811..bf9ae510d662 100644 --- a/packages/rocketchat-api/server/v1/spotlight.js +++ b/packages/rocketchat-api/server/v1/spotlight.js @@ -1,3 +1,12 @@ +/** + This API returns the result of a query of rooms + and users, using Meteor's Spotlight method. + + Method: GET + Route: api/v1/spotlight + Query params: + - query: The term to be searched. + */ RocketChat.API.v1.addRoute('spotlight', { authRequired: true }, { get() { check(this.queryParams, { From a5407af9f1d4176b1c8bc964dd4627d5f60607af Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Fri, 9 Feb 2018 10:57:53 -0200 Subject: [PATCH 6/6] small fix --- packages/rocketchat-api/server/v1/spotlight.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/rocketchat-api/server/v1/spotlight.js b/packages/rocketchat-api/server/v1/spotlight.js index bf9ae510d662..9dbea532fa11 100644 --- a/packages/rocketchat-api/server/v1/spotlight.js +++ b/packages/rocketchat-api/server/v1/spotlight.js @@ -15,9 +15,8 @@ RocketChat.API.v1.addRoute('spotlight', { authRequired: true }, { const { query } = this.queryParams; - let result; - Meteor.runAsUser(this.userId, () => - result = Meteor.call('spotlight', query, null, { + const result = Meteor.runAsUser(this.userId, () => + Meteor.call('spotlight', query, null, { rooms: true, users: true })