import {TestBed} from '@angular/core/testing'; import {NegatePatientInContextGuard} from './negate-patient-in-context.guard'; import {ActivatedRouteSnapshot, Router, RouterStateSnapshot} from '@angular/router'; import {PatientInContextGuard} from './patient-in-context.guard'; import {appUrls} from '../utils/URL_STRING_LITERALS'; import createSpyObj = jasmine.createSpyObj; import SpyObj = jasmine.SpyObj; describe('NegatePatientInContextGuard', () => { let guard: NegatePatientInContextGuard; let routerMock: SpyObj; let activatedRouteStub: ActivatedRouteSnapshot; let patientInContextGuardMock: SpyObj; beforeEach(async () => { routerMock = createSpyObj('Router', ['navigate']); activatedRouteStub = {} as any; patientInContextGuardMock = createSpyObj('PatientInContextGuard', ['hasPatientInContext']); await TestBed.configureTestingModule({ imports: [], providers: [ {provide: Router, useValue: routerMock}, {provide: PatientInContextGuard, useValue: patientInContextGuardMock}, ], }).compileComponents(); guard = TestBed.inject(NegatePatientInContextGuard); }); function fakeRouterState(url: string): RouterStateSnapshot { return { url, } as RouterStateSnapshot; } it('should be created', () => { expect(guard).toBeTruthy(); }); describe('when having a patient in context', () => { beforeEach(() => { patientInContextGuardMock.hasPatientInContext.and.returnValue(true); }); it('does not activate', () => { const canActivate = guard.canActivate(activatedRouteStub, fakeRouterState('')); expect(canActivate).toBe(!patientInContextGuardMock.hasPatientInContext()); expect(canActivate).toBe(false); }); it('navigates to baseUrl', () => { guard.canActivate(activatedRouteStub, fakeRouterState('')); expect(routerMock.navigate).toHaveBeenCalledTimes(1); expect(routerMock.navigate).toHaveBeenCalledWith([appUrls.base]); }); }); describe('when NOT having a patient in context', () => { beforeEach(() => { patientInContextGuardMock.hasPatientInContext.and.returnValue(false); }); it('activates', () => { const canActivate = guard.canActivate(activatedRouteStub, fakeRouterState('')); expect(canActivate).toBe(!patientInContextGuardMock.hasPatientInContext()); expect(canActivate).toBe(true); }); it('does not navigate to baseUrl', () => { guard.canActivate(activatedRouteStub, fakeRouterState('')); expect(routerMock.navigate).toHaveBeenCalledTimes(0); }); }); });