slapp
Version:
A module for Slack App integrations
98 lines (78 loc) • 2.31 kB
JavaScript
const test = require('ava').test
const sinon = require('sinon')
const fixtures = require('./fixtures/')
const ParseAction = require('../src/receiver/middleware/parse-action')
const SIGNATURE = 'mysignature'
const TIMESTAMP = Date.now()
test('ParseAction()', t => {
let mw = ParseAction()
t.is(mw.length, 3)
})
test('ParseAction() no payload', t => {
let mw = ParseAction().pop()
let res = fixtures.getMockRes()
let sendStub = sinon.stub(res, 'send')
mw({ body: {} }, res, () => t.fail())
t.true(sendStub.calledWith('Invalid request: payload missing'))
})
test('ParseAction() invalid json payload', t => {
let mw = ParseAction().pop()
let res = fixtures.getMockRes()
let sendStub = sinon.stub(res, 'send')
mw({ body: { payload: '\\{"' } }, res, () => t.fail())
t.true(sendStub.calledWith('Error parsing payload'))
})
test.cb('ParseAction() valid payload', t => {
t.plan(10)
let mw = ParseAction().pop()
let payload = mockPayload()
let req = {
body: { payload: JSON.stringify(payload) },
headers: fixtures.getMockSlackHeaders(SIGNATURE, TIMESTAMP)
}
let res = fixtures.getMockRes()
mw(req, res, () => {
let slapp = req.slapp
t.is(slapp.type, 'action')
t.deepEqual(slapp.body, payload)
t.is(slapp.meta.verify_token, payload.token)
t.is(slapp.meta.user_id, payload.user.id)
t.is(slapp.meta.channel_id, payload.channel.id)
t.is(slapp.meta.team_id, payload.team.id)
t.is(slapp.meta.signature, SIGNATURE)
t.is(slapp.meta.timestamp, TIMESTAMP)
t.is(slapp.response, res)
t.is(slapp.responseTimeout, 2500)
t.end()
})
})
test.cb('ParseAction() message_action valid payload', t => {
t.plan(3)
let mw = ParseAction().pop()
let payload = mockPayload()
payload.type = 'message_action'
let req = { body: { payload: JSON.stringify(payload) } }
let res = fixtures.getMockRes()
mw(req, res, () => {
let slapp = req.slapp
t.is(slapp.body.type, 'message_action')
t.deepEqual(slapp.body, payload)
t.falsy(slapp.response, 'response should be undefined if message_action')
t.end()
})
})
function mockPayload () {
return {
token: 'token',
user: {
id: 'user_id'
},
channel: {
id: 'channel_id'
},
team: {
id: 'team_id'
}
}
}