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..9dbea532fa11 --- /dev/null +++ b/packages/rocketchat-api/server/v1/spotlight.js @@ -0,0 +1,27 @@ +/** + 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, { + query: String + }); + + const { query } = this.queryParams; + + const result = Meteor.runAsUser(this.userId, () => + Meteor.call('spotlight', query, null, { + rooms: true, + users: true + }) + ); + + return RocketChat.API.v1.success(result); + } +}); 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); + }); + }); +});