mirror of
https://github.com/nioc/xmpp-bot.git
synced 2024-12-04 22:23:36 +01:00
Return XMPP error to incoming webhook
This commit is contained in:
parent
18f8df74c0
commit
9c5dd424bb
3 changed files with 70 additions and 6 deletions
|
@ -87,7 +87,13 @@ module.exports = (logger, config, xmpp) => {
|
||||||
// send message
|
// send message
|
||||||
logger.trace(`Send to ${destination} (group:${type}) following message :\r\n${message}`)
|
logger.trace(`Send to ${destination} (group:${type}) following message :\r\n${message}`)
|
||||||
xmpp.send(destination, message, type)
|
xmpp.send(destination, message, type)
|
||||||
return res.status(200).send({ 'status': 'ok', destination })
|
.then(() => {
|
||||||
|
return res.status(200).send({ 'status': 'ok', destination })
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
return res.status(500).send('Could not send message')
|
||||||
|
})
|
||||||
|
break
|
||||||
|
|
||||||
case 'send_xmpp_template':
|
case 'send_xmpp_template':
|
||||||
|
|
||||||
|
@ -101,7 +107,13 @@ module.exports = (logger, config, xmpp) => {
|
||||||
// send message
|
// send message
|
||||||
logger.trace(`Send to ${webhook.args.destination} (group:${webhook.args.type}) following message :\r\n${msg}`)
|
logger.trace(`Send to ${webhook.args.destination} (group:${webhook.args.type}) following message :\r\n${msg}`)
|
||||||
xmpp.send(webhook.args.destination, msg, webhook.args.type)
|
xmpp.send(webhook.args.destination, msg, webhook.args.type)
|
||||||
return res.status(200).send('ok')
|
.then(() => {
|
||||||
|
return res.status(200).send('ok')
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
return res.status(500).send('Could not send message')
|
||||||
|
})
|
||||||
|
break
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return res.status(204).send()
|
return res.status(204).send()
|
||||||
|
|
|
@ -29,6 +29,7 @@ module.exports = (logger, config) => {
|
||||||
message)
|
message)
|
||||||
)
|
)
|
||||||
await xmppClient.send(stanza)
|
await xmppClient.send(stanza)
|
||||||
|
logger.debug(`${type} message successfully sent to ${to}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
// declare close function
|
// declare close function
|
||||||
|
|
|
@ -21,11 +21,9 @@ describe('Webhook component', () => {
|
||||||
logger.updateConfig(config.logger)
|
logger.updateConfig(config.logger)
|
||||||
|
|
||||||
// mock xmpp component
|
// mock xmpp component
|
||||||
xmppSendStub = sinon.stub()
|
|
||||||
xmpp = {
|
xmpp = {
|
||||||
send: xmppSendStub
|
send: null
|
||||||
}
|
}
|
||||||
|
|
||||||
// configure webhook
|
// configure webhook
|
||||||
baseUrl = 'http://localhost:' + config.listener.port
|
baseUrl = 'http://localhost:' + config.listener.port
|
||||||
webhook = require('./../lib/webhook')(logger, config, xmpp)
|
webhook = require('./../lib/webhook')(logger, config, xmpp)
|
||||||
|
@ -33,7 +31,9 @@ describe('Webhook component', () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
beforeEach('Reset XMPP stub history and request option', function () {
|
beforeEach('Reset XMPP stub history and request option', function () {
|
||||||
xmppSendStub.resetHistory()
|
// mock xmpp component
|
||||||
|
xmppSendStub = sinon.stub().resolves()
|
||||||
|
xmpp.send = xmppSendStub
|
||||||
options = {
|
options = {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
url: baseUrl + config.listener.path + '/',
|
url: baseUrl + config.listener.path + '/',
|
||||||
|
@ -144,6 +144,28 @@ describe('Webhook component', () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('POST valid webhook (send message) with XMPP error', () => {
|
||||||
|
it('Should return 200 and send XMPP message', (done) => {
|
||||||
|
xmppSendStub = sinon.stub().rejects()
|
||||||
|
xmpp.send = xmppSendStub
|
||||||
|
options.json = {
|
||||||
|
destination: 'destination',
|
||||||
|
message: 'This is a message'
|
||||||
|
}
|
||||||
|
options.url += 'w1'
|
||||||
|
request(options, (error, response, body) => {
|
||||||
|
response.statusCode.should.equal(500)
|
||||||
|
sinon.assert.calledOnce(xmppSendStub)
|
||||||
|
const args = xmppSendStub.args[0]
|
||||||
|
args.should.have.length(3)
|
||||||
|
args[0].should.equal(options.json.destination)
|
||||||
|
args[1].should.equal(options.json.message)
|
||||||
|
args[2].should.equal('chat')
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
describe('POST valid webhook (send template)', () => {
|
describe('POST valid webhook (send template)', () => {
|
||||||
it('Should return 200 and send XMPP message', (done) => {
|
it('Should return 200 and send XMPP message', (done) => {
|
||||||
options.json = {
|
options.json = {
|
||||||
|
@ -170,4 +192,33 @@ describe('Webhook component', () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('POST valid webhook (send template) with XMPP error', () => {
|
||||||
|
it('Should return 200 and send XMPP message', (done) => {
|
||||||
|
xmppSendStub = sinon.stub().rejects()
|
||||||
|
xmpp.send = xmppSendStub
|
||||||
|
options.json = {
|
||||||
|
title: 'This is a title',
|
||||||
|
message: 'This is a message',
|
||||||
|
evalMatches: [
|
||||||
|
{
|
||||||
|
metric: 'metric',
|
||||||
|
value: 'value'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
imageUrl: 'https://domain.ltd:port/path/image'
|
||||||
|
}
|
||||||
|
options.url += 'grafana'
|
||||||
|
request(options, (error, response, body) => {
|
||||||
|
response.statusCode.should.equal(500)
|
||||||
|
sinon.assert.calledOnce(xmppSendStub)
|
||||||
|
const args = xmppSendStub.args[0]
|
||||||
|
args.should.have.length(3)
|
||||||
|
args[0].should.equal('grafana@conference.domain-xmpp.ltd')
|
||||||
|
args[1].should.equal('This is a title\r\nThis is a message\r\nmetric: value\r\nhttps://domain.ltd:port/path/image')
|
||||||
|
args[2].should.equal('groupchat')
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue