diff --git a/src/routes/getSkipSegments.js b/src/routes/getSkipSegments.js index ba23262..7b68d3f 100644 --- a/src/routes/getSkipSegments.js +++ b/src/routes/getSkipSegments.js @@ -1,4 +1,3 @@ -var fs = require('fs'); var config = require('../config.js'); var databases = require('../databases/databases.js'); diff --git a/src/routes/postNoSegments.js b/src/routes/postNoSegments.js index 58074b8..f2e681b 100644 --- a/src/routes/postNoSegments.js +++ b/src/routes/postNoSegments.js @@ -1,5 +1,7 @@ +const db = require('../databases/databases.js').db; const getHash = require('../utils/getHash.js'); const isUserVIP = require('../utils/isUserVIP.js'); +const logger = require('../utils/logger.js'); module.exports = (req, res) => { // Collect user input data @@ -27,5 +29,34 @@ module.exports = (req, res) => { return; } - res.status(200).json({status: 200}); + // Get existing no segment markers + let noSegmentList = db.prepare('all', 'SELECT category from noSegments where videoID = ?', [videoID]); + if (!noSegmentList || noSegmentList.length === 0) { + noSegmentList = []; + } else { + noSegmentList = noSegmentList.map((obj) => { + return obj.category; + }); + } + + // get user categorys not already submitted + let categorysToMark = categorys.filter((category) => { + return noSegmentList.indexOf(category) === -1; + }); + + // remove any duplicates + categorysToMark = categorysToMark.filter((category, index) => { + return categorysToMark.indexOf(category) === index; + }); + + // create database entry + categorysToMark.forEach((category) => { + db.prepare('run', "INSERT INTO noSegments (videoID, userID, category) VALUES(?, ?, ?)", [videoID, userID, category]); + //ogger.debug('submitting ' + category); + }); + + res.status(200).json({ + status: 200, + submitted: categorysToMark + }); }; \ No newline at end of file diff --git a/test/cases/postNoSegments.js b/test/cases/postNoSegments.js index 5ab2b3d..7d88e7d 100644 --- a/test/cases/postNoSegments.js +++ b/test/cases/postNoSegments.js @@ -9,6 +9,9 @@ var db = databases.db; describe('postNoSegments', () => { before(() => { db.exec("INSERT INTO vipUsers (userID) VALUES ('" + getHash("VIPUser-noSegments") + "')"); + + db.exec("INSERT INTO noSegments (userID, videoID, category) VALUES ('" + getHash("VIPUser-noSegments") + "', 'no-segments-video-id', 'sponsor')"); + db.exec("INSERT INTO noSegments (userID, videoID, category) VALUES ('" + getHash("VIPUser-noSegments") + "', 'no-segments-video-id', 'intro')"); }); it('should update the database version when starting the application', (done) => { @@ -17,12 +20,23 @@ describe('postNoSegments', () => { else done('Version isn\'t greater that 1. Version is ' + version); }); - it('Should be able to submit no segments', (done) => { + it('Should be able to submit categorys not in video', (done) => { let json = { - videoID: 'noSegmentsTestVideoID', + videoID: 'no-segments-video-id', userID: 'VIPUser-noSegments', categorys: [ - 'sponsor' + 'outro', + 'shilling', + 'shilling', + 'intro' + ] + }; + + let expected = { + status: 200, + submitted: [ + 'outro', + 'shilling' ] }; @@ -31,12 +45,11 @@ describe('postNoSegments', () => { (err, res, body) => { if (err) done(err); else if (res.statusCode === 200) { - //let row = db.prepare('get', "SELECT startTime, endTime, category FROM sponsorTimes WHERE videoID = ?", ["noSegmentsTestVideoID"]); - //if (row.startTime === 2 && row.endTime === 10 && row.category === "sponsor") { - done() - //} else { - // done("Submitted times were not saved. Actual submission: " + JSON.stringify(row)); - //} + if (JSON.stringify(body) === JSON.stringify(expected)) { + done(); + } else { + done("Incorrect response: expected " + JSON.stringify(expected) + " got " + JSON.stringify(body)); + } } else { console.log(body); done("Status code was " + res.statusCode); @@ -166,7 +179,7 @@ describe('postNoSegments', () => { (err, res, body) => { if (err) done(err); else if (res.statusCode === 403) { - done() + done(); } else { done("Status code was " + res.statusCode); }