import { TestBed } from '@angular/core/testing'; import { ActivatedRouteSnapshot, provideRouter, Router, RouterStateSnapshot, UrlTree } from '@angular/router'; import Keycloak from 'keycloak-js'; import { requireModeratoreGuard } from './require-moderatore.guard'; const route = {} as ActivatedRouteSnapshot; const state = {} as RouterStateSnapshot; function setup(roles: string[]): void { const keycloakMock = { tokenParsed: { realm_access: { roles } } }; TestBed.configureTestingModule({ providers: [provideRouter([]), { provide: Keycloak, useValue: keycloakMock }] }); } describe('requireModeratoreGuard', () => { it('lascia proseguire la navigazione se l\'utente ha il ruolo moderatore', () => { setup(['moderatore']); const result = TestBed.runInInjectionContext(() => requireModeratoreGuard(route, state)); expect(result).toBe(true); }); it('reindirizza alla home per un utente senza il ruolo moderatore', () => { setup(['censito']); const result = TestBed.runInInjectionContext(() => requireModeratoreGuard(route, state)); const router = TestBed.inject(Router); expect((result as UrlTree).toString()).toBe(router.parseUrl('/').toString()); }); it('reindirizza alla home se il token non ha ruoli', () => { setup([]); const result = TestBed.runInInjectionContext(() => requireModeratoreGuard(route, state)); const router = TestBed.inject(Router); expect((result as UrlTree).toString()).toBe(router.parseUrl('/').toString()); }); });