Skip to content

Commit

Permalink
[NEW] Add REST /directory endpoint (#10442)
Browse files Browse the repository at this point in the history
[NEW] REST API endpoint `/directory`
  • Loading branch information
MarcosSpessatto authored and rodrigok committed Apr 19, 2018
1 parent 76f7c73 commit ee06a91
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 2 deletions.
23 changes: 23 additions & 0 deletions packages/rocketchat-api/server/v1/misc.js
Original file line number Diff line number Diff line change
Expand Up @@ -145,3 +145,26 @@ RocketChat.API.v1.addRoute('shield.svg', { authRequired: false }, {
};
}
});

RocketChat.API.v1.addRoute('directory', { authRequired: true }, {
get() {
const { offset, count } = this.getPaginationItems();
const { sort, query } = this.parseJsonQuery();

const { text, type } = query;
const sortDirection = sort && sort === 1 ? 'asc' : 'desc';

const result = Meteor.runAsUser(this.userId, () => Meteor.call('browseChannels', {

This comment has been minimized.

Copy link
@ggazzo

ggazzo Jun 14, 2018

Member

this is not gonna work I think :)

text,
type,
sort: sortDirection,
page: offset,
limit: count
}));

if (!result) {
return RocketChat.API.v1.failure('Please verify the parameters');
}
return RocketChat.API.v1.success({ result });
}
});
97 changes: 95 additions & 2 deletions tests/end-to-end/api/00-miscellaneous.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
/* eslint no-unused-vars: 0 */

import {getCredentials, api, login, request, credentials} from '../../data/api-data.js';
import {adminEmail, adminUsername, adminPassword} from '../../data/user.js';
import {adminEmail, adminUsername, adminPassword, password} from '../../data/user.js';
import supertest from 'supertest';

describe('miscellaneous', function() {
Expand All @@ -12,7 +12,7 @@ describe('miscellaneous', function() {
before(done => getCredentials(done));

describe('API default', () => {
// Required by mobile apps
// Required by mobile apps
it('/info', (done) => {
request.get('/api/info')
.expect('Content-Type', 'application/json')
Expand Down Expand Up @@ -74,4 +74,97 @@ describe('miscellaneous', function() {
});


describe('/directory', () => {
let user;
let testChannel;
before((done) => {
const username = `user.test.${ Date.now() }`;
const email = `${ username }@rocket.chat`;
request.post(api('users.create'))
.set(credentials)
.send({email, name: username, username, password})
.end((err, res) => {
user = res.body.user;
done();
});
});
after(done => {
request.post(api('users.delete')).set(credentials).send({
userId: user._id
}).end(done);
user = undefined;
});
it('create an channel', (done) => {
request.post(api('channels.create'))
.set(credentials)
.send({
name: `channel.test.${ Date.now() }`
})
.end((err, res) => {
testChannel = res.body.channel;
done();
});
});
it('should return an array(result) when search by user and execute succesfully', (done) => {
request.get(api('directory'))
.set(credentials)
.query({
query: JSON.stringify({
text: user.username,
type: 'users'
})
})
.expect('Content-Type', 'application/json')
.expect(200)
.expect((res) => {
expect(res.body).to.have.property('success', true);
expect(res.body).to.have.property('result').and.to.be.an('array');
expect(res.body.result[0]).to.have.property('_id');
expect(res.body.result[0]).to.have.property('createdAt');
expect(res.body.result[0]).to.have.property('username');
expect(res.body.result[0]).to.have.property('emails').and.to.be.an('array');
expect(res.body.result[0]).to.have.property('name');
})
.end(done);
});
it('should return an array(result) when search by channel and execute succesfully', (done) => {
request.get(api('directory'))
.set(credentials)
.query({
query: JSON.stringify({
text: testChannel.name,
type: 'channels'
})
})
.expect('Content-Type', 'application/json')
.expect(200)
.expect((res) => {
expect(res.body).to.have.property('success', true);
expect(res.body).to.have.property('result').and.to.be.an('array');
expect(res.body.result[0]).to.have.property('_id');
expect(res.body.result[0]).to.have.property('name');
expect(res.body.result[0]).to.have.property('usernames').and.to.be.an('array');
expect(res.body.result[0]).to.have.property('ts');
})
.end(done);
});

it('should return an error when send invalid query', (done) => {
request.get(api('directory'))
.set(credentials)
.query({
query: JSON.stringify({
text: 'invalid channel',
type: 'invalid'
})
})
.expect('Content-Type', 'application/json')
.expect(400)
.expect((res) => {
expect(res.body).to.have.property('success', false);
})
.end(done);
});

});
});

0 comments on commit ee06a91

Please sign in to comment.