Files
Bonsai-webapp/src/app/auth/auth.guard.spec.ts
T
2026-05-24 11:09:12 +02:00

48 lines
1.5 KiB
TypeScript

import { vi } from 'vitest';
import { TestBed } from '@angular/core/testing';
import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { authGuard } from './auth.guard';
import { KeycloakService } from './keycloak.service';
describe('authGuard', () => {
let mockKeycloak: { isLoggedIn: ReturnType<typeof vi.fn>; login: ReturnType<typeof vi.fn> };
beforeEach(() => {
mockKeycloak = {
isLoggedIn: vi.fn().mockReturnValue(true),
login: vi.fn().mockResolvedValue(undefined),
};
TestBed.configureTestingModule({
providers: [{ provide: KeycloakService, useValue: mockKeycloak }],
});
});
const runGuard = () =>
TestBed.runInInjectionContext(() =>
authGuard({} as ActivatedRouteSnapshot, {} as RouterStateSnapshot),
);
it('returns true when the user is logged in', () => {
mockKeycloak.isLoggedIn.mockReturnValue(true);
expect(runGuard()).toBe(true);
});
it('returns false when the user is not logged in', () => {
mockKeycloak.isLoggedIn.mockReturnValue(false);
expect(runGuard()).toBe(false);
});
it('calls login() when the user is not logged in', () => {
mockKeycloak.isLoggedIn.mockReturnValue(false);
runGuard();
expect(mockKeycloak.login).toHaveBeenCalled();
});
it('does not call login() when the user is already logged in', () => {
mockKeycloak.isLoggedIn.mockReturnValue(true);
runGuard();
expect(mockKeycloak.login).not.toHaveBeenCalled();
});
});