Fix voteskip issue when there are no videos left

This commit is contained in:
Calvin Montgomery 2017-03-21 20:04:06 -07:00
parent 309cd40da2
commit 7595faf11d
3 changed files with 85 additions and 4 deletions

View File

@ -2,7 +2,7 @@
"author": "Calvin Montgomery", "author": "Calvin Montgomery",
"name": "CyTube", "name": "CyTube",
"description": "Online media synchronizer and chat", "description": "Online media synchronizer and chat",
"version": "3.34.5", "version": "3.34.6",
"repository": { "repository": {
"url": "http://github.com/calzoneman/sync" "url": "http://github.com/calzoneman/sync"
}, },

View File

@ -75,13 +75,14 @@ VoteskipModule.prototype.update = function () {
return; return;
} }
this.sendVoteskipData(this.channel.users);
var max = this.calcVoteskipMax(); var max = this.calcVoteskipMax();
var need = Math.ceil(max * this.channel.modules.options.get("voteskip_ratio")); var need = Math.ceil(max * this.channel.modules.options.get("voteskip_ratio"));
if (this.poll.counts[0] >= need) { if (this.poll.counts[0] >= need) {
this.channel.logger.log("[playlist] Voteskip passed."); this.channel.logger.log("[playlist] Voteskip passed.");
this.reset();
this.channel.modules.playlist._playNext(); this.channel.modules.playlist._playNext();
} else {
this.sendVoteskipData(this.channel.users);
} }
}; };
@ -115,9 +116,13 @@ VoteskipModule.prototype.calcVoteskipMax = function () {
}, 0); }, 0);
}; };
VoteskipModule.prototype.onMediaChange = function (data) { VoteskipModule.prototype.reset = function reset() {
this.poll = false; this.poll = false;
this.sendVoteskipData(this.channel.users); this.sendVoteskipData(this.channel.users);
}; };
VoteskipModule.prototype.onMediaChange = function (data) {
this.reset();
};
module.exports = VoteskipModule; module.exports = VoteskipModule;

76
test/channel/voteskip.js Normal file
View File

@ -0,0 +1,76 @@
const VoteskipModule = require('../../lib/channel/voteskip');
const assert = require('assert');
describe('VoteskipModule', () => {
describe('#update', () => {
let fakeUser = {
socket: {
emit() {
}
},
is() {
return false
}
};
let fakeChannel = {
logger: {
log() {
}
},
modules: {
permissions: {
canSeeVoteskipResults() {
return true;
},
canVoteskip() {
return true;
}
},
options: {
get(key) {
if (key === 'voteskip_ratio') {
return 0.5;
} else if (key === 'allow_voteskip') {
return true;
}
}
},
playlist: {
meta: {
count: 1
}
}
},
users: [fakeUser]
};
let voteskipModule = new VoteskipModule(fakeChannel);
it('resets the vote before changing to the next video', () => {
let reset = false, playNext = false;
fakeChannel.modules.playlist._playNext = () => {
if (!reset) {
assert(false, 'Expected voteskip reset prior to playlist._playNext');
}
playNext = true;
};
fakeUser.socket.emit = (event, data) => {
if (event === 'voteskip') {
assert.deepEqual(data, { count: 0, need: 0 });
reset = true;
}
};
voteskipModule.poll = {
counts: [1]
};
voteskipModule.update();
assert.equal(voteskipModule.poll, false, 'Expected voteskip poll to be reset to false');
assert(reset, 'Expected voteskip to be reset');
assert(playNext, 'Expected playlist to be advanced');
});
});
});