Handle the case where no socket.io ack exists

This commit is contained in:
Calvin Montgomery 2017-03-20 22:09:16 -07:00
parent 9dc82ad444
commit 0613083eb0
3 changed files with 43 additions and 0 deletions

View File

@ -2,6 +2,7 @@ var ChannelModule = require("./module");
var Poll = require("../poll").Poll; var Poll = require("../poll").Poll;
import { ValidationError } from '../errors'; import { ValidationError } from '../errors';
import Config from '../config'; import Config from '../config';
import { ackOrErrorMsg } from '../util/ack';
const TYPE_NEW_POLL = { const TYPE_NEW_POLL = {
title: "string", title: "string",
@ -160,6 +161,8 @@ PollModule.prototype.handleNewPoll = function (user, data, ack) {
return; return;
} }
ack = ackOrErrorMsg(ack, user);
if (typeof data !== 'object' || data === null) { if (typeof data !== 'object' || data === null) {
ack({ ack({
error: { error: {

11
src/util/ack.js Normal file
View File

@ -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 });
}
};
}

View File

@ -91,6 +91,10 @@ describe('PollModule', () => {
let fakeUser = { let fakeUser = {
getName() { getName() {
return 'testUser'; return 'testUser';
},
socket: {
emit() {
}
} }
}; };
let pollModule = new PollModule(fakeChannel); 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.'); 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');
});
}) })
}); });