UNPKG

ac-koa-hipchat

Version:

A Koa.js library for building Atlassian Connect HipChat add-ons

118 lines (105 loc) 3.58 kB
var assert = require('assert'); var supertest = require('supertest'); var fixtures = require('./fixtures'); var rsvp = require('rsvp'); var Promise = rsvp.Promise; var _ = require('lodash'); var ack = require('ac-koa'); var MemoryStore = require('ac-node').MemoryStore; var MockHttpClient = require('ac-node-hipchat/test/mock-http-client'); var tenant = fixtures.load('tenant.json'); var installable = fixtures.load('tenant-installable.json'); describe('ack hipchat add-on with dynamic webhooks', function () { var pkg = fixtures.load('package.json'); var store = MemoryStore(); var scope = 'hipchat'; var tenantStore; var server; var client; var app; beforeEach(function () { app = ack(pkg, { store: store, httpClient: MockHttpClient(10) }); tenantStore = store.narrow(scope).narrow('tenant'); }); afterEach(function (done) { store.clear().then(function () { server.close(done); }); }); it('should mount and fire events for a dynamically added webhook', function (done) { var addon = app.addon(scope) .hipchat() .scopes('admin_room') .allowRoom(true); var install = new Promise(function (resolve) { addon.onWebhook('install', function *() { var def = yield this.tenantWebhooks.add('room_message', /^\/test(?:\s+(\w+)\s+(\w+)|$)?/i); resolve(def.name); }); }); var roomMessage = new Promise(function (resolve) { addon.onWebhook('room_message', function () { resolve(this); }); }); server = app.listen(function () { client = supertest.agent(server); client .post('/hipchat/addon/installable') .send(installable) .expect(204, function (err) { if (err) return done(err); }); install.then(function (whName) { var postBody = { event: 'room_message', oauth_client_id: tenant.id, webhook_id: 1, item: { room: { id: 1 }, message: { id: 2, from: { name: 'user' }, message: '/TEST arg1 arg2 arg3' } } }; client .post('/hipchat/addon/webhook?name=' + whName) .send(postBody) .expect(204, function (err) { if (err) return done(err); roomMessage.then(function (eventContext) { assert.deepEqual(eventContext.request.body, postBody); assert.ok(eventContext); assert.deepEqual(eventContext.tenant, tenant); assert.ok(eventContext.tenantStore); assert.ok(eventContext.tenantClient); assert.ok(eventContext.roomClient); assert.ok(eventContext.tenantWebhooks); assert.ok(eventContext.room); assert.ok(eventContext.sender); assert.ok(eventContext.message); assert.equal(eventContext.room.id, 1); assert.equal(eventContext.sender.name, 'user'); assert.equal(eventContext.message.id, 2); assert.equal(eventContext.content, '/TEST arg1 arg2 arg3'); assert.ok(eventContext.match); assert.equal(eventContext.match.length, 3); assert.equal(eventContext.match[1], 'arg1'); assert.equal(eventContext.match[2], 'arg2'); assert.equal(eventContext.match[3], undefined); done(); }).catch(done); }); }); }); }); });