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; login: ReturnType }; 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(); }); });