diff --git a/src/routes/postSkipSegments.js b/src/routes/postSkipSegments.js index d8fe2a3..d410568 100644 --- a/src/routes/postSkipSegments.js +++ b/src/routes/postSkipSegments.js @@ -101,13 +101,15 @@ async function autoModerateSubmission(submission, callback) { } else { // Check to see if video exists if (data.pageInfo.totalResults === 0) { - callback("No video exists with id " + submission.videoID); + return "No video exists with id " + submission.videoID; } else { let duration = data.items[0].contentDetails.duration; duration = isoDurations.toSeconds(isoDurations.parse(duration)); - - // Reject submission if over 80% of the video - if ((submission.endTime - submission.startTime) > (duration/100)*80) { + if (duration == 0) { + // Allow submission if the duration is 0 (bug in youtube api) + return false; + } else if ((submission.endTime - submission.startTime) > (duration/100)*80) { + // Reject submission if over 80% of the video return "Sponsor segment is over 80% of the video."; } else { return false; diff --git a/test/cases/postSkipSegments.js b/test/cases/postSkipSegments.js index 05c7374..3f1492f 100644 --- a/test/cases/postSkipSegments.js +++ b/test/cases/postSkipSegments.js @@ -99,6 +99,16 @@ describe('postSkipSegments', () => { else done("non 403 status code: " + res.statusCode + " ("+body+")"); }); }); + + it('Should be allowed if youtube thinks duration is 0', (done) => { + request.get(utils.getbaseURL() + + "/api/postVideoSponsorTimes?videoID=noDuration&startTime=30&endTime=10000&userID=testing", null, + (err, res, body) => { + if (err) done("Couldn't call endpoint"); + else if (res.statusCode === 200) done(); // pass + else done("non 200 status code: " + res.statusCode + " ("+body+")"); + }); + }); it('Should be rejected if not a valid videoID', (done) => { request.get(utils.getbaseURL() diff --git a/test/youtubeMock.js b/test/youtubeMock.js index 0a9998d..dd64898 100644 --- a/test/youtubeMock.js +++ b/test/youtubeMock.js @@ -10,14 +10,35 @@ YouTubeAPI.videos.list({ const YouTubeAPI = { videos: { list: (obj, callback) => { - if (obj.videoID === "knownWrongID") { + if (obj.id === "knownWrongID") { callback(undefined, { pageInfo: { totalResults: 0 }, items: [] }); - } else { + } if (obj.id === "noDuration") { + callback(undefined, { + pageInfo: { + totalResults: 1 + }, + items: [ + { + contentDetails: { + duration: "PT0S" + }, + snippet: { + title: "Example Title", + thumbnails: { + maxres: { + url: "https://sponsor.ajay.app/LogoSponsorBlockSimple256px.png" + } + } + } + } + ] + }); + } else { callback(undefined, { pageInfo: { totalResults: 1