SponsorBlockServer/test/cases/getSkipSegments.ts

232 lines
11 KiB
TypeScript
Raw Normal View History

2021-01-06 01:43:28 +01:00
import fetch from 'node-fetch';
2020-10-17 20:56:54 +02:00
import {db} from '../../src/databases/databases';
import {Done, getbaseURL} from '../utils';
import {getHash} from '../../src/utils/getHash';
describe('getSkipSegments', () => {
2021-03-02 03:37:35 +01:00
before(async () => {
2021-03-07 06:21:56 +01:00
let startOfQuery = 'INSERT INTO "sponsorTimes" ("videoID", "startTime", "endTime", "votes", "locked", "UUID", "userID", "timeSubmitted", views, category, "shadowHidden", "hashedVideoID") VALUES';
2021-03-02 03:37:35 +01:00
await db.prepare("run", startOfQuery + "('testtesttest', 1, 11, 2, 0, '1-uuid-0', 'testman', 0, 50, 'sponsor', 0, '" + getHash('testtesttest', 1) + "')");
await db.prepare("run", startOfQuery + "('testtesttest', 20, 33, 2, 0, '1-uuid-2', 'testman', 0, 50, 'intro', 0, '" + getHash('testtesttest', 1) + "')");
await db.prepare("run", startOfQuery + "('testtesttest,test', 1, 11, 2, 0, '1-uuid-1', 'testman', 0, 50, 'sponsor', 0, '" + getHash('testtesttest,test', 1) + "')");
await db.prepare("run", startOfQuery + "('test3', 1, 11, 2, 0, '1-uuid-4', 'testman', 0, 50, 'sponsor', 0, '" + getHash('test3', 1) + "')");
await db.prepare("run", startOfQuery + "('test3', 7, 22, -3, 0, '1-uuid-5', 'testman', 0, 50, 'sponsor', 0, '" + getHash('test3', 1) + "')");
await db.prepare("run", startOfQuery + "('multiple', 1, 11, 2, 0, '1-uuid-6', 'testman', 0, 50, 'intro', 0, '" + getHash('multiple', 1) + "')");
await db.prepare("run", startOfQuery + "('multiple', 20, 33, 2, 0, '1-uuid-7', 'testman', 0, 50, 'intro', 0, '" + getHash('multiple', 1) + "')");
await db.prepare("run", startOfQuery + "('locked', 20, 33, 2, 1, '1-uuid-locked-8', 'testman', 0, 50, 'intro', 0, '" + getHash('locked', 1) + "')");
await db.prepare("run", startOfQuery + "('locked', 20, 34, 100000, 0, '1-uuid-9', 'testman', 0, 50, 'intro', 0, '" + getHash('locked', 1) + "')");
return;
2020-10-17 20:56:54 +02:00
});
2021-03-02 03:37:35 +01:00
it('Should be able to get a time by category 1', () => {
2021-01-06 01:43:28 +01:00
fetch(getbaseURL() + "/api/skipSegments?videoID=testtesttest&category=sponsor")
.then(async res => {
2021-03-02 03:37:35 +01:00
if (res.status !== 200) return ("Status code was: " + res.status);
2021-01-06 01:43:28 +01:00
else {
const data = await res.json();
if (data.length === 1 && data[0].segment[0] === 1 && data[0].segment[1] === 11
&& data[0].category === "sponsor" && data[0].UUID === "1-uuid-0") {
2021-03-02 03:37:35 +01:00
return;
2021-01-06 01:43:28 +01:00
} else {
2021-03-02 03:37:35 +01:00
return ("Received incorrect body: " + (await res.text()));
2020-10-17 20:56:54 +02:00
}
2021-01-06 01:43:28 +01:00
}
})
2021-03-02 03:37:35 +01:00
.catch(err => "Couldn't call endpoint");
2020-10-17 20:56:54 +02:00
});
2021-03-02 03:37:35 +01:00
it('Should be able to get a time by category 2', () => {
2021-01-06 01:43:28 +01:00
fetch(getbaseURL() + "/api/skipSegments?videoID=testtesttest&category=intro")
.then(async res => {
2021-03-02 03:37:35 +01:00
if (res.status !== 200) return ("Status code was: " + res.status);
2021-01-06 01:43:28 +01:00
else {
const data = await res.json();
if (data.length === 1 && data[0].segment[0] === 20 && data[0].segment[1] === 33
&& data[0].category === "intro" && data[0].UUID === "1-uuid-2") {
2021-03-02 03:37:35 +01:00
return;
2021-01-06 01:43:28 +01:00
} else {
2021-03-02 03:37:35 +01:00
return ("Received incorrect body: " + (await res.text()));
2020-10-17 20:56:54 +02:00
}
2021-01-06 01:43:28 +01:00
}
})
2021-03-02 03:37:35 +01:00
.catch(err => ("Couldn't call endpoint"));
2020-10-17 20:56:54 +02:00
});
2021-03-02 03:37:35 +01:00
it('Should be able to get a time by categories array', () => {
2021-01-06 01:43:28 +01:00
fetch(getbaseURL() + "/api/skipSegments?videoID=testtesttest&categories=[\"sponsor\"]")
.then(async res => {
2021-03-02 03:37:35 +01:00
if (res.status !== 200) return ("Status code was: " + res.status);
2021-01-06 01:43:28 +01:00
else {
const data = await res.json();
if (data.length === 1 && data[0].segment[0] === 1 && data[0].segment[1] === 11
&& data[0].category === "sponsor" && data[0].UUID === "1-uuid-0") {
2021-03-02 03:37:35 +01:00
return;
2021-01-06 01:43:28 +01:00
} else {
2021-03-02 03:37:35 +01:00
return ("Received incorrect body: " + (await res.text()));
2020-10-17 20:56:54 +02:00
}
2021-01-06 01:43:28 +01:00
}
})
2021-03-02 03:37:35 +01:00
.catch(err => ("Couldn't call endpoint"));
2020-10-17 20:56:54 +02:00
});
2021-03-02 03:37:35 +01:00
it('Should be able to get a time by categories array 2', () => {
2021-01-06 01:43:28 +01:00
fetch(getbaseURL() + "/api/skipSegments?videoID=testtesttest&categories=[\"intro\"]")
.then(async res => {
2021-03-02 03:37:35 +01:00
if (res.status !== 200) return ("Status code was: " + res.status);
2021-01-06 01:43:28 +01:00
else {
const data = await res.json();
if (data.length === 1 && data[0].segment[0] === 20 && data[0].segment[1] === 33
&& data[0].category === "intro" && data[0].UUID === "1-uuid-2") {
2021-03-02 03:37:35 +01:00
return;
2021-01-06 01:43:28 +01:00
} else {
2021-03-02 03:37:35 +01:00
return ("Received incorrect body: " + (await res.text()));
2020-10-17 20:56:54 +02:00
}
2021-01-06 01:43:28 +01:00
}
})
2021-03-02 03:37:35 +01:00
.catch(err => ("Couldn't call endpoint"));
2020-10-17 20:56:54 +02:00
});
2021-03-02 03:37:35 +01:00
it('Should be able to get multiple times by category', () => {
2021-01-06 01:43:28 +01:00
fetch(getbaseURL() + "/api/skipSegments?videoID=multiple&categories=[\"intro\"]")
.then(async res => {
2021-03-02 03:37:35 +01:00
if (res.status !== 200) return ("Status code was: " + res.status);
2021-01-06 01:43:28 +01:00
else {
const body = await res.text();
const data = JSON.parse(body);
if (data.length === 2) {
let success = true;
for (const segment of data) {
if ((segment.segment[0] !== 20 || segment.segment[1] !== 33
|| segment.category !== "intro" || segment.UUID !== "1-uuid-7") &&
(segment.segment[0] !== 1 || segment.segment[1] !== 11
|| segment.category !== "intro" || segment.UUID !== "1-uuid-6")) {
success = false;
break;
2020-10-17 20:56:54 +02:00
}
}
2021-01-06 01:43:28 +01:00
2021-03-02 03:37:35 +01:00
if (success) return;
else return ("Received incorrect body: " + body);
2021-01-06 01:43:28 +01:00
} else {
2021-03-02 03:37:35 +01:00
return ("Received incorrect body: " + body);
2020-10-17 20:56:54 +02:00
}
2021-01-06 01:43:28 +01:00
}
})
2021-03-02 03:37:35 +01:00
.catch(err => ("Couldn't call endpoint\n\n" + err));
2020-10-17 20:56:54 +02:00
});
2021-03-02 03:37:35 +01:00
it('Should be able to get multiple times by multiple categories', () => {
2021-01-06 01:43:28 +01:00
fetch(getbaseURL() + "/api/skipSegments?videoID=testtesttest&categories=[\"sponsor\", \"intro\"]")
.then(async res => {
2021-03-02 03:37:35 +01:00
if (res.status !== 200) return ("Status code was: " + res.status);
2021-01-06 01:43:28 +01:00
else {
const body = await res.text();
const data = JSON.parse(body);
if (data.length === 2) {
let success = true;
for (const segment of data) {
if ((segment.segment[0] !== 20 || segment.segment[1] !== 33
|| segment.category !== "intro" || segment.UUID !== "1-uuid-2") &&
(segment.segment[0] !== 1 || segment.segment[1] !== 11
|| segment.category !== "sponsor" || segment.UUID !== "1-uuid-0")) {
success = false;
break;
2020-10-17 20:56:54 +02:00
}
}
2021-01-06 01:43:28 +01:00
2021-03-02 03:37:35 +01:00
if (success) return;
else return ("Received incorrect body: " + body);
2021-01-06 01:43:28 +01:00
} else {
2021-03-02 03:37:35 +01:00
return ("Received incorrect body: " + body);
2020-10-17 20:56:54 +02:00
}
2021-01-06 01:43:28 +01:00
}
})
2021-03-02 03:37:35 +01:00
.catch(err => ("Couldn't call endpoint"));
2020-10-17 20:56:54 +02:00
});
2021-03-02 03:37:35 +01:00
it('Should be possible to send unexpected query parameters', () => {
2021-01-06 01:43:28 +01:00
fetch(getbaseURL() + "/api/skipSegments?videoID=testtesttest&fakeparam=hello&category=sponsor")
.then(async res => {
2021-03-02 03:37:35 +01:00
if (res.status !== 200) return ("Status code was: " + res.status);
2021-01-06 01:43:28 +01:00
else {
const body = await res.text();
const data = JSON.parse(body);
if (data.length === 1 && data[0].segment[0] === 1 && data[0].segment[1] === 11
&& data[0].category === "sponsor" && data[0].UUID === "1-uuid-0") {
2021-03-02 03:37:35 +01:00
return;
2021-01-06 01:43:28 +01:00
} else {
2021-03-02 03:37:35 +01:00
return ("Received incorrect body: " + body);
2020-10-17 20:56:54 +02:00
}
2021-01-06 01:43:28 +01:00
}
})
2021-03-02 03:37:35 +01:00
.catch(err => ("Couldn't call endpoint"));
2020-10-17 20:56:54 +02:00
});
2021-03-02 03:37:35 +01:00
it('Low voted submissions should be hidden', () => {
2021-01-06 01:43:28 +01:00
fetch(getbaseURL() + "/api/skipSegments?videoID=test3&category=sponsor")
.then(async res => {
2021-03-02 03:37:35 +01:00
if (res.status !== 200) return ("Status code was: " + res.status);
2021-01-06 01:43:28 +01:00
else {
const body = await res.text();
const data = JSON.parse(body);
if (data.length === 1 && data[0].segment[0] === 1 && data[0].segment[1] === 11
&& data[0].category === "sponsor" && data[0].UUID === "1-uuid-4") {
2021-03-02 03:37:35 +01:00
return;
2021-01-06 01:43:28 +01:00
} else {
2021-03-02 03:37:35 +01:00
return ("Received incorrect body: " + body);
2020-10-17 20:56:54 +02:00
}
2021-01-06 01:43:28 +01:00
}
})
2021-03-02 03:37:35 +01:00
.catch(err => ("Couldn't call endpoint"));
2020-10-17 20:56:54 +02:00
});
2021-03-02 03:37:35 +01:00
it('Should return 404 if no segment found', () => {
2021-01-06 01:43:28 +01:00
fetch(getbaseURL() + "/api/skipSegments?videoID=notarealvideo")
.then(res => {
2021-03-02 03:37:35 +01:00
if (res.status !== 404) return ("non 404 respone code: " + res.status);
else return; // pass
2021-01-06 01:43:28 +01:00
})
2021-03-02 03:37:35 +01:00
.catch(err => ("couldn't call endpoint"));
2020-10-17 20:56:54 +02:00
});
2021-03-02 03:37:35 +01:00
it('Should be able send a comma in a query param', () => {
2021-01-06 01:43:28 +01:00
fetch(getbaseURL() + "/api/skipSegments?videoID=testtesttest,test&category=sponsor")
.then(async res => {
2021-03-02 03:37:35 +01:00
if (res.status !== 200) return ("Status code was: " + res.status);
2021-01-06 01:43:28 +01:00
else {
const body = await res.text();
const data = JSON.parse(body);
if (data.length === 1 && data[0].segment[0] === 1 && data[0].segment[1] === 11
&& data[0].category === "sponsor" && data[0].UUID === "1-uuid-1") {
2021-03-02 03:37:35 +01:00
return;
2021-01-06 01:43:28 +01:00
} else {
2021-03-02 03:37:35 +01:00
return ("Received incorrect body: " + body);
2020-10-17 20:56:54 +02:00
}
2021-01-06 01:43:28 +01:00
}
})
2021-03-02 03:37:35 +01:00
.catch(err => ("Couldn't call endpoint"));
2020-10-17 20:56:54 +02:00
});
2021-03-02 03:37:35 +01:00
it('Should always get locked segment', () => {
fetch(getbaseURL() + "/api/skipSegments?videoID=locked&category=intro")
.then(async res => {
2021-03-02 03:37:35 +01:00
if (res.status !== 200) return ("Status code was: " + res.status);
else {
const data = await res.json();
if (data.length === 1 && data[0].segment[0] === 20 && data[0].segment[1] === 33
&& data[0].category === "intro" && data[0].UUID === "1-uuid-locked-8") {
2021-03-02 03:37:35 +01:00
return;
} else {
2021-03-02 03:37:35 +01:00
return ("Received incorrect body: " + (await res.text()));
}
}
})
2021-03-02 03:37:35 +01:00
.catch(err => ("Couldn't call endpoint"));
});
2020-10-17 20:56:54 +02:00
});