mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2025-12-12 22:47:12 +03:00
add additional/missing tests
This commit is contained in:
@@ -7,7 +7,11 @@ export async function getDaysSavedFormatted(req: Request, res: Response): Promis
|
|||||||
if (row !== undefined) {
|
if (row !== undefined) {
|
||||||
//send this result
|
//send this result
|
||||||
return res.send({
|
return res.send({
|
||||||
daysSaved: row.daysSaved.toFixed(2),
|
daysSaved: row.daysSaved?.toFixed(2) ?? "0",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return res.send({
|
||||||
|
daysSaved: 0
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
92
test/cases/addUserAsVIP.ts
Normal file
92
test/cases/addUserAsVIP.ts
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
import { getHash } from "../../src/utils/getHash";
|
||||||
|
import { HashedUserID } from "../../src/types/user.model";
|
||||||
|
import { client } from "../utils/httpClient";
|
||||||
|
import { db } from "../../src/databases/databases";
|
||||||
|
import assert from "assert";
|
||||||
|
|
||||||
|
// helpers
|
||||||
|
const checkUserVIP = (publicID: string) => db.prepare("get", `SELECT "userID" FROM "vipUsers" WHERE "userID" = ?`, [publicID]);
|
||||||
|
|
||||||
|
const adminPrivateUserID = "testUserId";
|
||||||
|
const permVIP1 = "addVIP_permaVIPOne";
|
||||||
|
const publicPermVIP1 = getHash(permVIP1) as HashedUserID;
|
||||||
|
|
||||||
|
const endpoint = "/api/addUserAsVIP";
|
||||||
|
const addUserAsVIP = (userID: string, enabled: boolean, adminUserID = adminPrivateUserID) => client({
|
||||||
|
method: "POST",
|
||||||
|
url: endpoint,
|
||||||
|
params: {
|
||||||
|
userID,
|
||||||
|
adminUserID,
|
||||||
|
enabled: String(enabled)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("addVIP test", function() {
|
||||||
|
it("User should not already be VIP", (done) => {
|
||||||
|
checkUserVIP(publicPermVIP1)
|
||||||
|
.then(result => {
|
||||||
|
assert.ok(!result);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
it("Should be able to add user as VIP", (done) => {
|
||||||
|
addUserAsVIP(publicPermVIP1, true)
|
||||||
|
.then(async res => {
|
||||||
|
assert.strictEqual(res.status, 200);
|
||||||
|
const row = await checkUserVIP(publicPermVIP1);
|
||||||
|
assert.ok(row);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
it("Should return 403 with invalid adminID", (done) => {
|
||||||
|
addUserAsVIP(publicPermVIP1, true, "Invalid_Admin_User_ID")
|
||||||
|
.then(res => {
|
||||||
|
assert.strictEqual(res.status, 403);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
it("Should return 400 with missing adminID", (done) => {
|
||||||
|
client({
|
||||||
|
method: "POST",
|
||||||
|
url: endpoint,
|
||||||
|
params: {
|
||||||
|
userID: publicPermVIP1,
|
||||||
|
enabled: String(true)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(res => {
|
||||||
|
assert.strictEqual(res.status, 400);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
it("Should return 400 with missing userID", (done) => {
|
||||||
|
client({
|
||||||
|
method: "POST",
|
||||||
|
url: endpoint,
|
||||||
|
params: {
|
||||||
|
enabled: String(true),
|
||||||
|
adminUserID: adminPrivateUserID
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(res => {
|
||||||
|
assert.strictEqual(res.status, 400);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
it("Should be able to remove VIP", (done) => {
|
||||||
|
addUserAsVIP(publicPermVIP1, false)
|
||||||
|
.then(async res => {
|
||||||
|
assert.strictEqual(res.status, 200);
|
||||||
|
const row = await checkUserVIP(publicPermVIP1);
|
||||||
|
assert.ok(!row);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
});
|
||||||
11
test/cases/getDaysSavedFormatted.ts
Normal file
11
test/cases/getDaysSavedFormatted.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import assert from "assert";
|
||||||
|
import { client } from "../utils/httpClient";
|
||||||
|
|
||||||
|
const endpoint = "/api/getDaysSavedFormatted";
|
||||||
|
|
||||||
|
describe("getDaysSavedFormatted", () => {
|
||||||
|
it("can get days saved", async () => {
|
||||||
|
const result = await client({ url: endpoint });
|
||||||
|
assert.ok(result.data.daysSaved >= 0);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -2,22 +2,31 @@ import { db } from "../../src/databases/databases";
|
|||||||
import { getHash } from "../../src/utils/getHash";
|
import { getHash } from "../../src/utils/getHash";
|
||||||
import { deepStrictEqual } from "assert";
|
import { deepStrictEqual } from "assert";
|
||||||
import { client } from "../utils/httpClient";
|
import { client } from "../utils/httpClient";
|
||||||
|
import assert from "assert";
|
||||||
|
|
||||||
|
// helpers
|
||||||
const endpoint = "/api/getSavedTimeForUser";
|
const endpoint = "/api/getSavedTimeForUser";
|
||||||
|
const getSavedTimeForUser = (userID: string) => client({
|
||||||
|
url: endpoint,
|
||||||
|
params: { userID }
|
||||||
|
});
|
||||||
|
|
||||||
describe("getSavedTimeForUser", () => {
|
describe("getSavedTimeForUser", () => {
|
||||||
const user1 = "getSavedTimeForUserUser";
|
const user1 = "getSavedTimeForUser1";
|
||||||
|
const user2 = "getSavedTimeforUser2";
|
||||||
|
const [ start, end, views ] = [1, 11, 50];
|
||||||
|
|
||||||
before(async () => {
|
before(async () => {
|
||||||
const startOfQuery = 'INSERT INTO "sponsorTimes" ("videoID", "startTime", "endTime", "votes", "UUID", "userID", "timeSubmitted", "views", "shadowHidden") VALUES';
|
const startOfQuery = 'INSERT INTO "sponsorTimes" ("videoID", "startTime", "endTime", "votes", "UUID", "userID", "timeSubmitted", "views", "shadowHidden") VALUES';
|
||||||
await db.prepare("run", `${startOfQuery}(?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
await db.prepare("run", `${startOfQuery}(?, ?, ?, ?, ?, ?, ?, ?, ?)`,
|
||||||
["getSavedTimeForUser", 1, 11, 2, "gstfu0", getHash(user1), 0, 50, 0]);
|
["getSavedTimeForUser", start, end, 2, "getSavedTimeUUID0", getHash(user1), 0, views, 0]);
|
||||||
return;
|
return;
|
||||||
});
|
});
|
||||||
|
it("Should be able to get a saved time", (done) => {
|
||||||
it("Should be able to get a 200", (done) => {
|
getSavedTimeForUser(user1)
|
||||||
client.get(endpoint, { params: { userID: user1 } })
|
|
||||||
.then(res => {
|
.then(res => {
|
||||||
// (end-start)*minute * views
|
// (end-start)*minute * views
|
||||||
const savedMinutes = ((11-1)/60) * 50;
|
const savedMinutes = ((end-start)/60) * views;
|
||||||
const expected = {
|
const expected = {
|
||||||
timeSaved: savedMinutes
|
timeSaved: savedMinutes
|
||||||
};
|
};
|
||||||
@@ -26,4 +35,20 @@ describe("getSavedTimeForUser", () => {
|
|||||||
})
|
})
|
||||||
.catch((err) => done(err));
|
.catch((err) => done(err));
|
||||||
});
|
});
|
||||||
|
it("Should return 404 if no submissions", (done) => {
|
||||||
|
getSavedTimeForUser(user2)
|
||||||
|
.then(res => {
|
||||||
|
assert.strictEqual(res.status, 404);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch((err) => done(err));
|
||||||
|
});
|
||||||
|
it("Should return 400 if no userID", (done) => {
|
||||||
|
client({ url: endpoint })
|
||||||
|
.then(res => {
|
||||||
|
assert.strictEqual(res.status, 400);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch((err) => done(err));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
17
test/cases/getTotalStats.ts
Normal file
17
test/cases/getTotalStats.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import assert from "assert";
|
||||||
|
import { client } from "../utils/httpClient";
|
||||||
|
|
||||||
|
const endpoint = "/api/getTotalStats";
|
||||||
|
|
||||||
|
describe("getTotalStats", () => {
|
||||||
|
it("Can get total stats", async () => {
|
||||||
|
const result = await client({ url: endpoint });
|
||||||
|
const data = result.data;
|
||||||
|
assert.ok(data.userCount >= 0);
|
||||||
|
assert.ok(data.activeUsers >= 0);
|
||||||
|
assert.ok(data.apiUsers >= 0);
|
||||||
|
assert.ok(data.viewCount >= 0);
|
||||||
|
assert.ok(data.totalSubmissions >= 0);
|
||||||
|
assert.ok(data.minutesSaved >= 0);
|
||||||
|
});
|
||||||
|
});
|
||||||
53
test/cases/getUsername.ts
Normal file
53
test/cases/getUsername.ts
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
import { getHash } from "../../src/utils/getHash";
|
||||||
|
import { client } from "../utils/httpClient";
|
||||||
|
import assert from "assert";
|
||||||
|
|
||||||
|
// helpers
|
||||||
|
const getUsername = (userID: string) => client({
|
||||||
|
url: "/api/getUsername",
|
||||||
|
params: { userID }
|
||||||
|
});
|
||||||
|
|
||||||
|
const postSetUserName = (userID: string, username: string) => client({
|
||||||
|
method: "POST",
|
||||||
|
url: "/api/setUsername",
|
||||||
|
params: {
|
||||||
|
userID,
|
||||||
|
username,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const userOnePrivate = "getUsername_0";
|
||||||
|
const userOnePublic = getHash(userOnePrivate);
|
||||||
|
const userOneUsername = "getUsername_username";
|
||||||
|
|
||||||
|
describe("getUsername test", function() {
|
||||||
|
it("Should get back publicUserID if not set", (done) => {
|
||||||
|
getUsername(userOnePrivate)
|
||||||
|
.then(result => {
|
||||||
|
assert.strictEqual(result.data.userName, userOnePublic);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
it("Should be able to get username after setting", (done) => {
|
||||||
|
postSetUserName(userOnePrivate, userOneUsername)
|
||||||
|
.then(async () => {
|
||||||
|
const result = await getUsername(userOnePrivate);
|
||||||
|
const actual = result.data.userName;
|
||||||
|
assert.strictEqual(actual, userOneUsername);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
it("Should return 400 if no userID provided", (done) => {
|
||||||
|
client({
|
||||||
|
url: "/api/getUsername"
|
||||||
|
})
|
||||||
|
.then(res => {
|
||||||
|
assert.strictEqual(res.status, 400);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
});
|
||||||
62
test/cases/getViewsForUser.ts
Normal file
62
test/cases/getViewsForUser.ts
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
import { getHash } from "../../src/utils/getHash";
|
||||||
|
import { db } from "../../src/databases/databases";
|
||||||
|
import { client } from "../utils/httpClient";
|
||||||
|
import assert from "assert";
|
||||||
|
|
||||||
|
// helpers
|
||||||
|
const endpoint = "/api/getViewsForUser";
|
||||||
|
const getViewsForUser = (userID: string) => client({
|
||||||
|
url: endpoint,
|
||||||
|
params: { userID }
|
||||||
|
});
|
||||||
|
|
||||||
|
const getViewUserOne = "getViewUser1";
|
||||||
|
const userOneViewsFirst = 30;
|
||||||
|
const userOneViewsSecond = 0;
|
||||||
|
|
||||||
|
const getViewUserTwo = "getViewUser2";
|
||||||
|
const userTwoViews = 0;
|
||||||
|
|
||||||
|
const getViewUserThree = "getViewUser3";
|
||||||
|
|
||||||
|
|
||||||
|
describe("getViewsForUser", function() {
|
||||||
|
before(() => {
|
||||||
|
const insertSponsorTimeQuery = 'INSERT INTO "sponsorTimes" ("videoID", "startTime", "endTime", "votes", "UUID", "userID", "timeSubmitted", views, category, "actionType", "videoDuration", "shadowHidden", "hashedVideoID") VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
|
||||||
|
db.prepare("run", insertSponsorTimeQuery, ["getViewUserVideo", 0, 1, 0, "getViewUserVideo0", getHash(getViewUserOne), 0, userOneViewsFirst, "sponsor", "skip", 0, 0, "getViewUserVideo"]);
|
||||||
|
db.prepare("run", insertSponsorTimeQuery, ["getViewUserVideo", 0, 1, 0, "getViewUserVideo1", getHash(getViewUserOne), 0, userOneViewsSecond, "sponsor", "skip", 0, 0, "getViewUserVideo"]);
|
||||||
|
db.prepare("run", insertSponsorTimeQuery, ["getViewUserVideo", 0, 1, 0, "getViewUserVideo2", getHash(getViewUserTwo), 0, userTwoViews, "sponsor", "skip", 0, 0, "getViewUserVideo"]);
|
||||||
|
});
|
||||||
|
it("Should get back views for user one", (done) => {
|
||||||
|
getViewsForUser(getViewUserOne)
|
||||||
|
.then(result => {
|
||||||
|
assert.strictEqual(result.data.viewCount, userOneViewsFirst + userOneViewsSecond);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
it("Should get back views for user two", (done) => {
|
||||||
|
getViewsForUser(getViewUserTwo)
|
||||||
|
.then(result => {
|
||||||
|
assert.strictEqual(result.data.viewCount, userTwoViews);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
it("Should get 404 if no submissions", (done) => {
|
||||||
|
getViewsForUser(getViewUserThree)
|
||||||
|
.then(result => {
|
||||||
|
assert.strictEqual(result.status, 404);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
it("Should return 400 if no userID provided", (done) => {
|
||||||
|
client({ url: endpoint })
|
||||||
|
.then(res => {
|
||||||
|
assert.strictEqual(res.status, 400);
|
||||||
|
done();
|
||||||
|
})
|
||||||
|
.catch(err => done(err));
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user