diff --git a/__tests__/utils/helpers.test.ts b/__tests__/utils/helpers.test.ts index 004c9ec..27e3698 100644 --- a/__tests__/utils/helpers.test.ts +++ b/__tests__/utils/helpers.test.ts @@ -6,6 +6,7 @@ import { setCookie, getCookie, removeCookie, + getToken, setToken, removeToken, formatDate, @@ -136,17 +137,38 @@ describe('Token Helpers', () => { jest.clearAllMocks(); }); + describe('getToken', () => { + it('should get token from localStorage', () => { + localStorageMock.getItem.mockReturnValueOnce('stored-token'); + expect(getToken()).toBe('stored-token'); + }); + + it('should fall back to cookie if localStorage is empty', () => { + localStorageMock.getItem.mockReturnValueOnce(null); + cookieStore['auth_token'] = 'cookie-token'; + expect(getToken()).toBe('cookie-token'); + }); + + it('should return null if no token exists', () => { + localStorageMock.getItem.mockReturnValueOnce(null); + expect(getToken()).toBeNull(); + }); + }); + describe('setToken', () => { it('should set token in localStorage and cookie', () => { setToken('my-token'); expect(localStorageMock.setItem).toHaveBeenCalled(); + expect(cookieStore['auth_token']).toBe('my-token'); }); }); describe('removeToken', () => { it('should remove token from localStorage and cookie', () => { + cookieStore['auth_token'] = 'my-token'; removeToken(); expect(localStorageMock.removeItem).toHaveBeenCalled(); + expect(cookieStore['auth_token']).toBeUndefined(); }); }); }); diff --git a/sonar-project.properties b/sonar-project.properties index eba22c8..8ec6125 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -10,8 +10,8 @@ sonar.sources=app,components,contexts,hooks,lib,services,types,utils # Exclusions sonar.exclusions=**/node_modules/**,**/*.spec.ts,**/*.test.ts,**/*.spec.tsx,**/*.test.tsx,**/coverage/**,**/.next/**,**/public/**,**/*.config.js,**/*.config.ts,**/dist/**,**/build/** -# Coverage exclusions (React components/pages tested with E2E, not unit tests) -sonar.coverage.exclusions=app/**/*.tsx,components/**/*.tsx,contexts/**/*.tsx,types/**/*.ts,**/*.d.ts +# Coverage exclusions (React components/pages/API routes tested with E2E, not unit tests) +sonar.coverage.exclusions=app/**/*.tsx,app/api/**/*.ts,components/**/*.tsx,contexts/**/*.tsx,types/**/*.ts,lib/**/*.ts,**/*.d.ts # Encodage des fichiers sonar.sourceEncoding=UTF-8