From 44ea0c418a6d34490fc84c0145534b048401c12f Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Sat, 22 Aug 2020 02:14:19 +0100 Subject: [PATCH 01/14] fixed db update, started no segments --- databases/_upgrade_sponsorTimes_2.sql | 13 ++ index.js | 3 +- src/app.js | 4 + src/databases/databases.js | 11 +- src/routes/postNoSegments.js | 31 +++++ src/routes/voteOnSponsorTime.js | 2 +- src/utils/isUserVIP.js | 8 ++ src/utils/logger.js | 2 + test.js | 5 +- test/cases/postNoSegments.js | 175 ++++++++++++++++++++++++++ 10 files changed, 247 insertions(+), 7 deletions(-) create mode 100644 databases/_upgrade_sponsorTimes_2.sql create mode 100644 src/routes/postNoSegments.js create mode 100644 src/utils/isUserVIP.js create mode 100644 test/cases/postNoSegments.js diff --git a/databases/_upgrade_sponsorTimes_2.sql b/databases/_upgrade_sponsorTimes_2.sql new file mode 100644 index 0000000..46c0fad --- /dev/null +++ b/databases/_upgrade_sponsorTimes_2.sql @@ -0,0 +1,13 @@ +BEGIN TRANSACTION; + +/* Add incorrectVotes field */ +CREATE TABLE "noSegments" ( + "videoID" TEXT NOT NULL, + "userID" TEXT NOT NULL, + "category" TEXT NOT NULL +); + +/* Add version to config */ +UPDATE config SET value = 2 WHERE key = 'version'; + +COMMIT; \ No newline at end of file diff --git a/index.js b/index.js index 508c089..a877bab 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,6 @@ var config = require('./src/config.js'); var createServer = require('./src/app.js'); +const logger = require('./src/utils/logger.js'); var server = createServer(() => { - console.log("Server started on port " + config.port + "."); + logger.info("Server started on port " + config.port + "."); }); diff --git a/src/app.js b/src/app.js index 1ce1674..ef6c554 100644 --- a/src/app.js +++ b/src/app.js @@ -21,6 +21,7 @@ var getViewsForUser = require('./routes/getViewsForUser.js'); var getTopUsers = require('./routes/getTopUsers.js'); var getTotalStats = require('./routes/getTotalStats.js'); var getDaysSavedFormatted = require('./routes/getDaysSavedFormatted.js'); +var postNoSegments = require('./routes/postNoSegments.js'); // Old Routes var oldGetVideoSponsorTimes = require('./routes/oldGetVideoSponsorTimes.js'); @@ -86,6 +87,9 @@ app.get('/api/getTotalStats', getTotalStats); //send out a formatted time saved total app.get('/api/getDaysSavedFormatted', getDaysSavedFormatted); +//submit video containing no segments +app.post('/api/postNoSegments', postNoSegments); + app.get('/database.db', function (req, res) { res.sendFile("./databases/sponsorTimes.db", { root: "./" }); }); diff --git a/src/databases/databases.js b/src/databases/databases.js index 1a1b448..a3aeb59 100644 --- a/src/databases/databases.js +++ b/src/databases/databases.js @@ -3,7 +3,8 @@ var Sqlite3 = require('better-sqlite3'); var fs = require('fs'); var path = require('path'); var Sqlite = require('./Sqlite.js') -var Mysql = require('./Mysql.js') +var Mysql = require('./Mysql.js'); +const logger = require('../utils/logger.js'); let options = { readonly: config.readOnly, @@ -60,12 +61,16 @@ if (config.mysql) { let versionCodeInfo = db.prepare("SELECT value FROM config WHERE key = ?").get("version"); let versionCode = versionCodeInfo ? versionCodeInfo.value : 0; - let path = config.schemaFolder + "/_upgrade_" + prefix + "_" + (versionCode + 1) + ".sql"; + let path = config.schemaFolder + "/_upgrade_" + prefix + "_" + (parseInt(versionCode) + 1) + ".sql"; + logger.debug('db update: trying ' + path); while (fs.existsSync(path)) { + logger.debug('db update: updating ' + path); db.exec(fs.readFileSync(path).toString()); versionCode = db.prepare("SELECT value FROM config WHERE key = ?").get("version").value; - path = config.schemaFolder + "/_upgrade_" + prefix + "_" + (versionCode + 1) + ".sql"; + path = config.schemaFolder + "/_upgrade_" + prefix + "_" + (parseInt(versionCode) + 1) + ".sql"; + logger.debug('db update: trying ' + path); } + logger.debug('db update: no file ' + path); } } \ No newline at end of file diff --git a/src/routes/postNoSegments.js b/src/routes/postNoSegments.js new file mode 100644 index 0000000..58074b8 --- /dev/null +++ b/src/routes/postNoSegments.js @@ -0,0 +1,31 @@ +const getHash = require('../utils/getHash.js'); +const isUserVIP = require('../utils/isUserVIP.js'); + +module.exports = (req, res) => { + // Collect user input data + let videoID = req.body.videoID; + let userID = req.body.userID; + let categorys = req.body.categorys; + + // Check input data is valid + if (!videoID + || !userID + || !categorys + || !Array.isArray(categorys) + || categorys.length === 0 + ) { + res.status(400).json({}); + return; + } + + // Check if user is VIP + userID = getHash(userID); + let userIsVIP = isUserVIP(userID); + + if (!userIsVIP) { + res.status(403).json({}); + return; + } + + res.status(200).json({status: 200}); +}; \ No newline at end of file diff --git a/src/routes/voteOnSponsorTime.js b/src/routes/voteOnSponsorTime.js index 0e9fdf8..9ce6afa 100644 --- a/src/routes/voteOnSponsorTime.js +++ b/src/routes/voteOnSponsorTime.js @@ -4,7 +4,7 @@ var config = require('../config.js'); var getHash = require('../utils/getHash.js'); var getIP = require('../utils/getIP.js'); var getFormattedTime = require('../utils/getFormattedTime.js'); -var isUserTrustworthy = require('../utils/isUserTrustworthy.js') +var isUserTrustworthy = require('../utils/isUserTrustworthy.js'); var databases = require('../databases/databases.js'); var db = databases.db; diff --git a/src/utils/isUserVIP.js b/src/utils/isUserVIP.js new file mode 100644 index 0000000..eeb25dc --- /dev/null +++ b/src/utils/isUserVIP.js @@ -0,0 +1,8 @@ +const databases = require('../databases/databases.js'); +const db = databases.db; + +module.exports = (userID) => { + return db.prepare('get', "SELECT count(*) as userCount FROM vipUsers WHERE userID = ?", [userID]).userCount > 0; +} + + diff --git a/src/utils/logger.js b/src/utils/logger.js index 70fe13e..351e45c 100644 --- a/src/utils/logger.js +++ b/src/utils/logger.js @@ -17,6 +17,8 @@ const settings = { if (config.mode === 'development') { settings.INFO = true; settings.DEBUG = true; +} else if (config.mode === 'test') { + settings.DEBUG = true; } function log(level, string) { diff --git a/test.js b/test.js index 45ace90..9810786 100644 --- a/test.js +++ b/test.js @@ -9,6 +9,7 @@ if (fs.existsSync(config.privateDB)) fs.unlinkSync(config.privateDB); var createServer = require('./src/app.js'); var createMockServer = require('./test/mocks.js'); +const logger = require('./src/utils/logger.js'); // Instantiate a Mocha instance. var mocha = new Mocha(); @@ -27,9 +28,9 @@ fs.readdirSync(testDir).filter(function(file) { }); var mockServer = createMockServer(() => { - console.log("Started mock HTTP Server"); + logger.info("Started mock HTTP Server"); var server = createServer(() => { - console.log("Started main HTTP server"); + logger.info("Started main HTTP server"); // Run the tests. mocha.run(function(failures) { mockServer.close(); diff --git a/test/cases/postNoSegments.js b/test/cases/postNoSegments.js new file mode 100644 index 0000000..5ab2b3d --- /dev/null +++ b/test/cases/postNoSegments.js @@ -0,0 +1,175 @@ +var request = require('request'); + +var utils = require('../utils.js'); +const getHash = require('../../src/utils/getHash.js'); + +var databases = require('../../src/databases/databases.js'); +var db = databases.db; + +describe('postNoSegments', () => { + before(() => { + db.exec("INSERT INTO vipUsers (userID) VALUES ('" + getHash("VIPUser-noSegments") + "')"); + }); + + it('should update the database version when starting the application', (done) => { + let version = db.prepare('get', 'SELECT key, value FROM config where key = ?', ['version']).value; + if (version > 1) done(); + else done('Version isn\'t greater that 1. Version is ' + version); + }); + + it('Should be able to submit no segments', (done) => { + let json = { + videoID: 'noSegmentsTestVideoID', + userID: 'VIPUser-noSegments', + categorys: [ + 'sponsor' + ] + }; + + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json}, + (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)); + //} + } else { + console.log(body); + done("Status code was " + res.statusCode); + } + }); + }); + + it('Should return 400 for missing params', (done) => { + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json: {}}, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 400) { + done() + } else { + done("Status code was " + res.statusCode); + } + }); + }); + + it('Should return 400 for no categorys', (done) => { + let json = { + videoID: 'test', + userID: 'test', + categorys: [] + }; + + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json}, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 400) { + done() + } else { + done("Status code was " + res.statusCode); + } + }); + }); + + it('Should return 400 for no userID', (done) => { + let json = { + videoID: 'test', + userID: null, + categorys: ['sponsor'] + }; + + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json}, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 400) { + done() + } else { + done("Status code was " + res.statusCode); + } + }); + }); + + it('Should return 400 for no videoID', (done) => { + let json = { + videoID: null, + userID: 'test', + categorys: ['sponsor'] + }; + + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json}, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 400) { + done() + } else { + done("Status code was " + res.statusCode); + } + }); + }); + + it('Should return 400 object categorys)', (done) => { + let json = { + videoID: 'test', + userID: 'test', + categorys: {} + }; + + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json}, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 400) { + done() + } else { + done("Status code was " + res.statusCode); + } + }); + }); + + it('Should return 400 bad format categorys', (done) => { + let json = { + videoID: 'test', + userID: 'test', + categorys: 'sponsor' + }; + + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json}, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 400) { + done() + } else { + done("Status code was " + res.statusCode); + } + }); + }); + + it('Should return 403 if user is not VIP', (done) => { + let json = { + videoID: 'test', + userID: 'test', + categorys: [ + 'sponsor' + ] + }; + + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json}, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 403) { + done() + } else { + done("Status code was " + res.statusCode); + } + }); + }); +}); \ No newline at end of file From f53c541538c613254ba620fc7dc46ee4d713bbf8 Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Sat, 22 Aug 2020 03:05:51 +0100 Subject: [PATCH 02/14] added ability for vips to submit segments not in a video --- src/routes/getSkipSegments.js | 1 - src/routes/postNoSegments.js | 33 ++++++++++++++++++++++++++++++++- test/cases/postNoSegments.js | 33 +++++++++++++++++++++++---------- 3 files changed, 55 insertions(+), 12 deletions(-) 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); } From db3de8ce6f140cbbd26ac97eb87d9e5b3ea602bd Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Sat, 22 Aug 2020 03:21:10 +0100 Subject: [PATCH 03/14] changed copy/pasted comment --- databases/_upgrade_sponsorTimes_2.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/databases/_upgrade_sponsorTimes_2.sql b/databases/_upgrade_sponsorTimes_2.sql index 46c0fad..f6816bc 100644 --- a/databases/_upgrade_sponsorTimes_2.sql +++ b/databases/_upgrade_sponsorTimes_2.sql @@ -1,6 +1,6 @@ BEGIN TRANSACTION; -/* Add incorrectVotes field */ +/* Add new table: noSegments */ CREATE TABLE "noSegments" ( "videoID" TEXT NOT NULL, "userID" TEXT NOT NULL, From 6bde59c14ad0e6ede742c5928aefea5e0f6a0464 Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Sat, 22 Aug 2020 03:29:16 +0100 Subject: [PATCH 04/14] added extra sql test --- test/cases/postNoSegments.js | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/test/cases/postNoSegments.js b/test/cases/postNoSegments.js index 7d88e7d..7f89b77 100644 --- a/test/cases/postNoSegments.js +++ b/test/cases/postNoSegments.js @@ -12,6 +12,9 @@ describe('postNoSegments', () => { 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')"); + + db.exec("INSERT INTO noSegments (userID, videoID, category) VALUES ('" + getHash("VIPUser-noSegments") + "', 'no-segments-video-id-1', 'sponsor')"); + db.exec("INSERT INTO noSegments (userID, videoID, category) VALUES ('" + getHash("VIPUser-noSegments") + "', 'no-segments-video-id-1', 'intro')"); }); it('should update the database version when starting the application', (done) => { @@ -20,7 +23,7 @@ describe('postNoSegments', () => { else done('Version isn\'t greater that 1. Version is ' + version); }); - it('Should be able to submit categorys not in video', (done) => { + it('Should be able to submit categorys not in video (http response)', (done) => { let json = { videoID: 'no-segments-video-id', userID: 'VIPUser-noSegments', @@ -57,6 +60,37 @@ describe('postNoSegments', () => { }); }); + it('Should be able to submit categorys not in video (sql check)', (done) => { + let json = { + videoID: 'no-segments-video-id-1', + userID: 'VIPUser-noSegments', + categorys: [ + 'outro', + 'shilling', + 'shilling', + 'intro' + ] + }; + + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json}, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 200) { + let result = db.prepare('all', 'SELECT * FROM noSegments WHERE videoID = ?', ['no-segments-video-id-1']); + if (result.length !== 4) { + console.log(result); + done("Expected 4 entrys in db, got " + result.length); + } else { + done(); + } + } else { + console.log(body); + done("Status code was " + res.statusCode); + } + }); + }); + it('Should return 400 for missing params', (done) => { request.post(utils.getbaseURL() + "/api/postNoSegments", {json: {}}, From c946d2309ed8e687fc977286a91a2cbdcc117cbe Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Sat, 22 Aug 2020 03:58:27 +0100 Subject: [PATCH 05/14] add is VIP endpoint --- src/app.js | 5 ++++ src/routes/getIsUserVIP.js | 31 +++++++++++++++++++++ test/cases/getIsUserVIP.js | 57 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+) create mode 100644 src/routes/getIsUserVIP.js create mode 100644 test/cases/getIsUserVIP.js diff --git a/src/app.js b/src/app.js index ef6c554..8617566 100644 --- a/src/app.js +++ b/src/app.js @@ -22,6 +22,7 @@ var getTopUsers = require('./routes/getTopUsers.js'); var getTotalStats = require('./routes/getTotalStats.js'); var getDaysSavedFormatted = require('./routes/getDaysSavedFormatted.js'); var postNoSegments = require('./routes/postNoSegments.js'); +var getIsUserVIP = require('./routes/getIsUserVIP.js'); // Old Routes var oldGetVideoSponsorTimes = require('./routes/oldGetVideoSponsorTimes.js'); @@ -90,6 +91,10 @@ app.get('/api/getDaysSavedFormatted', getDaysSavedFormatted); //submit video containing no segments app.post('/api/postNoSegments', postNoSegments); +//get if user is a vip +app.get('/api/getIsUserVIP', getIsUserVIP); + + app.get('/database.db', function (req, res) { res.sendFile("./databases/sponsorTimes.db", { root: "./" }); }); diff --git a/src/routes/getIsUserVIP.js b/src/routes/getIsUserVIP.js new file mode 100644 index 0000000..d38ef9d --- /dev/null +++ b/src/routes/getIsUserVIP.js @@ -0,0 +1,31 @@ +var db = require('../databases/databases.js').db; + +var getHash = require('../utils/getHash.js'); +const logger = require('../utils/logger.js'); +const isUserVIP = require('../utils/isUserVIP.js'); + +module.exports = function getUsername (req, res) { + let userID = req.query.userID; + + if (userID == undefined) { + //invalid request + res.sendStatus(400); + return; + } + + //hash the userID + userID = getHash(userID); + + try { + let vipState = isUserVIP(userID); + res.status(200).json({ + hashedUserID: userID, + vip: vipState + }); + } catch (err) { + logger.error(err); + res.sendStatus(500); + + return; + } +} \ No newline at end of file diff --git a/test/cases/getIsUserVIP.js b/test/cases/getIsUserVIP.js new file mode 100644 index 0000000..0b25e7d --- /dev/null +++ b/test/cases/getIsUserVIP.js @@ -0,0 +1,57 @@ +var request = require('request'); +var utils = require('../utils.js'); +var db = require('../../src/databases/databases.js').db; +var getHash = require('../../src/utils/getHash.js'); + +describe('getSavedTimeForUser', () => { + before(() => { + db.exec("INSERT INTO vipUsers (userID) VALUES ('" + getHash("supertestman") + "')"); + }); + + it('Should be able to get a 200', (done) => { + request.get(utils.getbaseURL() + + "/api/getIsUserVIP?userID=supertestman", null, + (err, res, body) => { + if (err) done("couldn't call endpoint"); + else if (res.statusCode !== 200) done("non 200: " + res.statusCode); + else done(); // pass + }); + }); + + + it('Should get a 400 if no userID', (done) => { + request.get(utils.getbaseURL() + + "/api/getIsUserVIP", null, + (err, res, body) => { + if (err) done("couldn't call endpoint"); + else if (res.statusCode !== 400) done("non 400: " + res.statusCode); + else done(); // pass + }); + }); + + it('Should say a VIP is a VIP', (done) => { + request.get(utils.getbaseURL() + + "/api/getIsUserVIP?userID=supertestman", null, + (err, res, body) => { + if (err) done("couldn't call endpoint"); + else if (res.statusCode !== 200) done("non 200: " + res.statusCode); + else { + if (JSON.parse(body).vip === true) done(); // pass + else done("Result was non-vip when should have been vip"); + } + }); + }); + + it('Should say a normal user is not a VIP', (done) => { + request.get(utils.getbaseURL() + + "/api/getIsUserVIP?userID=regulartestman", null, + (err, res, body) => { + if (err) done("couldn't call endpoint"); + else if (res.statusCode !== 200) done("non 200: " + res.statusCode); + else { + if (JSON.parse(body).vip === false) done(); // pass + else done("Result was vip when should have been non-vip"); + } + }); + }); +}); \ No newline at end of file From a971072cb8be995133d4a07c87d31a8391d8e38b Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Sat, 22 Aug 2020 04:23:28 +0100 Subject: [PATCH 06/14] reject submissions that have meen marked as invalid by a vip --- src/routes/postSkipSegments.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/routes/postSkipSegments.js b/src/routes/postSkipSegments.js index 1dbaf21..40a3e25 100644 --- a/src/routes/postSkipSegments.js +++ b/src/routes/postSkipSegments.js @@ -157,6 +157,8 @@ module.exports = async function postSkipSegments(req, res) { //hash the ip 5000 times so no one can get it from the database let hashedIP = getHash(getIP(req) + config.globalSalt); + let noSegmentList = db.prepare('all', 'SELECT category from noSegments where videoID = ?', [videoID]); + // Check if all submissions are correct for (let i = 0; i < segments.length; i++) { if (segments[i] === undefined || segments[i].segment === undefined || segments[i].category === undefined) { @@ -165,6 +167,14 @@ module.exports = async function postSkipSegments(req, res) { return; } + // Reject segemnt if it's in the no segments list + if (noSegmentList.indexOf(segments[i].category) !== -1) { + // TODO: Do something about the fradulent submission + res.sendStatus(403); + return; + } + + let startTime = parseFloat(segments[i].segment[0]); let endTime = parseFloat(segments[i].segment[1]); From a5cf59d85467715bb61b108b63ed8f2ac7440dd0 Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Sat, 22 Aug 2020 20:39:13 +0100 Subject: [PATCH 07/14] improved error handling --- src/routes/postNoSegments.js | 26 +++++++++++++++++++++----- test/cases/postNoSegments.js | 4 ++++ 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/routes/postNoSegments.js b/src/routes/postNoSegments.js index f2e681b..6494095 100644 --- a/src/routes/postNoSegments.js +++ b/src/routes/postNoSegments.js @@ -16,7 +16,10 @@ module.exports = (req, res) => { || !Array.isArray(categorys) || categorys.length === 0 ) { - res.status(400).json({}); + res.status(400).json({ + status: 400, + message: 'Bad Format' + }); return; } @@ -25,7 +28,10 @@ module.exports = (req, res) => { let userIsVIP = isUserVIP(userID); if (!userIsVIP) { - res.status(403).json({}); + res.status(403).json({ + status: 403, + message: 'Must be a VIP to mark videos.' + }); return; } @@ -39,8 +45,10 @@ module.exports = (req, res) => { }); } - // get user categorys not already submitted + // get user categorys not already submitted that match accepted format let categorysToMark = categorys.filter((category) => { + return !!category.match(/^[a-zA-Z]+$/); + }).filter((category) => { return noSegmentList.indexOf(category) === -1; }); @@ -51,8 +59,16 @@ module.exports = (req, res) => { // create database entry categorysToMark.forEach((category) => { - db.prepare('run', "INSERT INTO noSegments (videoID, userID, category) VALUES(?, ?, ?)", [videoID, userID, category]); - //ogger.debug('submitting ' + category); + try { + db.prepare('run', "INSERT INTO noSegments (videoID, userID, category) VALUES(?, ?, ?)", [videoID, userID, category]); + } catch (err) { + logger.error("Error submitting 'noSegment' marker for category '" + category + "' for video '" + videoID + "'"); + logger.error(err); + res.status(500).json({ + status: 500, + message: "Internal Server Error: Could not write marker to the database." + }); + } }); res.status(200).json({ diff --git a/test/cases/postNoSegments.js b/test/cases/postNoSegments.js index 7f89b77..8489f61 100644 --- a/test/cases/postNoSegments.js +++ b/test/cases/postNoSegments.js @@ -31,6 +31,8 @@ describe('postNoSegments', () => { 'outro', 'shilling', 'shilling', + 'shil ling', + '', 'intro' ] }; @@ -68,6 +70,8 @@ describe('postNoSegments', () => { 'outro', 'shilling', 'shilling', + 'shil ling', + '', 'intro' ] }; From 5f23fdd590e69685c26943286900fb6d4148478e Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Sun, 30 Aug 2020 21:47:02 +0100 Subject: [PATCH 08/14] Added tests and finished no-segments interface. --- src/routes/postSkipSegments.js | 9 +- ...{postNoSegments.js => noSegmentRecords.js} | 103 +++++++++++++++++- 2 files changed, 107 insertions(+), 5 deletions(-) rename test/cases/{postNoSegments.js => noSegmentRecords.js} (67%) diff --git a/src/routes/postSkipSegments.js b/src/routes/postSkipSegments.js index 15ab309..08380fc 100644 --- a/src/routes/postSkipSegments.js +++ b/src/routes/postSkipSegments.js @@ -187,8 +187,7 @@ module.exports = async function postSkipSegments(req, res) { //hash the ip 5000 times so no one can get it from the database let hashedIP = getHash(getIP(req) + config.globalSalt); - let noSegmentList = db.prepare('all', 'SELECT category from noSegments where videoID = ?', [videoID]); - + let noSegmentList = db.prepare('all', 'SELECT category from noSegments where videoID = ?', [videoID]).map((list) => { return list.category }); // Check if all submissions are correct for (let i = 0; i < segments.length; i++) { if (segments[i] === undefined || segments[i].segment === undefined || segments[i].category === undefined) { @@ -200,7 +199,11 @@ module.exports = async function postSkipSegments(req, res) { // Reject segemnt if it's in the no segments list if (noSegmentList.indexOf(segments[i].category) !== -1) { // TODO: Do something about the fradulent submission - res.sendStatus(403); + logger.warn("Caught a no-segment submission. userID: '" + userID + "', videoID: '" + videoID + "', category: '" + segments[i].category + "'"); + res.status(403).send( + "Request rejected by auto moderator: This video has been reported as not containing any segments with the category '" + + segments[i].category + "'. If you believe this is incorrect, contact someone on Discord." + ); return; } diff --git a/test/cases/postNoSegments.js b/test/cases/noSegmentRecords.js similarity index 67% rename from test/cases/postNoSegments.js rename to test/cases/noSegmentRecords.js index 8489f61..d902478 100644 --- a/test/cases/postNoSegments.js +++ b/test/cases/noSegmentRecords.js @@ -4,9 +4,10 @@ var utils = require('../utils.js'); const getHash = require('../../src/utils/getHash.js'); var databases = require('../../src/databases/databases.js'); +const logger = require('../../src/utils/logger.js'); var db = databases.db; -describe('postNoSegments', () => { +describe('noSegmentRecords', () => { before(() => { db.exec("INSERT INTO vipUsers (userID) VALUES ('" + getHash("VIPUser-noSegments") + "')"); @@ -15,9 +16,10 @@ describe('postNoSegments', () => { db.exec("INSERT INTO noSegments (userID, videoID, category) VALUES ('" + getHash("VIPUser-noSegments") + "', 'no-segments-video-id-1', 'sponsor')"); db.exec("INSERT INTO noSegments (userID, videoID, category) VALUES ('" + getHash("VIPUser-noSegments") + "', 'no-segments-video-id-1', 'intro')"); + db.exec("INSERT INTO noSegments (userID, videoID, category) VALUES ('" + getHash("VIPUser-noSegments") + "', 'noSubmitVideo', 'sponsor')"); }); - it('should update the database version when starting the application', (done) => { + it('Should update the database version when starting the application', (done) => { let version = db.prepare('get', 'SELECT key, value FROM config where key = ?', ['version']).value; if (version > 1) done(); else done('Version isn\'t greater that 1. Version is ' + version); @@ -223,4 +225,101 @@ describe('postNoSegments', () => { } }); }); + + /* + * Submission tests in this file do not check database records, only status codes. + * To test the submission code properly see ./test/cases/postSkipSegments.js + */ + + it('Should not be able to submit a segment to a video with a no-segment record (single submission)', (done) => { + request.post(utils.getbaseURL() + + "/api/postVideoSponsorTimes", { + json: { + userID: "testman42", + videoID: "noSubmitVideo", + segments: [{ + segment: [20, 40], + category: "sponsor" + }] + } + }, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 403) { + done() + } else { + done("Status code was " + res.statusCode); + } + }); + }); + + it('Should not be able to submit segments to a video where any of the submissions with a no-segment record', (done) => { + request.post(utils.getbaseURL() + + "/api/postVideoSponsorTimes", { + json: { + userID: "testman42", + videoID: "noSubmitVideo", + segments: [{ + segment: [20, 40], + category: "sponsor" + },{ + segment: [50, 60], + category: "intro" + }] + } + }, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 403) { + done() + } else { + done("Status code was " + res.statusCode); + } + }); + }); + + + it('Should be able to submit a segment to a video with a different no-segment record', (done) => { + request.post(utils.getbaseURL() + + "/api/postVideoSponsorTimes", { + json: { + userID: "testman42", + videoID: "noSubmitVideo", + segments: [{ + segment: [20, 40], + category: "intro" + }] + } + }, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 200) { + done() + } else { + done("Status code was " + res.statusCode); + } + }); + }); + + it('Should be able to submit a segment to a video with no no-segment records', (done) => { + request.post(utils.getbaseURL() + + "/api/postVideoSponsorTimes", { + json: { + userID: "testman42", + videoID: "normalVideo", + segments: [{ + segment: [20, 40], + category: "intro" + }] + } + }, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 200) { + done() + } else { + done("Status code was " + res.statusCode); + } + }); + }); }); \ No newline at end of file From 36ce803828bd2dfec60037e5a871d0f815bd4a35 Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Mon, 31 Aug 2020 01:44:30 +0100 Subject: [PATCH 09/14] Update src/routes/getIsUserVIP.js Co-authored-by: Ajay Ramachandran --- src/routes/getIsUserVIP.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/getIsUserVIP.js b/src/routes/getIsUserVIP.js index d38ef9d..63efd02 100644 --- a/src/routes/getIsUserVIP.js +++ b/src/routes/getIsUserVIP.js @@ -4,7 +4,7 @@ var getHash = require('../utils/getHash.js'); const logger = require('../utils/logger.js'); const isUserVIP = require('../utils/isUserVIP.js'); -module.exports = function getUsername (req, res) { +module.exports = (req, res) => { let userID = req.query.userID; if (userID == undefined) { @@ -28,4 +28,4 @@ module.exports = function getUsername (req, res) { return; } -} \ No newline at end of file +} From 1e643c1c0740d6b2c3f6849152bc28f4110c3c84 Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Mon, 31 Aug 2020 01:48:41 +0100 Subject: [PATCH 10/14] categorys -> categories --- src/routes/postNoSegments.js | 20 ++++++++++---------- test/cases/noSegmentRecords.js | 26 +++++++++++++------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/routes/postNoSegments.js b/src/routes/postNoSegments.js index 6494095..6b2b7aa 100644 --- a/src/routes/postNoSegments.js +++ b/src/routes/postNoSegments.js @@ -7,14 +7,14 @@ module.exports = (req, res) => { // Collect user input data let videoID = req.body.videoID; let userID = req.body.userID; - let categorys = req.body.categorys; + let categories = req.body.categories; // Check input data is valid if (!videoID || !userID - || !categorys - || !Array.isArray(categorys) - || categorys.length === 0 + || !categories + || !Array.isArray(categories) + || categories.length === 0 ) { res.status(400).json({ status: 400, @@ -45,20 +45,20 @@ module.exports = (req, res) => { }); } - // get user categorys not already submitted that match accepted format - let categorysToMark = categorys.filter((category) => { + // get user categories not already submitted that match accepted format + let categoriesToMark = categories.filter((category) => { return !!category.match(/^[a-zA-Z]+$/); }).filter((category) => { return noSegmentList.indexOf(category) === -1; }); // remove any duplicates - categorysToMark = categorysToMark.filter((category, index) => { - return categorysToMark.indexOf(category) === index; + categoriesToMark = categoriesToMark.filter((category, index) => { + return categoriesToMark.indexOf(category) === index; }); // create database entry - categorysToMark.forEach((category) => { + categoriesToMark.forEach((category) => { try { db.prepare('run', "INSERT INTO noSegments (videoID, userID, category) VALUES(?, ?, ?)", [videoID, userID, category]); } catch (err) { @@ -73,6 +73,6 @@ module.exports = (req, res) => { res.status(200).json({ status: 200, - submitted: categorysToMark + submitted: categoriesToMark }); }; \ No newline at end of file diff --git a/test/cases/noSegmentRecords.js b/test/cases/noSegmentRecords.js index d902478..a09264f 100644 --- a/test/cases/noSegmentRecords.js +++ b/test/cases/noSegmentRecords.js @@ -25,11 +25,11 @@ describe('noSegmentRecords', () => { else done('Version isn\'t greater that 1. Version is ' + version); }); - it('Should be able to submit categorys not in video (http response)', (done) => { + it('Should be able to submit categories not in video (http response)', (done) => { let json = { videoID: 'no-segments-video-id', userID: 'VIPUser-noSegments', - categorys: [ + categories: [ 'outro', 'shilling', 'shilling', @@ -64,11 +64,11 @@ describe('noSegmentRecords', () => { }); }); - it('Should be able to submit categorys not in video (sql check)', (done) => { + it('Should be able to submit categories not in video (sql check)', (done) => { let json = { videoID: 'no-segments-video-id-1', userID: 'VIPUser-noSegments', - categorys: [ + categories: [ 'outro', 'shilling', 'shilling', @@ -110,11 +110,11 @@ describe('noSegmentRecords', () => { }); }); - it('Should return 400 for no categorys', (done) => { + it('Should return 400 for no categories', (done) => { let json = { videoID: 'test', userID: 'test', - categorys: [] + categories: [] }; request.post(utils.getbaseURL() @@ -133,7 +133,7 @@ describe('noSegmentRecords', () => { let json = { videoID: 'test', userID: null, - categorys: ['sponsor'] + categories: ['sponsor'] }; request.post(utils.getbaseURL() @@ -152,7 +152,7 @@ describe('noSegmentRecords', () => { let json = { videoID: null, userID: 'test', - categorys: ['sponsor'] + categories: ['sponsor'] }; request.post(utils.getbaseURL() @@ -167,11 +167,11 @@ describe('noSegmentRecords', () => { }); }); - it('Should return 400 object categorys)', (done) => { + it('Should return 400 object categories)', (done) => { let json = { videoID: 'test', userID: 'test', - categorys: {} + categories: {} }; request.post(utils.getbaseURL() @@ -186,11 +186,11 @@ describe('noSegmentRecords', () => { }); }); - it('Should return 400 bad format categorys', (done) => { + it('Should return 400 bad format categories', (done) => { let json = { videoID: 'test', userID: 'test', - categorys: 'sponsor' + categories: 'sponsor' }; request.post(utils.getbaseURL() @@ -209,7 +209,7 @@ describe('noSegmentRecords', () => { let json = { videoID: 'test', userID: 'test', - categorys: [ + categories: [ 'sponsor' ] }; From 754d3762dfb81a42a0de974f1944f56f7cb7176b Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Mon, 31 Aug 2020 01:50:36 +0100 Subject: [PATCH 11/14] fixed test category name --- test/cases/getIsUserVIP.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cases/getIsUserVIP.js b/test/cases/getIsUserVIP.js index 0b25e7d..a971017 100644 --- a/test/cases/getIsUserVIP.js +++ b/test/cases/getIsUserVIP.js @@ -3,7 +3,7 @@ var utils = require('../utils.js'); var db = require('../../src/databases/databases.js').db; var getHash = require('../../src/utils/getHash.js'); -describe('getSavedTimeForUser', () => { +describe('getIsUserVIP', () => { before(() => { db.exec("INSERT INTO vipUsers (userID) VALUES ('" + getHash("supertestman") + "')"); }); From aa878482d31332a409deb072ff7348517f6c242c Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Mon, 31 Aug 2020 01:55:38 +0100 Subject: [PATCH 12/14] removed status from no segment responses --- src/routes/postNoSegments.js | 4 ---- test/cases/noSegmentRecords.js | 1 - 2 files changed, 5 deletions(-) diff --git a/src/routes/postNoSegments.js b/src/routes/postNoSegments.js index 6b2b7aa..6aab052 100644 --- a/src/routes/postNoSegments.js +++ b/src/routes/postNoSegments.js @@ -17,7 +17,6 @@ module.exports = (req, res) => { || categories.length === 0 ) { res.status(400).json({ - status: 400, message: 'Bad Format' }); return; @@ -29,7 +28,6 @@ module.exports = (req, res) => { if (!userIsVIP) { res.status(403).json({ - status: 403, message: 'Must be a VIP to mark videos.' }); return; @@ -65,14 +63,12 @@ module.exports = (req, res) => { logger.error("Error submitting 'noSegment' marker for category '" + category + "' for video '" + videoID + "'"); logger.error(err); res.status(500).json({ - status: 500, message: "Internal Server Error: Could not write marker to the database." }); } }); res.status(200).json({ - status: 200, submitted: categoriesToMark }); }; \ No newline at end of file diff --git a/test/cases/noSegmentRecords.js b/test/cases/noSegmentRecords.js index a09264f..3989258 100644 --- a/test/cases/noSegmentRecords.js +++ b/test/cases/noSegmentRecords.js @@ -40,7 +40,6 @@ describe('noSegmentRecords', () => { }; let expected = { - status: 200, submitted: [ 'outro', 'shilling' From 00534d91d46c343c294c59175349489bb89d908e Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Mon, 31 Aug 2020 03:09:47 +0100 Subject: [PATCH 13/14] added underscore to category format check --- src/routes/postNoSegments.js | 2 +- test/cases/noSegmentRecords.js | 84 ++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/src/routes/postNoSegments.js b/src/routes/postNoSegments.js index 6aab052..cdbfce9 100644 --- a/src/routes/postNoSegments.js +++ b/src/routes/postNoSegments.js @@ -45,7 +45,7 @@ module.exports = (req, res) => { // get user categories not already submitted that match accepted format let categoriesToMark = categories.filter((category) => { - return !!category.match(/^[a-zA-Z]+$/); + return !!category.match(/^[_a-zA-Z]+$/); }).filter((category) => { return noSegmentList.indexOf(category) === -1; }); diff --git a/test/cases/noSegmentRecords.js b/test/cases/noSegmentRecords.js index 3989258..d439b13 100644 --- a/test/cases/noSegmentRecords.js +++ b/test/cases/noSegmentRecords.js @@ -96,6 +96,90 @@ describe('noSegmentRecords', () => { }); }); + it('Should be able to submit categories with _ in the category', (done) => { + let json = { + videoID: 'underscore', + userID: 'VIPUser-noSegments', + categories: [ + 'word_word', + ] + }; + + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json}, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 200) { + let result = db.prepare('all', 'SELECT * FROM noSegments WHERE videoID = ?', ['underscore']); + if (result.length !== 1) { + console.log(result); + done("Expected 1 entrys in db, got " + result.length); + } else { + done(); + } + } else { + console.log(body); + done("Status code was " + res.statusCode); + } + }); + }); + + it('Should be able to submit categories with upper and lower case in the category', (done) => { + let json = { + videoID: 'bothCases', + userID: 'VIPUser-noSegments', + categories: [ + 'wordWord', + ] + }; + + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json}, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 200) { + let result = db.prepare('all', 'SELECT * FROM noSegments WHERE videoID = ?', ['bothCases']); + if (result.length !== 1) { + console.log(result); + done("Expected 1 entrys in db, got " + result.length); + } else { + done(); + } + } else { + console.log(body); + done("Status code was " + res.statusCode); + } + }); + }); + + it('Should not be able to submit categories with $ in the category', (done) => { + let json = { + videoID: 'specialChar', + userID: 'VIPUser-noSegments', + categories: [ + 'word&word', + ] + }; + + request.post(utils.getbaseURL() + + "/api/postNoSegments", {json}, + (err, res, body) => { + if (err) done(err); + else if (res.statusCode === 200) { + let result = db.prepare('all', 'SELECT * FROM noSegments WHERE videoID = ?', ['specialChar']); + if (result.length !== 0) { + console.log(result); + done("Expected 0 entrys in db, got " + result.length); + } else { + done(); + } + } else { + console.log(body); + done("Status code was " + res.statusCode); + } + }); + }); + it('Should return 400 for missing params', (done) => { request.post(utils.getbaseURL() + "/api/postNoSegments", {json: {}}, From e33062feeb95df4c6bd6bf85ffd1d70e1b01016a Mon Sep 17 00:00:00 2001 From: Joe Dowd Date: Tue, 1 Sep 2020 21:37:54 +0100 Subject: [PATCH 14/14] updated endpoints --- src/app.js | 4 ++-- test/cases/getIsUserVIP.js | 8 ++++---- test/cases/noSegmentRecords.js | 24 ++++++++++++------------ 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/app.js b/src/app.js index 8cb937f..45715b7 100644 --- a/src/app.js +++ b/src/app.js @@ -92,10 +92,10 @@ app.get('/api/getTotalStats', getTotalStats); app.get('/api/getDaysSavedFormatted', getDaysSavedFormatted); //submit video containing no segments -app.post('/api/postNoSegments', postNoSegments); +app.post('/api/noSegments', postNoSegments); //get if user is a vip -app.get('/api/getIsUserVIP', getIsUserVIP); +app.get('/api/isUserVIP', getIsUserVIP); app.get('/database.db', function (req, res) { diff --git a/test/cases/getIsUserVIP.js b/test/cases/getIsUserVIP.js index a971017..1bbfbfe 100644 --- a/test/cases/getIsUserVIP.js +++ b/test/cases/getIsUserVIP.js @@ -10,7 +10,7 @@ describe('getIsUserVIP', () => { it('Should be able to get a 200', (done) => { request.get(utils.getbaseURL() - + "/api/getIsUserVIP?userID=supertestman", null, + + "/api/isUserVIP?userID=supertestman", null, (err, res, body) => { if (err) done("couldn't call endpoint"); else if (res.statusCode !== 200) done("non 200: " + res.statusCode); @@ -21,7 +21,7 @@ describe('getIsUserVIP', () => { it('Should get a 400 if no userID', (done) => { request.get(utils.getbaseURL() - + "/api/getIsUserVIP", null, + + "/api/isUserVIP", null, (err, res, body) => { if (err) done("couldn't call endpoint"); else if (res.statusCode !== 400) done("non 400: " + res.statusCode); @@ -31,7 +31,7 @@ describe('getIsUserVIP', () => { it('Should say a VIP is a VIP', (done) => { request.get(utils.getbaseURL() - + "/api/getIsUserVIP?userID=supertestman", null, + + "/api/isUserVIP?userID=supertestman", null, (err, res, body) => { if (err) done("couldn't call endpoint"); else if (res.statusCode !== 200) done("non 200: " + res.statusCode); @@ -44,7 +44,7 @@ describe('getIsUserVIP', () => { it('Should say a normal user is not a VIP', (done) => { request.get(utils.getbaseURL() - + "/api/getIsUserVIP?userID=regulartestman", null, + + "/api/isUserVIP?userID=regulartestman", null, (err, res, body) => { if (err) done("couldn't call endpoint"); else if (res.statusCode !== 200) done("non 200: " + res.statusCode); diff --git a/test/cases/noSegmentRecords.js b/test/cases/noSegmentRecords.js index d439b13..91dea2a 100644 --- a/test/cases/noSegmentRecords.js +++ b/test/cases/noSegmentRecords.js @@ -47,7 +47,7 @@ describe('noSegmentRecords', () => { }; request.post(utils.getbaseURL() - + "/api/postNoSegments", {json}, + + "/api/noSegments", {json}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 200) { @@ -78,7 +78,7 @@ describe('noSegmentRecords', () => { }; request.post(utils.getbaseURL() - + "/api/postNoSegments", {json}, + + "/api/noSegments", {json}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 200) { @@ -106,7 +106,7 @@ describe('noSegmentRecords', () => { }; request.post(utils.getbaseURL() - + "/api/postNoSegments", {json}, + + "/api/noSegments", {json}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 200) { @@ -134,7 +134,7 @@ describe('noSegmentRecords', () => { }; request.post(utils.getbaseURL() - + "/api/postNoSegments", {json}, + + "/api/noSegments", {json}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 200) { @@ -162,7 +162,7 @@ describe('noSegmentRecords', () => { }; request.post(utils.getbaseURL() - + "/api/postNoSegments", {json}, + + "/api/noSegments", {json}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 200) { @@ -182,7 +182,7 @@ describe('noSegmentRecords', () => { it('Should return 400 for missing params', (done) => { request.post(utils.getbaseURL() - + "/api/postNoSegments", {json: {}}, + + "/api/noSegments", {json: {}}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 400) { @@ -201,7 +201,7 @@ describe('noSegmentRecords', () => { }; request.post(utils.getbaseURL() - + "/api/postNoSegments", {json}, + + "/api/noSegments", {json}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 400) { @@ -220,7 +220,7 @@ describe('noSegmentRecords', () => { }; request.post(utils.getbaseURL() - + "/api/postNoSegments", {json}, + + "/api/noSegments", {json}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 400) { @@ -239,7 +239,7 @@ describe('noSegmentRecords', () => { }; request.post(utils.getbaseURL() - + "/api/postNoSegments", {json}, + + "/api/noSegments", {json}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 400) { @@ -258,7 +258,7 @@ describe('noSegmentRecords', () => { }; request.post(utils.getbaseURL() - + "/api/postNoSegments", {json}, + + "/api/noSegments", {json}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 400) { @@ -277,7 +277,7 @@ describe('noSegmentRecords', () => { }; request.post(utils.getbaseURL() - + "/api/postNoSegments", {json}, + + "/api/noSegments", {json}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 400) { @@ -298,7 +298,7 @@ describe('noSegmentRecords', () => { }; request.post(utils.getbaseURL() - + "/api/postNoSegments", {json}, + + "/api/noSegments", {json}, (err, res, body) => { if (err) done(err); else if (res.statusCode === 403) {