From 562a570ddaa22c41fdbd915d8e8dfac58d739c29 Mon Sep 17 00:00:00 2001 From: T'JAMPENS QUENTIN p2406187 Date: Wed, 10 Dec 2025 14:57:50 +0100 Subject: [PATCH] Add unit test --- src/utils/auth/login.test.js | 56 +++++++++++++++++++++++++++++++++++ src/utils/auth/logout.test.js | 53 +++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 src/utils/auth/login.test.js create mode 100644 src/utils/auth/logout.test.js diff --git a/src/utils/auth/login.test.js b/src/utils/auth/login.test.js new file mode 100644 index 0000000..b37f9f9 --- /dev/null +++ b/src/utils/auth/login.test.js @@ -0,0 +1,56 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import login from './login'; + +vi.mock('../getXSRF.js', () => ({ + default: vi.fn(() => Promise.resolve('fake-csrf-token')) +})); + +describe('login()', () => { + + beforeEach(() => { + vi.clearAllMocks(); + global.fetch = vi.fn(); + }); + + it('envoie la requête de login et retourne les données utilisateur', async () => { + global.fetch.mockResolvedValue({ + ok: true, + status: 200, + json: async () => ({ id: 1, name: 'John Doe' }) + }); + + const result = await login('test@example.com', 'secret'); + + expect(global.fetch).toHaveBeenCalledOnce(); + expect(global.fetch).toHaveBeenCalledWith( + `http://${import.meta.env.VITE_API_URL}/api/users/login`, + { + method: 'POST', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + 'X-XSRF-TOKEN': 'fake-csrf-token', + 'Accept': 'application/json' + }, + body: JSON.stringify({ email: 'test@example.com', password: 'secret' }) + } + ); + + expect(result).toEqual({ + status: 200, + data: { id: 1, name: 'John Doe' } + }); + }); + + it('retourne une erreur quand la réponse HTTP est mauvaise', async () => { + global.fetch.mockResolvedValue({ + ok: false, + status: 401 + }); + + const result = await login('x', 'y'); + + expect(result).toBeInstanceOf(Error); + expect(result.message).toBe('Erreur HTTP 401'); + }); +}); diff --git a/src/utils/auth/logout.test.js b/src/utils/auth/logout.test.js new file mode 100644 index 0000000..f553e2e --- /dev/null +++ b/src/utils/auth/logout.test.js @@ -0,0 +1,53 @@ +import { describe, it, expect, vi, beforeEach } from 'vitest'; +import logout from './logout'; + +vi.mock('../getXSRF.js', () => { + return { + default: vi.fn(() => Promise.resolve('fake-csrf-token')) + }; +}); + +describe('logout()', () => { + + beforeEach(() => { + vi.clearAllMocks(); + global.fetch = vi.fn(); + }); + + it('envoie bien la requête de logout', async () => { + global.fetch.mockResolvedValue({ + ok: true, + status: 200 + }); + + const result = await logout(); + + expect(global.fetch).toHaveBeenCalledOnce(); + expect(global.fetch).toHaveBeenCalledWith( + `http://${import.meta.env.VITE_API_URL}/api/users/logout`, + { + method: 'POST', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'X-XSRF-TOKEN': 'fake-csrf-token' + }, + } + ); + + expect(result).toEqual({ status: 200 }); + }); + + it('renvoie une erreur quand la réponse HTTP est mauvaise', async () => { + global.fetch.mockResolvedValue({ + ok: false, + status: 500 + }); + + const result = await logout(); + + expect(result).toBeInstanceOf(Error); + expect(result.message).toBe('Erreur HTTP 500'); + }); +});