import {TestBed} from '@angular/core/testing'; import { PrivatelyMarkedGuard } from './privately-marked.guard'; import {PatientContextService} from '../services/patient-context.service'; import {ActivatedRouteSnapshot, Router, RouterStateSnapshot} from '@angular/router'; import {appUrls} from '../../utils/URL_STRING_LITERALS'; describe('PrivatelyMarkedGuard', () => { let guard: PrivatelyMarkedGuard; let patientContextServiceStub: PatientContextService; let routerStub: Router; let activatedRouteStub: ActivatedRouteSnapshot; beforeEach(async () => { patientContextServiceStub = { getCurrentXBreakTheGlassReason: () => undefined, getCurrentHasPrivatelyMarkedData: () => undefined, } as any; routerStub = { navigate: () => {} } as any; activatedRouteStub = {} as any; await TestBed.configureTestingModule({ imports: [], providers: [ {provide: patientContextServiceStub, useValue: patientContextServiceStub}, {provide: Router, useValue: routerStub}, ], }).compileComponents(); guard = new PrivatelyMarkedGuard(routerStub, patientContextServiceStub); }); function fakeRouterState(url: string): RouterStateSnapshot { return { url, } as RouterStateSnapshot; } const fakeUrls = [appUrls.base, appUrls.measurements]; it('should be created', () => { expect(guard).toBeTruthy(); }); describe('when data is privately marked', () => { beforeEach(() => { patientContextServiceStub.getCurrentHasPrivatelyMarkedData = () => true; }); fakeUrls.forEach((fakeUrl) => { it('blocks access to guarded route', () => { const canActivate = guard.canActivate(activatedRouteStub, fakeRouterState(fakeUrl)); expect(canActivate).toBe(false); }); it('redirects to appUrls.privatelyMarked', () => { spyOn(routerStub, 'navigate'); spyOn(console, 'log').and.callThrough(); guard.canActivate(activatedRouteStub, fakeRouterState(fakeUrl)); expect(routerStub.navigate).toHaveBeenCalledTimes(1); expect(routerStub.navigate).toHaveBeenCalledWith([appUrls.privatelyMarked]); }); }); describe('and xBreakTheGlassReason is set', () => { beforeEach(() => { patientContextServiceStub.getCurrentXBreakTheGlassReason = () => 'Værdispring'; }); fakeUrls.forEach((fakeUrl) => { it('grants access to a guarded route', () => { const canActivate = guard.canActivate(activatedRouteStub, fakeRouterState(fakeUrl)); expect(canActivate).toBe(true); }); }); }); }); describe('when data is not privately marked', () => { beforeEach(() => { patientContextServiceStub.getCurrentHasPrivatelyMarkedData = () => undefined; }); fakeUrls.forEach((fakeUrl) => { it('grants access to a guarded route', () => { const canActivate = guard.canActivate(activatedRouteStub, fakeRouterState(fakeUrl)); expect(canActivate).toBe(true); }); }); }); });