Skip to content

Commit 0a102c1

Browse files
committed
add lockCategory tests and typo tweak
1 parent e0be474 commit 0a102c1

File tree

4 files changed

+255
-141
lines changed

4 files changed

+255
-141
lines changed

src/routes/deleteLockCategories.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export async function deleteLockCategoriesEndpoint(req: DeleteLockCategoriesRequ
3535
|| !categories
3636
|| !Array.isArray(categories)
3737
|| categories.length === 0
38+
|| actionTypes && !Array.isArray(actionTypes)
3839
|| actionTypes.length === 0
3940
) {
4041
return res.status(400).json({
@@ -48,7 +49,7 @@ export async function deleteLockCategoriesEndpoint(req: DeleteLockCategoriesRequ
4849

4950
if (!userIsVIP) {
5051
return res.status(403).json({
51-
message: "Must be a VIP to mark videos.",
52+
message: "Must be a VIP to lock videos.",
5253
});
5354
}
5455

src/routes/postLockCategories.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export async function postLockCategories(req: Request, res: Response): Promise<s
3737

3838
if (!userIsVIP) {
3939
res.status(403).json({
40-
message: "Must be a VIP to mark videos.",
40+
message: "Must be a VIP to lock videos.",
4141
});
4242
return;
4343
}

test/cases/lockCategoriesHttp.ts

Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
import assert from "assert";
2+
import { client } from "../utils/httpClient";
3+
import { getHash } from "../../src/utils/getHash";
4+
import { db } from "../../src/databases/databases";
5+
import { UserID } from "../../src/types/user.model";
6+
import { Category, VideoID } from "../../src/types/segments.model";
7+
8+
interface LockCategory {
9+
category: Category,
10+
reason: string,
11+
videoID: VideoID,
12+
userID: UserID
13+
}
14+
const lockVIPUser = "lockCategoriesHttpVIPUser";
15+
const lockVIPUserHash = getHash(lockVIPUser);
16+
const endpoint = "/api/lockCategories";
17+
const checkLockCategories = (videoID: string): Promise<LockCategory[]> => db.prepare("all", 'SELECT * FROM "lockCategories" WHERE "videoID" = ?', [videoID]);
18+
19+
20+
const goodResponse = (): any => ({
21+
videoID: "test-videoid",
22+
userID: "not-vip-test-userid",
23+
categories: ["sponsor"],
24+
actionTypes: ["skip"]
25+
});
26+
27+
describe("POST lockCategories HTTP submitting", () => {
28+
before(async () => {
29+
const insertVipUserQuery = 'INSERT INTO "vipUsers" ("userID") VALUES (?)';
30+
await db.prepare("run", insertVipUserQuery, [lockVIPUserHash]);
31+
});
32+
33+
it("Should update the database version when starting the application", async () => {
34+
const version = (await db.prepare("get", "SELECT key, value FROM config where key = ?", ["version"])).value;
35+
assert.ok(version > 1);
36+
});
37+
38+
it("should be able to add poi type category by type skip", (done) => {
39+
const videoID = "add-record-poi";
40+
client.post(endpoint, {
41+
videoID,
42+
userID: lockVIPUser,
43+
categories: ["poi_highlight"],
44+
actionTypes: ["skip"]
45+
})
46+
.then(res => {
47+
assert.strictEqual(res.status, 200);
48+
checkLockCategories(videoID)
49+
.then(result => {
50+
assert.strictEqual(result.length, 1);
51+
assert.strictEqual(result[0], "poi_highlight");
52+
});
53+
done();
54+
})
55+
.catch(err => done(err));
56+
});
57+
58+
it("Should not add lock of invalid type", (done) => {
59+
const videoID = "add_invalid_type";
60+
client.post(endpoint, {
61+
videoID,
62+
userID: lockVIPUser,
63+
categories: ["future_unused_invalid_type"],
64+
actionTypes: ["skip"]
65+
})
66+
.then(res => {
67+
assert.strictEqual(res.status, 200);
68+
checkLockCategories(videoID)
69+
.then(result => {
70+
assert.strictEqual(result.length, 0);
71+
});
72+
done();
73+
})
74+
.catch(err => done(err));
75+
});
76+
});
77+
78+
describe("DELETE lockCategories 403/400 tests", () => {
79+
it(" Should return 400 for no data", (done) => {
80+
client.delete(endpoint, {})
81+
.then(res => {
82+
assert.strictEqual(res.status, 400);
83+
done();
84+
})
85+
.catch(err => done(err));
86+
});
87+
88+
it("Should return 400 for no categories", (done) => {
89+
const json: any = {
90+
videoID: "test",
91+
userID: "test",
92+
categories: [],
93+
};
94+
client.delete(endpoint, json)
95+
.then(res => {
96+
assert.strictEqual(res.status, 400);
97+
done();
98+
})
99+
.catch(err => done(err));
100+
});
101+
102+
it("Should return 400 for no userID", (done) => {
103+
const json: any = {
104+
videoID: "test",
105+
userID: null,
106+
categories: ["sponsor"],
107+
};
108+
109+
client.post(endpoint, json)
110+
.then(res => {
111+
assert.strictEqual(res.status, 400);
112+
done();
113+
})
114+
.catch(err => done(err));
115+
});
116+
117+
it("Should return 400 for no videoID", (done) => {
118+
const json: any = {
119+
videoID: null,
120+
userID: "test",
121+
categories: ["sponsor"],
122+
};
123+
124+
client.post(endpoint, json)
125+
.then(res => {
126+
assert.strictEqual(res.status, 400);
127+
done();
128+
})
129+
.catch(err => done(err));
130+
});
131+
132+
it("Should return 400 for invalid category array", (done) => {
133+
const json = {
134+
videoID: "test",
135+
userID: "test",
136+
categories: {},
137+
};
138+
139+
client.post(endpoint, json)
140+
.then(res => {
141+
assert.strictEqual(res.status, 400);
142+
done();
143+
})
144+
.catch(err => done(err));
145+
});
146+
147+
it("Should return 400 for bad format categories", (done) => {
148+
const json = {
149+
videoID: "test",
150+
userID: "test",
151+
categories: "sponsor",
152+
};
153+
154+
client.post(endpoint, json)
155+
.then(res => {
156+
assert.strictEqual(res.status, 400);
157+
done();
158+
})
159+
.catch(err => done(err));
160+
});
161+
162+
it("Should return 403 if user is not VIP", (done) => {
163+
const json = {
164+
videoID: "test",
165+
userID: "test",
166+
categories: [
167+
"sponsor",
168+
],
169+
};
170+
171+
client.post(endpoint, json)
172+
.then(res => {
173+
assert.strictEqual(res.status, 403);
174+
done();
175+
})
176+
.catch(err => done(err));
177+
});
178+
});
179+
180+
describe("manual DELETE/POST lockCategories 400 tests", () => {
181+
it("DELETE Should return 400 for no data", (done) => {
182+
client.delete(endpoint, { data: {} })
183+
.then(res => {
184+
assert.strictEqual(res.status, 400);
185+
done();
186+
})
187+
.catch(err => done(err));
188+
});
189+
it("POST Should return 400 for no data", (done) => {
190+
client.post(endpoint, {})
191+
.then(res => {
192+
assert.strictEqual(res.status, 400);
193+
done();
194+
})
195+
.catch(err => done(err));
196+
});
197+
it("DELETE Should return 400 for bad format categories", (done) => {
198+
const data = goodResponse();
199+
data.categories = "sponsor";
200+
client.delete(endpoint, { data })
201+
.then(res => {
202+
assert.strictEqual(res.status, 400);
203+
done();
204+
})
205+
.catch(err => done(err));
206+
});
207+
it("POST Should return 400 for bad format categories", (done) => {
208+
const data = goodResponse();
209+
data.categories = "sponsor";
210+
client.post(endpoint, data)
211+
.then(res => {
212+
assert.strictEqual(res.status, 400);
213+
done();
214+
})
215+
.catch(err => done(err));
216+
});
217+
it("DELETE Should return 403 if user is not VIP", (done) => {
218+
const data = goodResponse();
219+
client.delete(endpoint, { data })
220+
.then(res => {
221+
assert.strictEqual(res.status, 403);
222+
done();
223+
})
224+
.catch(err => done(err));
225+
});
226+
it("POST Should return 403 if user is not VIP", (done) => {
227+
const data = goodResponse();
228+
client.post(endpoint, data)
229+
.then(res => {
230+
assert.strictEqual(res.status, 403);
231+
done();
232+
})
233+
.catch(err => done(err));
234+
});
235+
});
236+
237+
describe("array of DELETE/POST lockCategories 400 tests", () => {
238+
for (const key of [ "videoID", "userID", "categories" ]) {
239+
for (const method of ["DELETE", "POST"]) {
240+
it(`${method} - Should return 400 for invalid ${key}`, (done) => {
241+
const data = goodResponse();
242+
data[key] = null;
243+
client(endpoint, { data, method })
244+
.then(res => {
245+
assert.strictEqual(res.status, 400);
246+
done();
247+
})
248+
.catch(err => done(err));
249+
});
250+
}
251+
}
252+
});

0 commit comments

Comments
 (0)