Skip to content

Commit 3e5a031

Browse files
authored
Feat:Tests productController listProduct/updateProduct/deleteProduct (#19)
1 parent 325613d commit 3e5a031

8 files changed

Lines changed: 1141 additions & 11 deletions

File tree

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
"dev": "node --watch --env-file=.env src/server.js",
99
"dev:actions": "node --watch src/server.js",
1010
"dev:debug": "node --inspect --env-file=.env src/server.js",
11-
"test": "node --test --experimental-test-coverage --env-file=.env",
12-
"test:actions": "node --test --experimental-test-coverage",
11+
"test": "node --test --inspect --experimental-test-coverage --env-file=.env",
12+
"test:actions": "node --test --inspect --experimental-test-coverage",
1313
"dc:up": "docker compose up -d && docker compose logs -f prisma_tests",
1414
"dc:down": "docker compose down --volumes --remove-orphans",
1515
"setup:prisma": "npx prisma generate && npx prisma migrate deploy && npx prisma db push"

src/models/userModel.js

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,11 @@ export class UserModelRepository {
1616
}
1717

1818
async createUserToken(user_id) {
19-
20-
try {
21-
await this._database._prismaService.userTokens.create({
22-
data: {
23-
user_id: user_id
24-
}
25-
});
26-
}catch(error) {}
27-
19+
await this._database._prismaService.userTokens.create({
20+
data: {
21+
user_id: user_id
22+
}
23+
});
2824
}
2925

3026
async listUser(user_id) {
Lines changed: 326 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,326 @@
1+
import { makePOSTWithTokenRequests } from "../../utils/FetchFunctionsTests/postFunctionWithToken.js";
2+
import { makeDELETERequestsProducts } from "../../utils/FetchFunctionsTests/deleteFunction.js";
3+
import { makePOSTRequests } from "../../utils/FetchFunctionsTests/postFunction.js"
4+
import { PrismaService } from "../../database/prisma/prismaService.js";
5+
import { describe, it, before, after } from "node:test";
6+
import assert from "node:assert";
7+
8+
const prismaService = new PrismaService();
9+
10+
describe("Product Controller (deleteProduct) Tests", () => {
11+
12+
before(async () => {
13+
await prismaService._prismaService.users.deleteMany();
14+
});
15+
16+
after(async () => {
17+
await prismaService._prismaService.users.deleteMany();
18+
await prismaService._prismaService.$disconnect();
19+
});
20+
21+
it("Should be able to delete a Product, if the paramethers are ok", async () => {
22+
23+
const user = {
24+
username: "Arthur Maldonado",
25+
email: "ku@ez.no",
26+
password: "3898"
27+
}
28+
29+
const endPoint = "createUser";
30+
await makePOSTRequests(endPoint, user);
31+
32+
const endPoint2 = "loginUser";
33+
const request = {
34+
email: user.email,
35+
password: user.password
36+
}
37+
38+
const data2 = await makePOSTRequests(endPoint2, request);
39+
40+
const endPoint3 = "createProduct";
41+
const request2 = {
42+
product_name: "Smart TV",
43+
price: 5200.10,
44+
category: "TV",
45+
token: data2.accessToken
46+
}
47+
48+
const data3 = await makePOSTWithTokenRequests(endPoint3, request2);
49+
50+
const endPoint4 = "deleteProduct";
51+
const request3 = {
52+
product_id: data3.product.product_id,
53+
token: data2.accessToken
54+
}
55+
56+
const data4 = await makeDELETERequestsProducts(endPoint4, request3);
57+
58+
assert.strictEqual(data4.message, "Product deleted with sucess !");
59+
});
60+
61+
it("should not be able to delete a product, if user dosen't have or dosen't set a valid (token)", async () => {
62+
63+
const user = {
64+
username: "Sarah Sutton",
65+
email: "salsigve@padrot.jm",
66+
password: "4565"
67+
}
68+
69+
const endPoint1 = "createUser";
70+
await makePOSTRequests(endPoint1, user);
71+
72+
const endPoint2 = "loginUser";
73+
const request = {
74+
email: user.email,
75+
password: user.password
76+
}
77+
78+
const data2 = await makePOSTRequests(endPoint2, request);
79+
80+
const endPoint3 = "createProduct";
81+
const request2 = {
82+
product_name: "Playstation 5",
83+
price: 5000.50,
84+
category: "Video game",
85+
token: data2.accessToken
86+
}
87+
88+
const data3 = await makePOSTWithTokenRequests(endPoint3, request2);
89+
90+
const endPoint4 = "deleteProduct";
91+
const request3 = {
92+
product_id: data3.product.product_id,
93+
token: ""
94+
}
95+
96+
const data4 = await makeDELETERequestsProducts(endPoint4, request3);
97+
98+
assert.strictEqual(data4.message, "jwt must be provided");
99+
});
100+
101+
it("should not be able to delete a product, if the (token) is not valid or fake", async () => {
102+
103+
const user = {
104+
username: "Mabelle Cobb",
105+
email: "omuruzic@keficab.sv",
106+
password: "4676"
107+
}
108+
109+
const endPoint1 = "createUser";
110+
await makePOSTRequests(endPoint1, user);
111+
112+
const endPoint2 = "loginUser";
113+
const request = {
114+
email: user.email,
115+
password: user.password
116+
}
117+
118+
const data2 = await makePOSTRequests(endPoint2, request);
119+
120+
const endPoint3 = "createProduct";
121+
const request2 = {
122+
product_name: "Nootebook",
123+
price: 7500.00,
124+
category: "Computer",
125+
token: data2.accessToken
126+
}
127+
128+
const data3 = await makePOSTWithTokenRequests(endPoint3, request2);
129+
130+
const endPoint4 = "deleteProduct";
131+
const request3 = {
132+
product_id: data3.product.product_id,
133+
token: "FAKE_TOKEN"
134+
}
135+
136+
const data4 = await makeDELETERequestsProducts(endPoint4, request3);
137+
138+
assert.rejects(async () => {
139+
throw new TypeError(data4.message);
140+
}, {
141+
message: "jwt malformed"
142+
});
143+
144+
});
145+
146+
it("should not be able to delete a product, if (token) is not valid", async () => {
147+
148+
const user = {
149+
username: "Beulah Summers",
150+
email: "piz@ga.cl",
151+
password: "4787"
152+
}
153+
154+
const endPoint1 = "createUser";
155+
await makePOSTRequests(endPoint1, user);
156+
157+
const endPoint2 = "loginUser";
158+
const request = {
159+
email: user.email,
160+
password: user.password
161+
}
162+
163+
const data2 = await makePOSTRequests(endPoint2, request);
164+
165+
const endPoint3 = "createProduct";
166+
const request2 = {
167+
product_name: "DVD",
168+
price: 800.10,
169+
category: "Dvd",
170+
token: data2.accessToken
171+
}
172+
173+
await makePOSTWithTokenRequests(endPoint3, request2);
174+
175+
const endPoint4 = "deleteProduct";
176+
const request3 = {
177+
product_id: "",
178+
token: process.env.INVALID_TOKEN
179+
}
180+
181+
const data4 = await makeDELETERequestsProducts(endPoint4, request3);
182+
183+
assert.rejects(async () => {
184+
throw new TypeError(data4.message);
185+
}, {
186+
message: "invalid token"
187+
});
188+
189+
});
190+
191+
it("should not be able to delete a product, if the (token) signature is not valid", async () => {
192+
193+
const user = {
194+
username: "Jeff Ryan",
195+
email: "upeilpel@newufpok.ly",
196+
password: "2398"
197+
}
198+
199+
const endPoint1 = "createUser";
200+
await makePOSTRequests(endPoint1, user);
201+
202+
const endPoint2 = "loginUser";
203+
const request = {
204+
email: user.email,
205+
password: user.password
206+
}
207+
208+
const data2 = await makePOSTRequests(endPoint2, request);
209+
210+
const endPoint3 = "createProduct";
211+
const request2 = {
212+
product_name: "Monitor",
213+
price: 1000.00,
214+
category: "Computer Items",
215+
token: data2.accessToken
216+
}
217+
218+
const data3 = await makePOSTWithTokenRequests(endPoint3, request2);
219+
220+
const endPoint4 = "deleteProduct";
221+
const request3 = {
222+
product_id: data3.product.product_id,
223+
token: process.env.FAKE_TOKEN
224+
}
225+
226+
const data4 = await makeDELETERequestsProducts(endPoint4, request3);
227+
228+
assert.rejects(async () => {
229+
throw new TypeError(data4.message);
230+
}, {
231+
message: "invalid signature"
232+
});
233+
234+
});
235+
236+
it("should not be able to delete a product, if user dosen't set a (user_id)", async () => {
237+
238+
const user = {
239+
username: "Cecilia Lawson",
240+
email: "gi@nifofvel.au",
241+
password: "3377"
242+
}
243+
244+
const endPoint1 = "createUser";
245+
await makePOSTRequests(endPoint1, user);
246+
247+
const endPoint2 = "loginUser";
248+
const request = {
249+
email: user.email,
250+
password: user.password
251+
}
252+
253+
const data2 = await makePOSTRequests(endPoint2, request);
254+
255+
const endPoint3 = "createProduct";
256+
const request2 = {
257+
product_name: "Monitor",
258+
price: 1000.00,
259+
category: "Computer Items",
260+
token: data2.accessToken
261+
}
262+
263+
await makePOSTWithTokenRequests(endPoint3, request2);
264+
265+
const endPoint4 = "deleteProduct";
266+
const request3 = {
267+
product_id: "",
268+
token: data2.accessToken
269+
}
270+
271+
const data4 = await makeDELETERequestsProducts(endPoint4, request3);
272+
273+
assert.rejects(async () => {
274+
throw new TypeError(data4.message);
275+
}, {
276+
message: "Product ID must have a value !"
277+
});
278+
279+
});
280+
281+
it("should not be able to delete a user, if user (user_id) is not valid/wrong", async () => {
282+
283+
const user = {
284+
username: "Larry Parker",
285+
email: "nucha@joakauk.ml",
286+
password: "1234"
287+
}
288+
289+
const endPoint1 = "createUser";
290+
await makePOSTRequests(endPoint1, user);
291+
292+
const endPoint2 = "loginUser";
293+
const request = {
294+
email: user.email,
295+
password: user.password
296+
}
297+
298+
const data2 = await makePOSTRequests(endPoint2, request);
299+
300+
const endPoint3 = "createProduct";
301+
const request2 = {
302+
product_name: "Monitor",
303+
price: 1000.00,
304+
category: "Computer Items",
305+
token: data2.accessToken
306+
}
307+
308+
await makePOSTWithTokenRequests(endPoint3, request2);
309+
310+
const endPoint4 = "deleteProduct";
311+
const request3 = {
312+
product_id: process.env.FAKE_USER_ID,
313+
token: data2.accessToken
314+
}
315+
316+
const data4 = await makeDELETERequestsProducts(endPoint4, request3);
317+
318+
assert.rejects(async () => {
319+
throw new TypeError(data4.message);
320+
}, {
321+
message: "Product not found !"
322+
});
323+
324+
});
325+
326+
});

0 commit comments

Comments
 (0)