Skip to content

Commit 3f470a7

Browse files
committed
add additional/missing tests
1 parent f5bafa2 commit 3f470a7

File tree

7 files changed

+271
-7
lines changed

7 files changed

+271
-7
lines changed

src/routes/getDaysSavedFormatted.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ export async function getDaysSavedFormatted(req: Request, res: Response): Promis
77
if (row !== undefined) {
88
//send this result
99
return res.send({
10-
daysSaved: row.daysSaved.toFixed(2),
10+
daysSaved: row.daysSaved?.toFixed(2) ?? "0",
11+
});
12+
} else {
13+
return res.send({
14+
daysSaved: 0
1115
});
1216
}
1317
}

test/cases/addUserAsVIP.ts

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
import { getHash } from "../../src/utils/getHash";
2+
import { HashedUserID } from "../../src/types/user.model";
3+
import { client } from "../utils/httpClient";
4+
import { db } from "../../src/databases/databases";
5+
import assert from "assert";
6+
7+
// helpers
8+
const checkUserVIP = (publicID: string) => db.prepare("get", `SELECT "userID" FROM "vipUsers" WHERE "userID" = ?`, [publicID]);
9+
10+
const adminPrivateUserID = "testUserId";
11+
const permVIP1 = "addVIP_permaVIPOne";
12+
const publicPermVIP1 = getHash(permVIP1) as HashedUserID;
13+
14+
const endpoint = "/api/addUserAsVIP";
15+
const addUserAsVIP = (userID: string, enabled: boolean, adminUserID = adminPrivateUserID) => client({
16+
method: "POST",
17+
url: endpoint,
18+
params: {
19+
userID,
20+
adminUserID,
21+
enabled: String(enabled)
22+
}
23+
});
24+
25+
describe("addVIP test", function() {
26+
it("User should not already be VIP", (done) => {
27+
checkUserVIP(publicPermVIP1)
28+
.then(result => {
29+
assert.ok(!result);
30+
done();
31+
})
32+
.catch(err => done(err));
33+
});
34+
it("Should be able to add user as VIP", (done) => {
35+
addUserAsVIP(publicPermVIP1, true)
36+
.then(async res => {
37+
assert.strictEqual(res.status, 200);
38+
const row = await checkUserVIP(publicPermVIP1);
39+
assert.ok(row);
40+
done();
41+
})
42+
.catch(err => done(err));
43+
});
44+
it("Should return 403 with invalid adminID", (done) => {
45+
addUserAsVIP(publicPermVIP1, true, "Invalid_Admin_User_ID")
46+
.then(res => {
47+
assert.strictEqual(res.status, 403);
48+
done();
49+
})
50+
.catch(err => done(err));
51+
});
52+
it("Should return 400 with missing adminID", (done) => {
53+
client({
54+
method: "POST",
55+
url: endpoint,
56+
params: {
57+
userID: publicPermVIP1,
58+
enabled: String(true)
59+
}
60+
})
61+
.then(res => {
62+
assert.strictEqual(res.status, 400);
63+
done();
64+
})
65+
.catch(err => done(err));
66+
});
67+
it("Should return 400 with missing userID", (done) => {
68+
client({
69+
method: "POST",
70+
url: endpoint,
71+
params: {
72+
enabled: String(true),
73+
adminUserID: adminPrivateUserID
74+
}
75+
})
76+
.then(res => {
77+
assert.strictEqual(res.status, 400);
78+
done();
79+
})
80+
.catch(err => done(err));
81+
});
82+
it("Should be able to remove VIP", (done) => {
83+
addUserAsVIP(publicPermVIP1, false)
84+
.then(async res => {
85+
assert.strictEqual(res.status, 200);
86+
const row = await checkUserVIP(publicPermVIP1);
87+
assert.ok(!row);
88+
done();
89+
})
90+
.catch(err => done(err));
91+
});
92+
});
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import assert from "assert";
2+
import { client } from "../utils/httpClient";
3+
4+
const endpoint = "/api/getDaysSavedFormatted";
5+
6+
describe("getDaysSavedFormatted", () => {
7+
it("can get days saved", async () => {
8+
const result = await client({ url: endpoint });
9+
assert.ok(result.data.daysSaved >= 0);
10+
});
11+
});

test/cases/getSavedTimeForUser.ts

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,31 @@ import { db } from "../../src/databases/databases";
22
import { getHash } from "../../src/utils/getHash";
33
import { deepStrictEqual } from "assert";
44
import { client } from "../utils/httpClient";
5+
import assert from "assert";
6+
7+
// helpers
58
const endpoint = "/api/getSavedTimeForUser";
9+
const getSavedTimeForUser = (userID: string) => client({
10+
url: endpoint,
11+
params: { userID }
12+
});
613

714
describe("getSavedTimeForUser", () => {
8-
const user1 = "getSavedTimeForUserUser";
15+
const user1 = "getSavedTimeForUser1";
16+
const user2 = "getSavedTimeforUser2";
17+
const [ start, end, views ] = [1, 11, 50];
18+
919
before(async () => {
1020
const startOfQuery = 'INSERT INTO "sponsorTimes" ("videoID", "startTime", "endTime", "votes", "UUID", "userID", "timeSubmitted", "views", "shadowHidden") VALUES';
1121
await db.prepare("run", `${startOfQuery}(?, ?, ?, ?, ?, ?, ?, ?, ?)`,
12-
["getSavedTimeForUser", 1, 11, 2, "gstfu0", getHash(user1), 0, 50, 0]);
22+
["getSavedTimeForUser", start, end, 2, "getSavedTimeUUID0", getHash(user1), 0, views, 0]);
1323
return;
1424
});
15-
16-
it("Should be able to get a 200", (done) => {
17-
client.get(endpoint, { params: { userID: user1 } })
25+
it("Should be able to get a saved time", (done) => {
26+
getSavedTimeForUser(user1)
1827
.then(res => {
1928
// (end-start)*minute * views
20-
const savedMinutes = ((11-1)/60) * 50;
29+
const savedMinutes = ((end-start)/60) * views;
2130
const expected = {
2231
timeSaved: savedMinutes
2332
};
@@ -26,4 +35,20 @@ describe("getSavedTimeForUser", () => {
2635
})
2736
.catch((err) => done(err));
2837
});
38+
it("Should return 404 if no submissions", (done) => {
39+
getSavedTimeForUser(user2)
40+
.then(res => {
41+
assert.strictEqual(res.status, 404);
42+
done();
43+
})
44+
.catch((err) => done(err));
45+
});
46+
it("Should return 400 if no userID", (done) => {
47+
client({ url: endpoint })
48+
.then(res => {
49+
assert.strictEqual(res.status, 400);
50+
done();
51+
})
52+
.catch((err) => done(err));
53+
});
2954
});

test/cases/getTotalStats.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import assert from "assert";
2+
import { client } from "../utils/httpClient";
3+
4+
const endpoint = "/api/getTotalStats";
5+
6+
describe("getTotalStats", () => {
7+
it("Can get total stats", async () => {
8+
const result = await client({ url: endpoint });
9+
const data = result.data;
10+
assert.ok(data.userCount >= 0);
11+
assert.ok(data.activeUsers >= 0);
12+
assert.ok(data.apiUsers >= 0);
13+
assert.ok(data.viewCount >= 0);
14+
assert.ok(data.totalSubmissions >= 0);
15+
assert.ok(data.minutesSaved >= 0);
16+
});
17+
});

test/cases/getUsername.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { getHash } from "../../src/utils/getHash";
2+
import { client } from "../utils/httpClient";
3+
import assert from "assert";
4+
5+
// helpers
6+
const getUsername = (userID: string) => client({
7+
url: "/api/getUsername",
8+
params: { userID }
9+
});
10+
11+
const postSetUserName = (userID: string, username: string) => client({
12+
method: "POST",
13+
url: "/api/setUsername",
14+
params: {
15+
userID,
16+
username,
17+
}
18+
});
19+
20+
const userOnePrivate = "getUsername_0";
21+
const userOnePublic = getHash(userOnePrivate);
22+
const userOneUsername = "getUsername_username";
23+
24+
describe("getUsername test", function() {
25+
it("Should get back publicUserID if not set", (done) => {
26+
getUsername(userOnePrivate)
27+
.then(result => {
28+
assert.strictEqual(result.data.userName, userOnePublic);
29+
done();
30+
})
31+
.catch(err => done(err));
32+
});
33+
it("Should be able to get username after setting", (done) => {
34+
postSetUserName(userOnePrivate, userOneUsername)
35+
.then(async () => {
36+
const result = await getUsername(userOnePrivate);
37+
const actual = result.data.userName;
38+
assert.strictEqual(actual, userOneUsername);
39+
done();
40+
})
41+
.catch(err => done(err));
42+
});
43+
it("Should return 400 if no userID provided", (done) => {
44+
client({
45+
url: "/api/getUsername"
46+
})
47+
.then(res => {
48+
assert.strictEqual(res.status, 400);
49+
done();
50+
})
51+
.catch(err => done(err));
52+
});
53+
});

test/cases/getViewsForUser.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { getHash } from "../../src/utils/getHash";
2+
import { db } from "../../src/databases/databases";
3+
import { client } from "../utils/httpClient";
4+
import assert from "assert";
5+
6+
// helpers
7+
const endpoint = "/api/getViewsForUser";
8+
const getViewsForUser = (userID: string) => client({
9+
url: endpoint,
10+
params: { userID }
11+
});
12+
13+
const getViewUserOne = "getViewUser1";
14+
const userOneViewsFirst = 30;
15+
const userOneViewsSecond = 0;
16+
17+
const getViewUserTwo = "getViewUser2";
18+
const userTwoViews = 0;
19+
20+
const getViewUserThree = "getViewUser3";
21+
22+
23+
describe("getViewsForUser", function() {
24+
before(() => {
25+
const insertSponsorTimeQuery = 'INSERT INTO "sponsorTimes" ("videoID", "startTime", "endTime", "votes", "UUID", "userID", "timeSubmitted", views, category, "actionType", "videoDuration", "shadowHidden", "hashedVideoID") VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
26+
db.prepare("run", insertSponsorTimeQuery, ["getViewUserVideo", 0, 1, 0, "getViewUserVideo0", getHash(getViewUserOne), 0, userOneViewsFirst, "sponsor", "skip", 0, 0, "getViewUserVideo"]);
27+
db.prepare("run", insertSponsorTimeQuery, ["getViewUserVideo", 0, 1, 0, "getViewUserVideo1", getHash(getViewUserOne), 0, userOneViewsSecond, "sponsor", "skip", 0, 0, "getViewUserVideo"]);
28+
db.prepare("run", insertSponsorTimeQuery, ["getViewUserVideo", 0, 1, 0, "getViewUserVideo2", getHash(getViewUserTwo), 0, userTwoViews, "sponsor", "skip", 0, 0, "getViewUserVideo"]);
29+
});
30+
it("Should get back views for user one", (done) => {
31+
getViewsForUser(getViewUserOne)
32+
.then(result => {
33+
assert.strictEqual(result.data.viewCount, userOneViewsFirst + userOneViewsSecond);
34+
done();
35+
})
36+
.catch(err => done(err));
37+
});
38+
it("Should get back views for user two", (done) => {
39+
getViewsForUser(getViewUserTwo)
40+
.then(result => {
41+
assert.strictEqual(result.data.viewCount, userTwoViews);
42+
done();
43+
})
44+
.catch(err => done(err));
45+
});
46+
it("Should get 404 if no submissions", (done) => {
47+
getViewsForUser(getViewUserThree)
48+
.then(result => {
49+
assert.strictEqual(result.status, 404);
50+
done();
51+
})
52+
.catch(err => done(err));
53+
});
54+
it("Should return 400 if no userID provided", (done) => {
55+
client({ url: endpoint })
56+
.then(res => {
57+
assert.strictEqual(res.status, 400);
58+
done();
59+
})
60+
.catch(err => done(err));
61+
});
62+
});

0 commit comments

Comments
 (0)