diff --git a/src/lib/api/surgeryAPI.test.ts b/src/lib/api/surgeryAPI.test.ts new file mode 100644 index 00000000..5e5a4dc9 --- /dev/null +++ b/src/lib/api/surgeryAPI.test.ts @@ -0,0 +1,25 @@ +import { surgeryAPI } from './surgeryAPI'; + +describe('surgeryAPI auth handling', () => { + beforeEach(() => { + jest.restoreAllMocks(); + localStorage.clear(); + }); + + it('throws a clear error when authToken is missing', async () => { + expect.hasAssertions(); + + await expect(surgeryAPI.findAll()).rejects.toThrow( + 'Authentication required. Please log in to continue.' + ); + }); + + it('throws a clear error when authToken is null string', async () => { + localStorage.setItem('authToken', 'null'); + expect.hasAssertions(); + + await expect(surgeryAPI.findAll()).rejects.toThrow( + 'Authentication required. Please log in to continue.' + ); + }); +}); diff --git a/src/lib/api/surgeryAPI.ts b/src/lib/api/surgeryAPI.ts index a4b55037..7bfb028b 100644 --- a/src/lib/api/surgeryAPI.ts +++ b/src/lib/api/surgeryAPI.ts @@ -65,9 +65,14 @@ class SurgeryAPI { this.api.interceptors.request.use((config) => { const token = localStorage.getItem('authToken'); - if (token) { - config.headers.Authorization = `Bearer ${token}`; + if (!token || token.trim() === '' || token === 'null') { + throw new Error('Authentication required. Please log in to continue.'); } + + config.headers = { + ...config.headers, + Authorization: `Bearer ${token}`, + }; return config; }); }