diff --git a/packages/rocketchat-api/server/v1/chat.js b/packages/rocketchat-api/server/v1/chat.js index aa8404b75f25..6e3486ca34ab 100644 --- a/packages/rocketchat-api/server/v1/chat.js +++ b/packages/rocketchat-api/server/v1/chat.js @@ -300,3 +300,20 @@ RocketChat.API.v1.addRoute('chat.getMessageReadReceipts', { authRequired: true } } } }); + +RocketChat.API.v1.addRoute('chat.reportMessage', { authRequired: true }, { + post() { + const { messageId, description } = this.bodyParams; + if (!messageId) { + return RocketChat.API.v1.failure('The required "messageId" param is missing.'); + } + + if (!description) { + return RocketChat.API.v1.failure('The required "description" param is missing.'); + } + + Meteor.runAsUser(this.userId, () => Meteor.call('reportMessage', messageId, description)); + + return RocketChat.API.v1.success(); + } +}); diff --git a/tests/end-to-end/api/05-chat.js b/tests/end-to-end/api/05-chat.js index 9d5b3f21455f..0b3dd98f0212 100644 --- a/tests/end-to-end/api/05-chat.js +++ b/tests/end-to-end/api/05-chat.js @@ -255,4 +255,40 @@ describe('[Chat]', function() { }); }); }); + + describe('[/chat.reportMessage]', () => { + describe('when execute successfully', () => { + it('should return the statusCode 200', (done) => { + request.post(api('chat.reportMessage')) + .set(credentials) + .send({ + messageId: message._id, + description: 'test' + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + }) + .end(done); + }); + }); + + describe('when an error occurs', () => { + it('should return statusCode 400 and an error', (done) => { + request.post(api('chat.reportMessage')) + .set(credentials) + .send({ + messageId: message._id + }) + .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); + }); + }); + }); });