Skip to content

Commit 949aebe

Browse files
Merge pull request #1 from LucasMeloSena/finished-user-tests
finished user tests
2 parents 3afa956 + 988639a commit 949aebe

16 files changed

+476
-35
lines changed

server/package-lock.json

Lines changed: 15 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"devDependencies": {
2222
"@types/async-retry": "^1.4.8",
2323
"@types/bcryptjs": "^2.4.6",
24+
"@types/bson": "^4.2.0",
2425
"@types/cors": "^2.8.17",
2526
"@types/express": "^4.17.21",
2627
"@types/jest": "^29.5.12",
@@ -41,6 +42,7 @@
4142
"@prisma/client": "^5.13.0",
4243
"async-retry": "^1.3.3",
4344
"bcryptjs": "^2.4.3",
45+
"bson": "^6.8.0",
4446
"cors": "^2.8.5",
4547
"crypto": "^1.0.1",
4648
"dotenv": "^16.4.5",

server/src/controllers/user.controller.ts

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { generateToken, getExpirationDate } from "../utils/token";
2323
import { validarCampoExistenteUserSchema } from "../utils/validator";
2424
import { z } from "zod";
2525
import { transporter } from "../infra/email";
26-
import { returnMessage } from "../utils/constants";
26+
import { userReturnMessage } from "../utils/constants";
2727

2828
export const createUserController = async (req: Request, res: Response, next: NextFunction) => {
2929
try {
@@ -35,7 +35,7 @@ export const createUserController = async (req: Request, res: Response, next: Ne
3535
data: user,
3636
});
3737

38-
res.status(201).json({ message: returnMessage.register });
38+
res.status(201).json({ message: userReturnMessage.register });
3939
} catch (err) {
4040
const errMessage: string = (err as Error).message ?? "Ocorreu um erro ao tentar cadastrar o usuário! Por favor, tente novamente mais tarde!";
4141

@@ -79,7 +79,7 @@ export const loginUserController = async (req: Request, res: Response, next: Nex
7979
if (user && correctPass) {
8080
const token: string = generateToken(user);
8181
const expirationDate = getExpirationDate(token);
82-
res.status(200).json({ message: returnMessage.login, user: user, token: token, expiresIn: expirationDate });
82+
res.status(200).json({ message: userReturnMessage.login, user: user, token: token, expiresIn: expirationDate });
8383
}
8484
} catch (err) {
8585
const errMessage: string = (err as Error).message ?? "Ocorreu um erro ao tentar realizar o login! Por favor, tente novamente mais tarde!";
@@ -113,7 +113,7 @@ export const searchUserByIdController = async (req: Request, res: Response, next
113113
if (!user) {
114114
return res.status(404).json({ message: "Usuário não encontrado!" });
115115
} else {
116-
return res.status(200).json({ message: returnMessage.searchById, user: user });
116+
return res.status(200).json({ message: userReturnMessage.searchById, user: user });
117117
}
118118
} catch (err) {
119119
const msg: string = "Ocorreu um erro ao tentar encontrar o usuário! Por favor, tente novamente mais tarde!";
@@ -158,7 +158,7 @@ export const favoriteUserRecipeController = async (req: Request, res: Response,
158158
},
159159
});
160160

161-
return res.status(201).json({ message: "Receita favoritada com sucesso!" });
161+
return res.status(201).json({ message: userReturnMessage.favoriteRecipe });
162162
} catch (err) {
163163
const msg: string = "Ocorreu um erro ao tentar favoritar esta receita! Por favor, tente novamente mais tarde!";
164164
const errMessage: string = (err as Error).message ?? msg;
@@ -194,7 +194,7 @@ export const searchFavoriteUserRecipesController = async (req: Request, res: Res
194194
return res.status(404).json({ message: "Receitas não encontradas!" });
195195
} else {
196196
const recipesId: number[] = userFavoriteUserRecipes.map((item) => item.recipeId);
197-
res.status(200).json({ message: "Dados encontrados com sucesso!", recipes: recipesId });
197+
res.status(200).json({ message: userReturnMessage.searchFavoriteRecipes, recipes: recipesId });
198198
}
199199
} catch (err) {
200200
const msg: string = "Ocorreu um erro ao tentar localizar as receitas! Por favor, tente novamente mais tarde!";
@@ -222,14 +222,25 @@ export const deleteFavoriteUserRecipeController = async (req: Request, res: Resp
222222
try {
223223
const userRecipe: UserRecipe = createUserRecipeSchema.parse(req.body);
224224

225+
const recipes = await prisma.user_recipe.findMany({
226+
where: {
227+
userId: userRecipe.userId,
228+
recipeId: userRecipe.recipeId,
229+
},
230+
});
231+
232+
if (recipes.length == 0) {
233+
return res.status(404).json({ message: "Não é possível remover uma receita que não está nos seus favoritos!" });
234+
}
235+
225236
await prisma.user_recipe.deleteMany({
226237
where: {
227238
userId: userRecipe.userId,
228239
recipeId: userRecipe.recipeId,
229240
},
230241
});
231242

232-
return res.status(201).json({ message: "Receita removida dos favoritos com sucesso!" });
243+
return res.status(200).json({ message: userReturnMessage.deleteFavoriteRecipe });
233244
} catch (err) {
234245
const msg: string = "Ocorreu um erro ao tentar remover as receitas dos favoritos! Por favor, tente novamente mais tarde!";
235246
const errMessage: string = (err as Error).message ?? msg;
@@ -262,6 +273,10 @@ export const updateUserController = async (req: Request, res: Response, next: Ne
262273
},
263274
});
264275

276+
if (!userInfo) {
277+
return res.status(404).json({message: "Usuário não encontrado!"})
278+
}
279+
265280
if (userInfo?.senha != user.senha) {
266281
user.senha = await cryptPass(user.senha);
267282
}
@@ -280,7 +295,7 @@ export const updateUserController = async (req: Request, res: Response, next: Ne
280295
},
281296
});
282297

283-
res.status(201).json({ message: "Usuário atualizado com sucesso!", user: userInfo });
298+
res.status(200).json({ message: userReturnMessage.updateUser, user: userInfo });
284299
} catch (err) {
285300
const errMessage: string = (err as Error).message ?? "Ocorreu um erro ao tentar atualizar o usuário! Por favor, tente novamente mais tarde!";
286301

@@ -323,7 +338,7 @@ export const authCodeController = async (req: Request, res: Response, next: Next
323338
});
324339

325340
res.status(200).json({
326-
message: "Email enviado com sucesso!",
341+
message: userReturnMessage.email,
327342
code: codigo,
328343
id: conta.id,
329344
});
@@ -353,7 +368,7 @@ export const updateUserPasswordController = async (req: Request, res: Response,
353368
user.password = await cryptPass(user.password);
354369

355370
if (user.token != process.env.TOKEN) {
356-
res.status(404).json({ message: "Token inválido!" });
371+
return res.status(404).json({ message: "Token inválido!" });
357372
}
358373

359374
await prisma.user.update({
@@ -366,7 +381,7 @@ export const updateUserPasswordController = async (req: Request, res: Response,
366381
},
367382
});
368383

369-
res.status(200).json({ message: "Senha do usuário atualizada com sucesso!" });
384+
res.status(200).json({ message: userReturnMessage.updatePass });
370385
} catch (err) {
371386
const errMessage: string = (err as Error).message ?? "Ocorreu um erro ao tentar atualizar o usuário! Por favor, tente novamente mais tarde!";
372387

server/src/tests/email/send.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Request, Response, NextFunction } from "express";
22
import { authCodeController } from "../../controllers/user.controller";
33
import { prisma } from "../../infra/database/database";
4-
import { returnMessage } from "../../utils/constants";
4+
import { userReturnMessage } from "../../utils/constants";
55

66
jest.mock("nodemailer", () => {
77
const sendMailMock = jest.fn().mockResolvedValue("Email sent");
@@ -12,7 +12,7 @@ jest.mock("nodemailer", () => {
1212
};
1313
});
1414

15-
describe("Send Email To Get Auth Code Controller", () => {
15+
describe("Send Email To Get Auth Code", () => {
1616
let req: Partial<Request>;
1717
let res: Partial<Response>;
1818
let next: NextFunction;
@@ -34,7 +34,7 @@ describe("Send Email To Get Auth Code Controller", () => {
3434
jest.clearAllMocks();
3535
});
3636

37-
it("POST to /auth/pass should return 200", async () => {
37+
it("POST to user/auth/pass should return 200", async () => {
3838
prisma.user.findUnique = jest.fn().mockResolvedValue({
3939
id: "1",
4040
nome: "Test User",
@@ -49,27 +49,27 @@ describe("Send Email To Get Auth Code Controller", () => {
4949
await authCodeController(req as Request, res as Response, next);
5050

5151
expect(prisma.user.findUnique).toHaveBeenCalledWith({
52-
where: { email: '[email protected]' },
52+
where: { email: "[email protected]" },
5353
});
5454
expect(res.status).toHaveBeenCalledWith(200);
5555
expect(res.json).toHaveBeenCalledWith({
56-
message: returnMessage.email,
56+
message: userReturnMessage.email,
5757
code: expect.any(String),
5858
id: expect.any(String),
5959
});
6060
});
6161

62-
it("POST to auth/pass should not be able to send an email with invalid user", async () => {
62+
it("POST to user/auth/pass should not be able to send an email with invalid user", async () => {
6363
prisma.user.findUnique = jest.fn().mockResolvedValue(null);
6464

6565
await authCodeController(req as Request, res as Response, next);
6666

6767
expect(prisma.user.findUnique).toHaveBeenCalledWith({
68-
where: { email: '[email protected]' },
68+
where: { email: "[email protected]" },
6969
});
7070
expect(res.status).toHaveBeenCalledWith(404);
7171
expect(res.json).toHaveBeenCalledWith({
7272
message: "Nenhuma conta com este email foi encontrada!",
7373
});
74-
})
74+
});
7575
});

server/src/tests/upload/delete.test.ts

Whitespace-only changes.

server/src/tests/upload/update.test.ts

Whitespace-only changes.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import request from "supertest";
2+
import orchestrator from "../orchestrator";
3+
import { app } from "../../app";
4+
5+
describe("Upload File", () => {
6+
beforeAll(async () => {
7+
await orchestrator.waitForAllServices();
8+
});
9+
10+
it("POST to upload/user/image should return 200", async () => {
11+
12+
})
13+
})

server/src/tests/user/create.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import request from "supertest";
22
import orchestrator from "../orchestrator";
33
import { app } from "../../app";
44
import { prisma } from "../../infra/database/database";
5-
import { returnMessage } from "../../utils/constants";
5+
import { userReturnMessage } from "../../utils/constants";
66

7-
describe("Create User Controller", () => {
7+
describe("Create User", () => {
88
beforeAll(async () => {
99
await orchestrator.waitForAllServices();
10-
await prisma.user.deleteMany();
1110
await prisma.user_recipe.deleteMany();
11+
await prisma.user.deleteMany();
1212
});
1313

1414
afterAll(async () => {
@@ -25,7 +25,7 @@ describe("Create User Controller", () => {
2525
dt_cadastro: new Date().toISOString(),
2626
dt_atualizacao: new Date().toISOString(),
2727
});
28-
expect(response.body.message).toBe(returnMessage.register);
28+
expect(response.body.message).toBe(userReturnMessage.register);
2929
expect(response.status).toBe(201);
3030
});
3131

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import request from "supertest";
2+
import orchestrator from "../orchestrator";
3+
import { app } from "../../app";
4+
import { prisma } from "../../infra/database/database";
5+
import { userReturnMessage } from "../../utils/constants";
6+
7+
describe("Delete Favorite Recipe", () => {
8+
beforeAll(async () => {
9+
await orchestrator.waitForAllServices();
10+
await prisma.user_recipe.deleteMany();
11+
await prisma.user.deleteMany();
12+
});
13+
14+
afterAll(async () => {
15+
await prisma.$disconnect();
16+
});
17+
18+
it("DELETE to /user/favorite/recipe should return 200", async () => {
19+
await request(app).post("/user/register").send({
20+
nome: "John Doe",
21+
22+
celular: "(31) 9 0000-0099",
23+
img_profile: "https://imagemdeperfilvalida.com.br",
24+
senha: "123456",
25+
dt_cadastro: new Date().toISOString(),
26+
dt_atualizacao: new Date().toISOString(),
27+
});
28+
29+
const loginResponse = await request(app).post("/user/login").send({
30+
31+
senha: "123456",
32+
});
33+
34+
await request(app)
35+
.post("/user/favorite/recipe")
36+
.send({
37+
userId: loginResponse.body.user.id,
38+
recipeId: 1,
39+
})
40+
.set("Authorization", `Bearer ${loginResponse.body.token}`);
41+
42+
const response = await request(app)
43+
.delete("/user/favorite/recipe")
44+
.send({
45+
userId: loginResponse.body.user.id,
46+
recipeId: 1,
47+
})
48+
.set("Authorization", `Bearer ${loginResponse.body.token}`);
49+
50+
expect(response.status).toBe(200);
51+
expect(response.body.message).toBe(userReturnMessage.deleteFavoriteRecipe);
52+
});
53+
54+
it("DELETE to /user/favorite/recipe should not be able to delete a recipe that has not been favorited", async () => {
55+
const loginResponse = await request(app).post("/user/login").send({
56+
57+
senha: "123456",
58+
});
59+
60+
const response = await request(app)
61+
.delete("/user/favorite/recipe")
62+
.send({
63+
userId: loginResponse.body.user.id,
64+
recipeId: 1,
65+
})
66+
.set("Authorization", `Bearer ${loginResponse.body.token}`);
67+
68+
expect(response.status).toBe(404)
69+
expect(response.body.message).toBe("Não é possível remover uma receita que não está nos seus favoritos!")
70+
})
71+
72+
it("DELETE to /user/favorite/recipe should not be able to remove without token", async () => {
73+
const loginResponse = await request(app).post("/user/login").send({
74+
75+
senha: "123456",
76+
});
77+
78+
await request(app)
79+
.post("/user/favorite/recipe")
80+
.send({
81+
userId: loginResponse.body.user.id,
82+
recipeId: 1,
83+
})
84+
.set("Authorization", `Bearer ${loginResponse.body.token}`);
85+
86+
const response = await request(app)
87+
.delete("/user/favorite/recipe")
88+
.send({
89+
userId: loginResponse.body.user.id,
90+
recipeId: 1,
91+
})
92+
93+
expect(response.status).toBe(404);
94+
expect(response.body.message).toBe("Token não fornecido!");
95+
});
96+
});

0 commit comments

Comments
 (0)