mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-08 04:27:09 +03:00
Fix tests
This commit is contained in:
@@ -12,30 +12,19 @@ export class Sqlite implements IDatabase {
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
async prepare(type: QueryType, query: string, params?: any[]) {
|
async prepare(type: QueryType, query: string, params: any[] = []) {
|
||||||
|
// Logger.debug(`prepare (sqlite): type: ${type}, query: ${query}, params: ${params}`);
|
||||||
const preparedQuery = this.db.prepare(query);
|
const preparedQuery = this.db.prepare(query);
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'get': {
|
case 'get': {
|
||||||
if (params) {
|
return preparedQuery.get(...params);
|
||||||
return preparedQuery.get(...params);
|
|
||||||
} else {
|
|
||||||
return preparedQuery.get();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
case 'all': {
|
case 'all': {
|
||||||
if (params) {
|
return preparedQuery.all(...params);
|
||||||
return preparedQuery.all(...params);
|
|
||||||
} else {
|
|
||||||
return preparedQuery.all();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
case 'run': {
|
case 'run': {
|
||||||
if (params) {
|
preparedQuery.run(...params);
|
||||||
preparedQuery.run(...params);
|
|
||||||
} else {
|
|
||||||
preparedQuery.run();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ async function getSegmentsByVideoID(req: Request, videoID: string, categories: C
|
|||||||
const segments: Segment[] = [];
|
const segments: Segment[] = [];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
categories.filter((category) => !/[^a-z|_|-]/.test(category));
|
categories = categories.filter((category) => !/[^a-z|_|-]/.test(category));
|
||||||
|
|
||||||
const segmentsByCategory: SBRecord<Category, DBSegment[]> = (await db
|
const segmentsByCategory: SBRecord<Category, DBSegment[]> = (await db
|
||||||
.prepare(
|
.prepare(
|
||||||
@@ -87,12 +87,12 @@ async function getSegmentsByHash(req: Request, hashedVideoIDPrefix: VideoIDHash,
|
|||||||
try {
|
try {
|
||||||
type SegmentWithHashPerVideoID = SBRecord<VideoID, {hash: VideoIDHash, segmentPerCategory: SBRecord<Category, DBSegment[]>}>;
|
type SegmentWithHashPerVideoID = SBRecord<VideoID, {hash: VideoIDHash, segmentPerCategory: SBRecord<Category, DBSegment[]>}>;
|
||||||
|
|
||||||
categories.filter((category) => !/[^a-z|_|-]/.test(category));
|
categories = categories.filter((category) => !(/[^a-z|_|-]/.test(category)));
|
||||||
|
|
||||||
const segmentPerVideoID: SegmentWithHashPerVideoID = (await db
|
const segmentPerVideoID: SegmentWithHashPerVideoID = (await db
|
||||||
.prepare(
|
.prepare(
|
||||||
'all',
|
'all',
|
||||||
`SELECT "startTime", "endTime", "votes", "locked", "UUID", "category", "shadowHidden", "hashedVideoID" FROM "sponsorTimes"
|
`SELECT "videoID", "startTime", "endTime", "votes", "locked", "UUID", "category", "shadowHidden", "hashedVideoID" FROM "sponsorTimes"
|
||||||
WHERE "hashedVideoID" LIKE ? AND "category" IN (${categories.map((c) => "'" + c + "'")}) ORDER BY "startTime"`,
|
WHERE "hashedVideoID" LIKE ? AND "category" IN (${categories.map((c) => "'" + c + "'")}) ORDER BY "startTime"`,
|
||||||
[hashedVideoIDPrefix + '%']
|
[hashedVideoIDPrefix + '%']
|
||||||
)).reduce((acc: SegmentWithHashPerVideoID, segment: DBSegment) => {
|
)).reduce((acc: SegmentWithHashPerVideoID, segment: DBSegment) => {
|
||||||
|
|||||||
@@ -24,13 +24,13 @@ async function generateTopUsersStats(sortBy: string, categoryStatsEnabled: boole
|
|||||||
}
|
}
|
||||||
|
|
||||||
const rows = await db.prepare('all', `SELECT COUNT(*) as "totalSubmissions", SUM(views) as "viewCount",
|
const rows = await db.prepare('all', `SELECT COUNT(*) as "totalSubmissions", SUM(views) as "viewCount",
|
||||||
SUM(("sponsorTimes.endTime" - "sponsorTimes.startTime") / 60 * "sponsorTimes.views") as "minutesSaved",
|
SUM(("sponsorTimes"."endTime" - "sponsorTimes"."startTime") / 60 * "sponsorTimes"."views") as "minutesSaved",
|
||||||
SUM("votes") as "userVotes", ` +
|
SUM("votes") as "userVotes", ` +
|
||||||
additionalFields +
|
additionalFields +
|
||||||
`IFNULL("userNames.userName", "sponsorTimes.userID") as "userName" FROM "sponsorTimes" LEFT JOIN "userNames" ON "sponsorTimes.userID"="userNames.userID"
|
`IFNULL("userNames"."userName", "sponsorTimes"."userID") as "userName" FROM "sponsorTimes" LEFT JOIN "userNames" ON "sponsorTimes"."userID"="userNames"."userID"
|
||||||
LEFT JOIN "privateDB.shadowBannedUsers" ON "sponsorTimes.userID"="privateDB.shadowBannedUsers.userID"
|
LEFT JOIN "privateDB"."shadowBannedUsers" ON "sponsorTimes"."userID"="privateDB"."shadowBannedUsers"."userID"
|
||||||
WHERE "sponsorTimes.votes" > -1 AND "sponsorTimes.shadowHidden" != 1 AND "privateDB.shadowBannedUsers.userID" IS NULL
|
WHERE "sponsorTimes"."votes" > -1 AND "sponsorTimes"."shadowHidden" != 1 AND "privateDB"."shadowBannedUsers"."userID" IS NULL
|
||||||
GROUP BY IFNULL("userName", "sponsorTimes.userID") HAVING "userVotes" > 20
|
GROUP BY IFNULL("userName", "sponsorTimes"."userID") HAVING "userVotes" > 20
|
||||||
ORDER BY "` + sortBy + `" DESC LIMIT 100`, []);
|
ORDER BY "` + sortBy + `" DESC LIMIT 100`, []);
|
||||||
|
|
||||||
for (let i = 0; i < rows.length; i++) {
|
for (let i = 0; i < rows.length; i++) {
|
||||||
|
|||||||
@@ -44,29 +44,28 @@ export async function shadowBanUser(req: Request, res: Response) {
|
|||||||
if (unHideOldSubmissions) {
|
if (unHideOldSubmissions) {
|
||||||
await db.prepare('run', `UPDATE "sponsorTimes" SET "shadowHidden" = 1 WHERE "userID" = ?
|
await db.prepare('run', `UPDATE "sponsorTimes" SET "shadowHidden" = 1 WHERE "userID" = ?
|
||||||
AND NOT EXISTS ( SELECT "videoID", "category" FROM "noSegments" WHERE
|
AND NOT EXISTS ( SELECT "videoID", "category" FROM "noSegments" WHERE
|
||||||
"sponsorTimes.videoID" = "noSegments.videoID" AND "sponsorTimes.category" = "noSegments.category")`, [userID]);
|
"sponsorTimes"."videoID" = "noSegments"."videoID" AND "sponsorTimes"."category" = "noSegments"."category")`, [userID]);
|
||||||
}
|
}
|
||||||
} else if (!enabled && row.userCount > 0) {
|
} else if (!enabled && row.userCount > 0) {
|
||||||
//remove them from the shadow ban list
|
//remove them from the shadow ban list
|
||||||
await privateDB.prepare('run', `DELETE FROM "shadowBannedUsers" WHERE userID = ?`, [userID]);
|
await privateDB.prepare('run', `DELETE FROM "shadowBannedUsers" WHERE "userID" = ?`, [userID]);
|
||||||
|
|
||||||
//find all previous submissions and unhide them
|
//find all previous submissions and unhide them
|
||||||
if (unHideOldSubmissions) {
|
if (unHideOldSubmissions) {
|
||||||
let segmentsToIgnore = (await db.prepare('all', `SELECT UUID FROM "sponsorTimes" st
|
let segmentsToIgnore = (await db.prepare('all', `SELECT UUID FROM "sponsorTimes" st
|
||||||
JOIN "noSegments" ns on "st.videoID" = "ns.videoID" AND st.category = ns.category WHERE "st.userID" = ?`
|
JOIN "noSegments" ns on "st"."videoID" = "ns"."videoID" AND st.category = ns.category WHERE "st"."userID" = ?`
|
||||||
, [userID])).map((item: {UUID: string}) => item.UUID);
|
, [userID])).map((item: {UUID: string}) => item.UUID);
|
||||||
let allSegments = (await db.prepare('all', `SELECT "UUID" FROM "sponsorTimes" st WHERE "st.userID" = ?`, [userID]))
|
let allSegments = (await db.prepare('all', `SELECT "UUID" FROM "sponsorTimes" st WHERE "st"."userID" = ?`, [userID]))
|
||||||
.map((item: {UUID: string}) => item.UUID);
|
.map((item: {UUID: string}) => item.UUID);
|
||||||
|
|
||||||
allSegments.filter((item: {uuid: string}) => {
|
await Promise.all(allSegments.filter((item: {uuid: string}) => {
|
||||||
return segmentsToIgnore.indexOf(item) === -1;
|
return segmentsToIgnore.indexOf(item) === -1;
|
||||||
}).forEach((UUID: string) => {
|
}).map((UUID: string) => {
|
||||||
db.prepare('run', `UPDATE "sponsorTimes" SET "shadowHidden" = 0 WHERE "UUID" = ?`, [UUID]);
|
return db.prepare('run', `UPDATE "sponsorTimes" SET "shadowHidden" = 0 WHERE "UUID" = ?`, [UUID]);
|
||||||
});
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else if (hashedIP) {
|
||||||
else if (hashedIP) {
|
|
||||||
//check to see if this user is already shadowbanned
|
//check to see if this user is already shadowbanned
|
||||||
// let row = await privateDB.prepare('get', "SELECT count(*) as userCount FROM shadowBannedIPs WHERE hashedIP = ?", [hashedIP]);
|
// let row = await privateDB.prepare('get', "SELECT count(*) as userCount FROM shadowBannedIPs WHERE hashedIP = ?", [hashedIP]);
|
||||||
|
|
||||||
@@ -81,8 +80,8 @@ export async function shadowBanUser(req: Request, res: Response) {
|
|||||||
//find all previous submissions and hide them
|
//find all previous submissions and hide them
|
||||||
if (unHideOldSubmissions) {
|
if (unHideOldSubmissions) {
|
||||||
await db.prepare('run', `UPDATE "sponsorTimes" SET "shadowHidden" = 1 WHERE "timeSubmitted" IN
|
await db.prepare('run', `UPDATE "sponsorTimes" SET "shadowHidden" = 1 WHERE "timeSubmitted" IN
|
||||||
(SELECT "privateDB.timeSubmitted" FROM "sponsorTimes" LEFT JOIN "privateDB.sponsorTimes" as "privateDB" ON "sponsorTimes.timeSubmitted"="privateDB.timeSubmitted"
|
(SELECT "privateDB"."timeSubmitted" FROM "sponsorTimes" LEFT JOIN "privateDB"."sponsorTimes" as "privateDB" ON "sponsorTimes"."timeSubmitted"="privateDB"."timeSubmitted"
|
||||||
WHERE "privateDB.hashedIP" = ?)`, [hashedIP]);
|
WHERE "privateDB"."hashedIP" = ?)`, [hashedIP]);
|
||||||
}
|
}
|
||||||
} /*else if (!enabled && row.userCount > 0) {
|
} /*else if (!enabled && row.userCount > 0) {
|
||||||
// //remove them from the shadow ban list
|
// //remove them from the shadow ban list
|
||||||
|
|||||||
@@ -36,10 +36,10 @@ interface VoteData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function sendWebhooks(voteData: VoteData) {
|
async function sendWebhooks(voteData: VoteData) {
|
||||||
const submissionInfoRow = await db.prepare('get', `SELECT "s.videoID", "s.userID", "s.startTime", "s.endTime", "s.category", "u.userName",
|
const submissionInfoRow = await db.prepare('get', `SELECT "s"."videoID", "s"."userID", s."startTime", s."endTime", s."category", u."userName",
|
||||||
(select count(1) from "sponsorTimes" where "userID" = "s.userID") count,
|
(select count(1) from "sponsorTimes" where "userID" = s."userID") count,
|
||||||
(select count(1) from "sponsorTimes" where "userID" = "s.userID" and votes <= -2) disregarded
|
(select count(1) from "sponsorTimes" where "userID" = s."userID" and votes <= -2) disregarded
|
||||||
FROM "sponsorTimes" s left join "userNames" u on "s.userID" = "u.userID" where "s.UUID"=?`,
|
FROM "sponsorTimes" s left join "userNames" u on s."userID" = u."userID" where s."UUID"=?`,
|
||||||
[voteData.UUID]);
|
[voteData.UUID]);
|
||||||
|
|
||||||
const userSubmissionCountRow = await db.prepare('get', `SELECT count(*) as "submissionCount" FROM "sponsorTimes" WHERE "userID" = ?`, [voteData.nonAnonUserID]);
|
const userSubmissionCountRow = await db.prepare('get', `SELECT count(*) as "submissionCount" FROM "sponsorTimes" WHERE "userID" = ?`, [voteData.nonAnonUserID]);
|
||||||
@@ -254,8 +254,8 @@ export async function voteOnSponsorTime(req: Request, res: Response) {
|
|||||||
// If not upvote
|
// If not upvote
|
||||||
if (!isVIP && type !== 1) {
|
if (!isVIP && type !== 1) {
|
||||||
const isSegmentLocked = async () => !!(await db.prepare('get', `SELECT "locked" FROM "sponsorTimes" WHERE "UUID" = ?`, [UUID]))?.locked;
|
const isSegmentLocked = async () => !!(await db.prepare('get', `SELECT "locked" FROM "sponsorTimes" WHERE "UUID" = ?`, [UUID]))?.locked;
|
||||||
const isVideoLocked = async () => !!(await db.prepare('get', 'SELECT "noSegments.category" from "noSegments" left join "sponsorTimes"' +
|
const isVideoLocked = async () => !!(await db.prepare('get', 'SELECT "noSegments".category from "noSegments" left join "sponsorTimes"' +
|
||||||
' on ("noSegments.videoID" = "sponsorTimes.videoID" and "noSegments.category" = "sponsorTimes.category")' +
|
' on ("noSegments"."videoID" = "sponsorTimes"."videoID" and "noSegments".category = "sponsorTimes".category)' +
|
||||||
' where "UUID" = ?', [UUID]));
|
' where "UUID" = ?', [UUID]));
|
||||||
|
|
||||||
if (await isSegmentLocked() || await isVideoLocked()) {
|
if (await isSegmentLocked() || await isVideoLocked()) {
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ describe('unBan', () => {
|
|||||||
})
|
})
|
||||||
.then(async res => {
|
.then(async res => {
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
let result = await db.prepare('all', 'SELECT * FROM sponsorTimes WHERE videoID = ? AND userID = ? AND shadowHidden = ?', ['unBan-videoID-0', 'testMan-unBan', 1]);
|
let result = await db.prepare('all', 'SELECT * FROM "sponsorTimes" WHERE "videoID" = ? AND "userID" = ? AND "shadowHidden" = ?', ['unBan-videoID-0', 'testMan-unBan', 1]);
|
||||||
if (result.length !== 0) {
|
if (result.length !== 0) {
|
||||||
console.log(result);
|
console.log(result);
|
||||||
done("Expected 0 banned entrys in db, got " + result.length);
|
done("Expected 0 banned entrys in db, got " + result.length);
|
||||||
|
|||||||
Reference in New Issue
Block a user