diff --git a/src/app/core/end-user-agreement/abstract-end-user-agreement.guard.ts b/src/app/core/end-user-agreement/abstract-end-user-agreement.guard.ts index 7fc4cc3172..ee07da004b 100644 --- a/src/app/core/end-user-agreement/abstract-end-user-agreement.guard.ts +++ b/src/app/core/end-user-agreement/abstract-end-user-agreement.guard.ts @@ -1,6 +1,5 @@ import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router'; import { Observable } from 'rxjs/internal/Observable'; -import { AuthService } from '../auth/auth.service'; import { returnEndUserAgreementUrlTreeOnFalse } from '../shared/operators'; /** @@ -9,8 +8,7 @@ import { returnEndUserAgreementUrlTreeOnFalse } from '../shared/operators'; */ export abstract class AbstractEndUserAgreementGuard implements CanActivate { - constructor(protected authService: AuthService, - protected router: Router) { + constructor(protected router: Router) { } /** diff --git a/src/app/core/end-user-agreement/end-user-agreement-cookie.guard.spec.ts b/src/app/core/end-user-agreement/end-user-agreement-cookie.guard.spec.ts index feeb8d7903..805c765832 100644 --- a/src/app/core/end-user-agreement/end-user-agreement-cookie.guard.spec.ts +++ b/src/app/core/end-user-agreement/end-user-agreement-cookie.guard.spec.ts @@ -1,32 +1,30 @@ import { EndUserAgreementService } from './end-user-agreement.service'; import { Router, UrlTree } from '@angular/router'; -import { AuthService } from '../auth/auth.service'; import { EndUserAgreementCookieGuard } from './end-user-agreement-cookie.guard'; describe('EndUserAgreementCookieGuard', () => { let guard: EndUserAgreementCookieGuard; let endUserAgreementService: EndUserAgreementService; - let authService: AuthService; let router: Router; beforeEach(() => { endUserAgreementService = jasmine.createSpyObj('endUserAgreementService', { isCookieAccepted: true }); - authService = jasmine.createSpyObj('authService', ['setRedirectUrl']); router = jasmine.createSpyObj('router', { navigateByUrl: {}, - parseUrl: new UrlTree() + parseUrl: new UrlTree(), + createUrlTree: new UrlTree() }); - guard = new EndUserAgreementCookieGuard(endUserAgreementService, authService, router); + guard = new EndUserAgreementCookieGuard(endUserAgreementService, router); }); describe('canActivate', () => { describe('when the cookie has been accepted', () => { it('should return true', (done) => { - guard.canActivate(undefined, undefined).subscribe((result) => { + guard.canActivate(undefined, { url: Object.assign({ url: 'redirect' }) } as any).subscribe((result) => { expect(result).toEqual(true); done(); }); @@ -38,11 +36,9 @@ describe('EndUserAgreementCookieGuard', () => { (endUserAgreementService.isCookieAccepted as jasmine.Spy).and.returnValue(false); }); - it('should navigate the user with a redirect url', (done) => { - const redirect = 'redirect/url'; - guard.canActivate(undefined, Object.assign({ url: redirect })).subscribe(() => { - expect(authService.setRedirectUrl).toHaveBeenCalledWith(redirect); - expect(router.navigateByUrl).toHaveBeenCalled(); + it('should return a UrlTree', (done) => { + guard.canActivate(undefined, Object.assign({ url: 'redirect' })).subscribe((result) => { + expect(result).toEqual(jasmine.any(UrlTree)); done(); }); }); diff --git a/src/app/core/end-user-agreement/end-user-agreement-cookie.guard.ts b/src/app/core/end-user-agreement/end-user-agreement-cookie.guard.ts index a7bdd6b320..e6461859f3 100644 --- a/src/app/core/end-user-agreement/end-user-agreement-cookie.guard.ts +++ b/src/app/core/end-user-agreement/end-user-agreement-cookie.guard.ts @@ -3,7 +3,6 @@ import { AbstractEndUserAgreementGuard } from './abstract-end-user-agreement.gua import { Observable } from 'rxjs/internal/Observable'; import { of as observableOf } from 'rxjs'; import { EndUserAgreementService } from './end-user-agreement.service'; -import { AuthService } from '../auth/auth.service'; import { Router } from '@angular/router'; /** @@ -13,9 +12,8 @@ import { Router } from '@angular/router'; export class EndUserAgreementCookieGuard extends AbstractEndUserAgreementGuard { constructor(protected endUserAgreementService: EndUserAgreementService, - protected authService: AuthService, protected router: Router) { - super(authService, router); + super(router); } /** diff --git a/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts b/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts index 09cb236b3f..1892509aef 100644 --- a/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts +++ b/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.spec.ts @@ -8,26 +8,25 @@ describe('EndUserAgreementGuard', () => { let guard: EndUserAgreementCurrentUserGuard; let endUserAgreementService: EndUserAgreementService; - let authService: AuthService; let router: Router; beforeEach(() => { endUserAgreementService = jasmine.createSpyObj('endUserAgreementService', { hasCurrentUserAcceptedAgreement: observableOf(true) }); - authService = jasmine.createSpyObj('authService', ['setRedirectUrl']); router = jasmine.createSpyObj('router', { navigateByUrl: {}, - parseUrl: new UrlTree() + parseUrl: new UrlTree(), + createUrlTree: new UrlTree() }); - guard = new EndUserAgreementCurrentUserGuard(endUserAgreementService, authService, router); + guard = new EndUserAgreementCurrentUserGuard(endUserAgreementService, router); }); describe('canActivate', () => { describe('when the user has accepted the agreement', () => { it('should return true', (done) => { - guard.canActivate(undefined, undefined).subscribe((result) => { + guard.canActivate(undefined, Object.assign({ url: 'redirect' })).subscribe((result) => { expect(result).toEqual(true); done(); }); @@ -39,11 +38,9 @@ describe('EndUserAgreementGuard', () => { (endUserAgreementService.hasCurrentUserAcceptedAgreement as jasmine.Spy).and.returnValue(observableOf(false)); }); - it('should navigate the user with a redirect url', (done) => { - const redirect = 'redirect/url'; - guard.canActivate(undefined, Object.assign({ url: redirect })).subscribe(() => { - expect(authService.setRedirectUrl).toHaveBeenCalledWith(redirect); - expect(router.navigateByUrl).toHaveBeenCalled(); + it('should return a UrlTree', (done) => { + guard.canActivate(undefined, Object.assign({ url: 'redirect' })).subscribe((result) => { + expect(result).toEqual(jasmine.any(UrlTree)); done(); }); }); diff --git a/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.ts b/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.ts index e48d4361c6..348a3285cc 100644 --- a/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.ts +++ b/src/app/core/end-user-agreement/end-user-agreement-current-user.guard.ts @@ -2,7 +2,6 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; import { AbstractEndUserAgreementGuard } from './abstract-end-user-agreement.guard'; import { EndUserAgreementService } from './end-user-agreement.service'; -import { AuthService } from '../auth/auth.service'; import { Router } from '@angular/router'; /** @@ -12,9 +11,8 @@ import { Router } from '@angular/router'; export class EndUserAgreementCurrentUserGuard extends AbstractEndUserAgreementGuard { constructor(protected endUserAgreementService: EndUserAgreementService, - protected authService: AuthService, protected router: Router) { - super(authService, router); + super(router); } /** diff --git a/src/app/core/shared/operators.ts b/src/app/core/shared/operators.ts index 1018cee4ab..dac12cda5b 100644 --- a/src/app/core/shared/operators.ts +++ b/src/app/core/shared/operators.ts @@ -195,7 +195,9 @@ export const returnUnauthorizedUrlTreeOnFalse = (router: Router) => /** * Operator that returns a UrlTree to the unauthorized page when the boolean received is false - * @param router + * @param router Router + * @param redirect Redirect URL to add to the UrlTree. This is used to redirect back to the original route after the + * user accepts the agreement. */ export const returnEndUserAgreementUrlTreeOnFalse = (router: Router, redirect: string) => (source: Observable): Observable => diff --git a/src/app/info/end-user-agreement/end-user-agreement.component.spec.ts b/src/app/info/end-user-agreement/end-user-agreement.component.spec.ts index 33cd0bfd98..c0957fa7ba 100644 --- a/src/app/info/end-user-agreement/end-user-agreement.component.spec.ts +++ b/src/app/info/end-user-agreement/end-user-agreement.component.spec.ts @@ -5,11 +5,12 @@ import { EndUserAgreementService } from '../../core/end-user-agreement/end-user- import { NotificationsService } from '../../shared/notifications/notifications.service'; import { TranslateModule } from '@ngx-translate/core'; import { AuthService } from '../../core/auth/auth.service'; -import { Router } from '@angular/router'; +import { ActivatedRoute, Router } from '@angular/router'; import { of as observableOf } from 'rxjs'; import { Store } from '@ngrx/store'; import { By } from '@angular/platform-browser'; import { LogOutAction } from '../../core/auth/auth.actions'; +import { ActivatedRouteStub } from '../../shared/testing/active-router.stub'; describe('EndUserAgreementComponent', () => { let component: EndUserAgreementComponent; @@ -20,6 +21,7 @@ describe('EndUserAgreementComponent', () => { let authService: AuthService; let store; let router: Router; + let route: ActivatedRoute; let redirectUrl; @@ -32,11 +34,15 @@ describe('EndUserAgreementComponent', () => { }); notificationsService = jasmine.createSpyObj('notificationsService', ['success', 'error']); authService = jasmine.createSpyObj('authService', { - isAuthenticated: observableOf(true), - getRedirectUrl: observableOf(redirectUrl) + isAuthenticated: observableOf(true) }); store = jasmine.createSpyObj('store', ['dispatch']); router = jasmine.createSpyObj('router', ['navigate', 'navigateByUrl']); + route = Object.assign(new ActivatedRouteStub(), { + queryParams: observableOf({ + redirect: redirectUrl + }) + }) as any; } beforeEach(async(() => { @@ -49,7 +55,8 @@ describe('EndUserAgreementComponent', () => { { provide: NotificationsService, useValue: notificationsService }, { provide: AuthService, useValue: authService }, { provide: Store, useValue: store }, - { provide: Router, useValue: router } + { provide: Router, useValue: router }, + { provide: ActivatedRoute, useValue: route } ], schemas: [NO_ERRORS_SCHEMA] }).compileComponents();