152 lines
3.9 KiB
JavaScript
152 lines
3.9 KiB
JavaScript
const request = require("supertest");
|
|
const app = require("../src/app");
|
|
const prisma = require("../src/config/prisma");
|
|
|
|
// ------------------------
|
|
// Mock du mailer pour éviter envoi réel
|
|
// ------------------------
|
|
jest.mock("../src/config/mailer", () => ({
|
|
sendMail: jest.fn().mockResolvedValue(true),
|
|
}));
|
|
|
|
// ------------------------
|
|
// Réinitialisation DB avant tests
|
|
// ------------------------
|
|
beforeAll(async () => {
|
|
await prisma.claim.deleteMany();
|
|
await prisma.participation.deleteMany();
|
|
await prisma.ticket.deleteMany();
|
|
await prisma.user.deleteMany();
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await prisma.$disconnect();
|
|
});
|
|
|
|
describe("THE TIP TOP - FULL E2E FLOW", () => {
|
|
let token;
|
|
let ticketCode = "ABC123";
|
|
|
|
// ------------------------
|
|
// 1. REGISTER
|
|
// ------------------------
|
|
test("Register user", async () => {
|
|
const res = await request(app)
|
|
.post("/api/auth/register")
|
|
.send({
|
|
firstname: "Test",
|
|
lastname: "User",
|
|
email: "test@test.com",
|
|
password: "Password123",
|
|
});
|
|
|
|
expect([201, 409]).toContain(res.statusCode);
|
|
});
|
|
|
|
// ------------------------
|
|
// 2. LOGIN
|
|
// ------------------------
|
|
test("Login user", async () => {
|
|
// Validation du user pour bypasser vérification email
|
|
await prisma.user.update({
|
|
where: { email: "test@test.com" },
|
|
data: { isEmailVerified: true },
|
|
});
|
|
|
|
const res = await request(app)
|
|
.post("/api/auth/login")
|
|
.send({
|
|
email: "test@test.com",
|
|
password: "Password123",
|
|
});
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
expect(res.body.token).toBeDefined();
|
|
token = res.body.token;
|
|
});
|
|
|
|
// ------------------------
|
|
// 3. PARTICIPATE GAME
|
|
// ------------------------
|
|
test("Participate to game", async () => {
|
|
const res = await request(app)
|
|
.post("/api/game/participate")
|
|
.set("Authorization", `Bearer ${token}`)
|
|
.send({ code: ticketCode });
|
|
|
|
expect([200, 201, 404, 409, 400]).toContain(res.statusCode);
|
|
console.log("Ticket in DB before participate:", ticketCode);
|
|
});
|
|
|
|
// ------------------------
|
|
// 4. MY GAINS
|
|
// ------------------------
|
|
test("Get my gains", async () => {
|
|
const res = await request(app)
|
|
.get("/api/game/my-gains")
|
|
.set("Authorization", `Bearer ${token}`);
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
expect(res.body.gains).toBeDefined();
|
|
});
|
|
|
|
// ------------------------
|
|
// 3. GENERER UN TICKET
|
|
// ------------------------
|
|
test("Create a ticket for testing", async () => {
|
|
const lot = await prisma.lot.create({
|
|
data: {
|
|
name: "Lot Test",
|
|
description: "Lot pour test E2E",
|
|
value: 10,
|
|
percentage: 100
|
|
},
|
|
});
|
|
|
|
const ticket = await prisma.ticket.create({
|
|
data: {
|
|
code: ticketCode,
|
|
lotId: lot.id
|
|
}
|
|
});
|
|
|
|
expect(ticket).toBeDefined();
|
|
expect(ticket.code).toBe(ticketCode);
|
|
});
|
|
|
|
// ------------------------
|
|
// 4. PARTICIPATE GAME
|
|
// ------------------------
|
|
test("Participate to game", async () => {
|
|
const res = await request(app)
|
|
.post("/api/game/participate")
|
|
.set("Authorization", `Bearer ${token}`)
|
|
.send({ code: ticketCode });
|
|
|
|
expect([200, 201, 404, 409, 400]).toContain(res.statusCode);
|
|
});
|
|
|
|
// ------------------------
|
|
// 5. MY GAINS
|
|
// ------------------------
|
|
test("Get my gains", async () => {
|
|
const res = await request(app)
|
|
.get("/api/game/my-gains")
|
|
.set("Authorization", `Bearer ${token}`);
|
|
|
|
expect(res.statusCode).toBe(200);
|
|
expect(res.body.gains).toBeDefined();
|
|
});
|
|
|
|
// ------------------------
|
|
// 6. ADMIN STATS (CLIENT access denied)
|
|
// ------------------------
|
|
test("Admin stats - CLIENT access denied", async () => {
|
|
const res = await request(app)
|
|
.get("/api/admin/stats")
|
|
.set("Authorization", `Bearer ${token}`);
|
|
|
|
expect(res.statusCode).toBe(403);
|
|
expect(res.body.message || res.body).toBeDefined();
|
|
});
|
|
}); |