72541: Fix tests, remove redundant injection and added JSDocs

This commit is contained in:
Kristof De Langhe
2020-09-07 12:01:23 +02:00
parent 18fdf7585e
commit de9f642bf9
7 changed files with 31 additions and 35 deletions

View File

@@ -1,6 +1,5 @@
import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router'; import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';
import { Observable } from 'rxjs/internal/Observable'; import { Observable } from 'rxjs/internal/Observable';
import { AuthService } from '../auth/auth.service';
import { returnEndUserAgreementUrlTreeOnFalse } from '../shared/operators'; import { returnEndUserAgreementUrlTreeOnFalse } from '../shared/operators';
/** /**
@@ -9,8 +8,7 @@ import { returnEndUserAgreementUrlTreeOnFalse } from '../shared/operators';
*/ */
export abstract class AbstractEndUserAgreementGuard implements CanActivate { export abstract class AbstractEndUserAgreementGuard implements CanActivate {
constructor(protected authService: AuthService, constructor(protected router: Router) {
protected router: Router) {
} }
/** /**

View File

@@ -1,32 +1,30 @@
import { EndUserAgreementService } from './end-user-agreement.service'; import { EndUserAgreementService } from './end-user-agreement.service';
import { Router, UrlTree } from '@angular/router'; import { Router, UrlTree } from '@angular/router';
import { AuthService } from '../auth/auth.service';
import { EndUserAgreementCookieGuard } from './end-user-agreement-cookie.guard'; import { EndUserAgreementCookieGuard } from './end-user-agreement-cookie.guard';
describe('EndUserAgreementCookieGuard', () => { describe('EndUserAgreementCookieGuard', () => {
let guard: EndUserAgreementCookieGuard; let guard: EndUserAgreementCookieGuard;
let endUserAgreementService: EndUserAgreementService; let endUserAgreementService: EndUserAgreementService;
let authService: AuthService;
let router: Router; let router: Router;
beforeEach(() => { beforeEach(() => {
endUserAgreementService = jasmine.createSpyObj('endUserAgreementService', { endUserAgreementService = jasmine.createSpyObj('endUserAgreementService', {
isCookieAccepted: true isCookieAccepted: true
}); });
authService = jasmine.createSpyObj('authService', ['setRedirectUrl']);
router = jasmine.createSpyObj('router', { router = jasmine.createSpyObj('router', {
navigateByUrl: {}, navigateByUrl: {},
parseUrl: new UrlTree() parseUrl: new UrlTree(),
createUrlTree: new UrlTree()
}); });
guard = new EndUserAgreementCookieGuard(endUserAgreementService, authService, router); guard = new EndUserAgreementCookieGuard(endUserAgreementService, router);
}); });
describe('canActivate', () => { describe('canActivate', () => {
describe('when the cookie has been accepted', () => { describe('when the cookie has been accepted', () => {
it('should return true', (done) => { 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); expect(result).toEqual(true);
done(); done();
}); });
@@ -38,11 +36,9 @@ describe('EndUserAgreementCookieGuard', () => {
(endUserAgreementService.isCookieAccepted as jasmine.Spy).and.returnValue(false); (endUserAgreementService.isCookieAccepted as jasmine.Spy).and.returnValue(false);
}); });
it('should navigate the user with a redirect url', (done) => { it('should return a UrlTree', (done) => {
const redirect = 'redirect/url'; guard.canActivate(undefined, Object.assign({ url: 'redirect' })).subscribe((result) => {
guard.canActivate(undefined, Object.assign({ url: redirect })).subscribe(() => { expect(result).toEqual(jasmine.any(UrlTree));
expect(authService.setRedirectUrl).toHaveBeenCalledWith(redirect);
expect(router.navigateByUrl).toHaveBeenCalled();
done(); done();
}); });
}); });

View File

@@ -3,7 +3,6 @@ import { AbstractEndUserAgreementGuard } from './abstract-end-user-agreement.gua
import { Observable } from 'rxjs/internal/Observable'; import { Observable } from 'rxjs/internal/Observable';
import { of as observableOf } from 'rxjs'; import { of as observableOf } from 'rxjs';
import { EndUserAgreementService } from './end-user-agreement.service'; import { EndUserAgreementService } from './end-user-agreement.service';
import { AuthService } from '../auth/auth.service';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
/** /**
@@ -13,9 +12,8 @@ import { Router } from '@angular/router';
export class EndUserAgreementCookieGuard extends AbstractEndUserAgreementGuard { export class EndUserAgreementCookieGuard extends AbstractEndUserAgreementGuard {
constructor(protected endUserAgreementService: EndUserAgreementService, constructor(protected endUserAgreementService: EndUserAgreementService,
protected authService: AuthService,
protected router: Router) { protected router: Router) {
super(authService, router); super(router);
} }
/** /**

View File

@@ -8,26 +8,25 @@ describe('EndUserAgreementGuard', () => {
let guard: EndUserAgreementCurrentUserGuard; let guard: EndUserAgreementCurrentUserGuard;
let endUserAgreementService: EndUserAgreementService; let endUserAgreementService: EndUserAgreementService;
let authService: AuthService;
let router: Router; let router: Router;
beforeEach(() => { beforeEach(() => {
endUserAgreementService = jasmine.createSpyObj('endUserAgreementService', { endUserAgreementService = jasmine.createSpyObj('endUserAgreementService', {
hasCurrentUserAcceptedAgreement: observableOf(true) hasCurrentUserAcceptedAgreement: observableOf(true)
}); });
authService = jasmine.createSpyObj('authService', ['setRedirectUrl']);
router = jasmine.createSpyObj('router', { router = jasmine.createSpyObj('router', {
navigateByUrl: {}, navigateByUrl: {},
parseUrl: new UrlTree() parseUrl: new UrlTree(),
createUrlTree: new UrlTree()
}); });
guard = new EndUserAgreementCurrentUserGuard(endUserAgreementService, authService, router); guard = new EndUserAgreementCurrentUserGuard(endUserAgreementService, router);
}); });
describe('canActivate', () => { describe('canActivate', () => {
describe('when the user has accepted the agreement', () => { describe('when the user has accepted the agreement', () => {
it('should return true', (done) => { it('should return true', (done) => {
guard.canActivate(undefined, undefined).subscribe((result) => { guard.canActivate(undefined, Object.assign({ url: 'redirect' })).subscribe((result) => {
expect(result).toEqual(true); expect(result).toEqual(true);
done(); done();
}); });
@@ -39,11 +38,9 @@ describe('EndUserAgreementGuard', () => {
(endUserAgreementService.hasCurrentUserAcceptedAgreement as jasmine.Spy).and.returnValue(observableOf(false)); (endUserAgreementService.hasCurrentUserAcceptedAgreement as jasmine.Spy).and.returnValue(observableOf(false));
}); });
it('should navigate the user with a redirect url', (done) => { it('should return a UrlTree', (done) => {
const redirect = 'redirect/url'; guard.canActivate(undefined, Object.assign({ url: 'redirect' })).subscribe((result) => {
guard.canActivate(undefined, Object.assign({ url: redirect })).subscribe(() => { expect(result).toEqual(jasmine.any(UrlTree));
expect(authService.setRedirectUrl).toHaveBeenCalledWith(redirect);
expect(router.navigateByUrl).toHaveBeenCalled();
done(); done();
}); });
}); });

View File

@@ -2,7 +2,6 @@ import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/internal/Observable'; import { Observable } from 'rxjs/internal/Observable';
import { AbstractEndUserAgreementGuard } from './abstract-end-user-agreement.guard'; import { AbstractEndUserAgreementGuard } from './abstract-end-user-agreement.guard';
import { EndUserAgreementService } from './end-user-agreement.service'; import { EndUserAgreementService } from './end-user-agreement.service';
import { AuthService } from '../auth/auth.service';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
/** /**
@@ -12,9 +11,8 @@ import { Router } from '@angular/router';
export class EndUserAgreementCurrentUserGuard extends AbstractEndUserAgreementGuard { export class EndUserAgreementCurrentUserGuard extends AbstractEndUserAgreementGuard {
constructor(protected endUserAgreementService: EndUserAgreementService, constructor(protected endUserAgreementService: EndUserAgreementService,
protected authService: AuthService,
protected router: Router) { protected router: Router) {
super(authService, router); super(router);
} }
/** /**

View File

@@ -195,7 +195,9 @@ export const returnUnauthorizedUrlTreeOnFalse = (router: Router) =>
/** /**
* Operator that returns a UrlTree to the unauthorized page when the boolean received is false * 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) => export const returnEndUserAgreementUrlTreeOnFalse = (router: Router, redirect: string) =>
(source: Observable<boolean>): Observable<boolean | UrlTree> => (source: Observable<boolean>): Observable<boolean | UrlTree> =>

View File

@@ -5,11 +5,12 @@ import { EndUserAgreementService } from '../../core/end-user-agreement/end-user-
import { NotificationsService } from '../../shared/notifications/notifications.service'; import { NotificationsService } from '../../shared/notifications/notifications.service';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
import { AuthService } from '../../core/auth/auth.service'; 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 { of as observableOf } from 'rxjs';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { By } from '@angular/platform-browser'; import { By } from '@angular/platform-browser';
import { LogOutAction } from '../../core/auth/auth.actions'; import { LogOutAction } from '../../core/auth/auth.actions';
import { ActivatedRouteStub } from '../../shared/testing/active-router.stub';
describe('EndUserAgreementComponent', () => { describe('EndUserAgreementComponent', () => {
let component: EndUserAgreementComponent; let component: EndUserAgreementComponent;
@@ -20,6 +21,7 @@ describe('EndUserAgreementComponent', () => {
let authService: AuthService; let authService: AuthService;
let store; let store;
let router: Router; let router: Router;
let route: ActivatedRoute;
let redirectUrl; let redirectUrl;
@@ -32,11 +34,15 @@ describe('EndUserAgreementComponent', () => {
}); });
notificationsService = jasmine.createSpyObj('notificationsService', ['success', 'error']); notificationsService = jasmine.createSpyObj('notificationsService', ['success', 'error']);
authService = jasmine.createSpyObj('authService', { authService = jasmine.createSpyObj('authService', {
isAuthenticated: observableOf(true), isAuthenticated: observableOf(true)
getRedirectUrl: observableOf(redirectUrl)
}); });
store = jasmine.createSpyObj('store', ['dispatch']); store = jasmine.createSpyObj('store', ['dispatch']);
router = jasmine.createSpyObj('router', ['navigate', 'navigateByUrl']); router = jasmine.createSpyObj('router', ['navigate', 'navigateByUrl']);
route = Object.assign(new ActivatedRouteStub(), {
queryParams: observableOf({
redirect: redirectUrl
})
}) as any;
} }
beforeEach(async(() => { beforeEach(async(() => {
@@ -49,7 +55,8 @@ describe('EndUserAgreementComponent', () => {
{ provide: NotificationsService, useValue: notificationsService }, { provide: NotificationsService, useValue: notificationsService },
{ provide: AuthService, useValue: authService }, { provide: AuthService, useValue: authService },
{ provide: Store, useValue: store }, { provide: Store, useValue: store },
{ provide: Router, useValue: router } { provide: Router, useValue: router },
{ provide: ActivatedRoute, useValue: route }
], ],
schemas: [NO_ERRORS_SCHEMA] schemas: [NO_ERRORS_SCHEMA]
}).compileComponents(); }).compileComponents();