diff --git a/src/channel/poll.js b/src/channel/poll.js index 3a66ca33..239f1a72 100644 --- a/src/channel/poll.js +++ b/src/channel/poll.js @@ -2,6 +2,7 @@ var ChannelModule = require("./module"); var Poll = require("../poll").Poll; import { ValidationError } from '../errors'; import Config from '../config'; +import { ackOrErrorMsg } from '../util/ack'; const TYPE_NEW_POLL = { title: "string", @@ -160,6 +161,8 @@ PollModule.prototype.handleNewPoll = function (user, data, ack) { return; } + ack = ackOrErrorMsg(ack, user); + if (typeof data !== 'object' || data === null) { ack({ error: { diff --git a/src/util/ack.js b/src/util/ack.js new file mode 100644 index 00000000..ce916b7d --- /dev/null +++ b/src/util/ack.js @@ -0,0 +1,11 @@ +export function ackOrErrorMsg(ack, user) { + if (typeof ack === 'function') { + return ack; + } + + return (result) => { + if (result.error) { + user.socket.emit('errorMsg', { msg: result.error.message }); + } + }; +} \ No newline at end of file diff --git a/test/channel/poll.js b/test/channel/poll.js index 4b54b83a..6da1c0fb 100644 --- a/test/channel/poll.js +++ b/test/channel/poll.js @@ -91,6 +91,10 @@ describe('PollModule', () => { let fakeUser = { getName() { return 'testUser'; + }, + socket: { + emit() { + } } }; let pollModule = new PollModule(fakeChannel); @@ -141,5 +145,30 @@ describe('PollModule', () => { assert.equal(ackResult.error.message, 'Polls are limited to a maximum of 50 options.'); }); }); + + it('handles a rejection with no ack provided by socket.io', () => { + fakeChannel.broadcastToRoom = (event, data, room) => { + assert(false, 'Expected no events to be sent'); + }; + fakeChannel.broadcastAll = (event) => { + assert(false, 'Expected no events to be sent'); + }; + let sentErrorMsg = false; + fakeUser.socket.emit = (event, data) => { + if (event === 'errorMsg') { + sentErrorMsg = true; + } + }; + const options = []; + for (let i = 0; i < 200; i++) { + options.push('option ' + i); + } + pollModule.handleNewPoll(fakeUser, { + title: 'test poll', + opts: options, + obscured: false + }); + assert(sentErrorMsg, 'Expected to send errorMsg since ack was missing'); + }); }) }); \ No newline at end of file