fix: Bearer non ajouté aux appels API depuis le passage de apiUrl à /api

Régression introduite par le passage du front en apiUrl relatif (/api,
proxy dev) : l'auth.interceptor testait req.url.startsWith('/api'), or au
moment de l'intercepteur l'URL est déjà résolue en absolu
(http://localhost:4200/api/...), donc le test échouait et le token JWT
n'était plus envoyé. Conséquence : 401 sur les appels API (ajout de
trajet impossible, popup restant ouverte).

Correction : détection de l'API alignée sur le timeoutInterceptor
(startsWith(apiUrl) || includes('/api/')). Test unitaire ajouté couvrant
le cas d'une URL d'API absolue.
This commit is contained in:
2026-10-13 18:51:57 +02:00
parent 54a0862388
commit 922655a12f
2 changed files with 17 additions and 1 deletions
@@ -68,6 +68,18 @@ describe('authInterceptor', () => {
req.flush([]); req.flush([]);
}); });
it('ajoute le Bearer même quand l URL de l API est absolue (apiUrl relatif /api résolu sur l origine)', () => {
// En dev, apiUrl = '/api' : au moment de l intercepteur, l URL est déjà résolue
// en absolu par rapport à l origine (ex. http://localhost:4200/api/...). Le Bearer
// doit tout de même être ajouté (régression corrigée via le test includes('/api/')).
const url = 'http://localhost:4200/api/trajets';
http.get(url).subscribe();
const req = httpMock.expectOne(url);
expect(req.request.headers.get('Authorization')).toBe('Bearer jwt-abc');
req.flush([]);
});
it('n ajoute pas le Bearer sur un endpoint public d auth (/auth/login)', () => { it('n ajoute pas le Bearer sur un endpoint public d auth (/auth/login)', () => {
const url = `${environment.apiUrl}/auth/login`; const url = `${environment.apiUrl}/auth/login`;
http.post(url, { email: 'a@b.fr', motDePasse: 'x' }).subscribe(); http.post(url, { email: 'a@b.fr', motDePasse: 'x' }).subscribe();
@@ -35,7 +35,11 @@ export const authInterceptor: HttpInterceptorFn = (req, next) => {
const authService = inject(AuthService); const authService = inject(AuthService);
const router = inject(Router); const router = inject(Router);
const cibleApi = req.url.startsWith(environment.apiUrl); // Détection de l'API robuste au cas où `apiUrl` est relatif (`/api`) : à ce stade
// Angular a déjà résolu `req.url` en URL absolue (ex. http://localhost:4200/api/...),
// donc un simple `startsWith('/api')` serait faux. On teste aussi la présence du
// segment `/api/` dans l'URL, comme le fait le timeoutInterceptor.
const cibleApi = req.url.startsWith(environment.apiUrl) || req.url.includes('/api/');
const estEndpointPublic = ENDPOINTS_AUTH_PUBLICS.some((chemin) => req.url.includes(chemin)); const estEndpointPublic = ENDPOINTS_AUTH_PUBLICS.some((chemin) => req.url.includes(chemin));
const token = authService.getToken(); const token = authService.getToken();