From 1040d8e34656ecd1ffa5914e590c7d9944f17c74 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 15 Apr 2018 10:34:55 +0200 Subject: [PATCH] Tests for guards. --- .../shared/guards/resolve-content.guard.ts | 4 +- .../resolve-published-schema.guard.spec.ts | 102 ------------------ .../guards/resolve-published-schema.guard.ts | 52 --------- .../guards/resolve-schema.guard.spec.ts | 85 --------------- .../app/shared/guards/resolve-schema.guard.ts | 45 -------- .../schema-must-exist-published.guard.spec.ts | 77 +++++++++++++ .../schema-must-exist-published.guard.ts | 4 +- .../guards/schema-must-exist.guard.spec.ts | 62 +++++++++++ .../shared/guards/schema-must-exist.guard.ts | 4 +- src/Squidex/app/shared/internal.ts | 2 - src/Squidex/app/shared/module.ts | 4 - 11 files changed, 145 insertions(+), 296 deletions(-) delete mode 100644 src/Squidex/app/shared/guards/resolve-published-schema.guard.spec.ts delete mode 100644 src/Squidex/app/shared/guards/resolve-published-schema.guard.ts delete mode 100644 src/Squidex/app/shared/guards/resolve-schema.guard.spec.ts delete mode 100644 src/Squidex/app/shared/guards/resolve-schema.guard.ts create mode 100644 src/Squidex/app/shared/guards/schema-must-exist-published.guard.spec.ts create mode 100644 src/Squidex/app/shared/guards/schema-must-exist.guard.spec.ts diff --git a/src/Squidex/app/shared/guards/resolve-content.guard.ts b/src/Squidex/app/shared/guards/resolve-content.guard.ts index 7ddac4653..34ebec182 100644 --- a/src/Squidex/app/shared/guards/resolve-content.guard.ts +++ b/src/Squidex/app/shared/guards/resolve-content.guard.ts @@ -6,7 +6,7 @@ */ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, Resolve, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { allParams } from '@app/framework'; @@ -21,7 +21,7 @@ export class ResolveContentGuard implements Resolve { ) { } - public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + public resolve(route: ActivatedRouteSnapshot): Observable { const params = allParams(route); const appName = params['appName']; diff --git a/src/Squidex/app/shared/guards/resolve-published-schema.guard.spec.ts b/src/Squidex/app/shared/guards/resolve-published-schema.guard.spec.ts deleted file mode 100644 index e12a825fc..000000000 --- a/src/Squidex/app/shared/guards/resolve-published-schema.guard.spec.ts +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { Router } from '@angular/router'; -import { IMock, Mock, Times } from 'typemoq'; -import { Observable } from 'rxjs'; - -import { SchemasService, SchemaDetailsDto } from '@app/shared'; - -import { ResolvePublishedSchemaGuard } from './resolve-published-schema.guard'; - -describe('ResolvePublishedSchemaGuard', () => { - const route: any = { - params: { - appName: 'my-app' - }, - parent: { - params: { - schemaName: 'my-schema' - } - } - }; - - let router: IMock; - let schemasService: IMock; - let schemaGuard: ResolvePublishedSchemaGuard; - - beforeEach(() => { - router = Mock.ofType(); - - schemasService = Mock.ofType(); - schemaGuard = new ResolvePublishedSchemaGuard(schemasService.object, router.object); - }); - - it('should return schema if loading succeeded', () => { - const schema: any = { isPublished: true }; - - schemasService.setup(x => x.getSchema('my-app', 'my-schema')) - .returns(() => Observable.of(schema)); - - let result: SchemaDetailsDto; - - schemaGuard.resolve(route).subscribe(x => { - result = x!; - }); - - expect(result!).toBe(schema); - - schemasService.verify(x => x.getSchema('my-app', 'my-schema'), Times.once()); - }); - - it('should navigate to 404 page if schema is not found', () => { - schemasService.setup(x => x.getSchema('my-app', 'my-schema')) - .returns(() => Observable.of(null!)); - - let result: SchemaDetailsDto; - - schemaGuard.resolve(route).subscribe(x => { - result = x!!; - }); - - expect(result!).toBeNull(); - - router.verify(x => x.navigate(['/404']), Times.once()); - }); - - it('should navigate to 404 page if schema is not published', () => { - const schema: any = { isPublished: false }; - - schemasService.setup(x => x.getSchema('my-app', 'my-schema')) - .returns(() => Observable.of(schema)); - - let result: SchemaDetailsDto; - - schemaGuard.resolve(route).subscribe(x => { - result = x!; - }); - - expect(result!).toBeNull(); - - router.verify(x => x.navigate(['/404']), Times.once()); - }); - - it('should navigate to 404 page if schema loading fails', () => { - schemasService.setup(x => x.getSchema('my-app', 'my-schema')) - .returns(() => Observable.throw({})); - - let result: SchemaDetailsDto; - - schemaGuard.resolve(route).subscribe(x => { - result = x!; - }); - - expect(result!).toBeNull(); - - router.verify(x => x.navigate(['/404']), Times.once()); - }); -}); \ No newline at end of file diff --git a/src/Squidex/app/shared/guards/resolve-published-schema.guard.ts b/src/Squidex/app/shared/guards/resolve-published-schema.guard.ts deleted file mode 100644 index a8c96c067..000000000 --- a/src/Squidex/app/shared/guards/resolve-published-schema.guard.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router } from '@angular/router'; -import { Observable } from 'rxjs'; - -import { allParams } from '@app/framework'; - -import { SchemaDetailsDto, SchemasService } from './../services/schemas.service'; - -@Injectable() -export class ResolvePublishedSchemaGuard implements Resolve { - constructor( - private readonly schemasService: SchemasService, - private readonly router: Router - ) { - } - - public resolve(route: ActivatedRouteSnapshot): Observable { - const params = allParams(route); - - const appName = params['appName']; - const schemaName = params['schemaName']; - - const result = - this.schemasService.getSchema(appName, schemaName) - .map(dto => { - if (dto && !dto.isPublished) { - return null; - } - - return dto; - }) - .do(dto => { - if (!dto) { - this.router.navigate(['/404']); - } - }) - .catch(error => { - this.router.navigate(['/404']); - - return Observable.of(null); - }); - - return result; - } -} \ No newline at end of file diff --git a/src/Squidex/app/shared/guards/resolve-schema.guard.spec.ts b/src/Squidex/app/shared/guards/resolve-schema.guard.spec.ts deleted file mode 100644 index 9952bd08d..000000000 --- a/src/Squidex/app/shared/guards/resolve-schema.guard.spec.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { Router } from '@angular/router'; -import { IMock, Mock, Times } from 'typemoq'; -import { Observable } from 'rxjs'; - -import { SchemasService, SchemaDetailsDto } from '@app/shared'; - -import { ResolveSchemaGuard } from './resolve-schema.guard'; - -describe('ResolveSchemaGuard', () => { - const route: any = { - params: { - appName: 'my-app' - }, - parent: { - params: { - schemaName: 'my-schema' - } - } - }; - - let router: IMock; - let schemasService: IMock; - let schemaGuard: ResolveSchemaGuard; - - beforeEach(() => { - router = Mock.ofType(); - - schemasService = Mock.ofType(); - schemaGuard = new ResolveSchemaGuard(schemasService.object, router.object); - }); - - it('should return schema if loading succeeded', () => { - const schema: any = {}; - - schemasService.setup(x => x.getSchema('my-app', 'my-schema')) - .returns(() => Observable.of(schema)); - - let result: SchemaDetailsDto; - - schemaGuard.resolve(route).subscribe(x => { - result = x!; - }); - - expect(result!).toBe(schema); - - schemasService.verify(x => x.getSchema('my-app', 'my-schema'), Times.once()); - }); - - it('should navigate to 404 page if schema is not found', () => { - schemasService.setup(x => x.getSchema('my-app', 'my-schema')) - .returns(() => Observable.of(null!)); - - let result: SchemaDetailsDto; - - schemaGuard.resolve(route).subscribe(x => { - result = x!; - }); - - expect(result!).toBeNull(); - - router.verify(x => x.navigate(['/404']), Times.once()); - }); - - it('should navigate to 404 page if schema loading fails', () => { - schemasService.setup(x => x.getSchema('my-app', 'my-schema')) - .returns(() => Observable.throw({})); - - let result: SchemaDetailsDto; - - schemaGuard.resolve(route).subscribe(x => { - result = x!; - }); - - expect(result!).toBeNull(); - - router.verify(x => x.navigate(['/404']), Times.once()); - }); -}); \ No newline at end of file diff --git a/src/Squidex/app/shared/guards/resolve-schema.guard.ts b/src/Squidex/app/shared/guards/resolve-schema.guard.ts deleted file mode 100644 index 92bb8c0fd..000000000 --- a/src/Squidex/app/shared/guards/resolve-schema.guard.ts +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Squidex Headless CMS - * - * @license - * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. - */ - -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, Resolve, Router } from '@angular/router'; -import { Observable } from 'rxjs'; - -import { allParams } from '@app/framework'; - -import { SchemaDetailsDto, SchemasService } from './../services/schemas.service'; - -@Injectable() -export class ResolveSchemaGuard implements Resolve { - constructor( - private readonly schemasService: SchemasService, - private readonly router: Router - ) { - } - - public resolve(route: ActivatedRouteSnapshot): Observable { - const params = allParams(route); - - const appName = params['appName']; - const schemaName = params['schemaName']; - - const result = - this.schemasService.getSchema(appName, schemaName) - .do(dto => { - if (!dto) { - this.router.navigate(['/404']); - } - }) - .catch(error => { - this.router.navigate(['/404']); - - return Observable.of(null); - }); - - return result; - } -} \ No newline at end of file diff --git a/src/Squidex/app/shared/guards/schema-must-exist-published.guard.spec.ts b/src/Squidex/app/shared/guards/schema-must-exist-published.guard.spec.ts new file mode 100644 index 000000000..52ac404dc --- /dev/null +++ b/src/Squidex/app/shared/guards/schema-must-exist-published.guard.spec.ts @@ -0,0 +1,77 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { Router } from '@angular/router'; +import { Observable } from 'rxjs'; +import { IMock, Mock, Times } from 'typemoq'; + +import { SchemaDetailsDto } from './../services/schemas.service'; +import { SchemasState } from './../state/schemas.state'; +import { SchemaMustExistPublishedGuard } from './schema-must-exist-published.guard'; + +describe('SchemaMustExistPublishedGuard', () => { + const route: any = { + params: { + schemaName: '123' + } + }; + + let schemasState: IMock; + let router: IMock; + let schemaGuard: SchemaMustExistPublishedGuard; + + beforeEach(() => { + router = Mock.ofType(); + schemasState = Mock.ofType(); + schemaGuard = new SchemaMustExistPublishedGuard(schemasState.object, router.object); + }); + + it('should load schema and return true when found', () => { + schemasState.setup(x => x.selectSchema('123')) + .returns(() => Observable.of({ isPublished: true })); + + let result: boolean; + + schemaGuard.canActivate(route).subscribe(x => { + result = x; + }).unsubscribe(); + + expect(result!).toBeTruthy(); + + schemasState.verify(x => x.selectSchema('123'), Times.once()); + }); + + it('should load schema and return false when not found', () => { + schemasState.setup(x => x.selectSchema('123')) + .returns(() => Observable.of({ isPublished: false })); + + let result: boolean; + + schemaGuard.canActivate(route).subscribe(x => { + result = x; + }).unsubscribe(); + + expect(result!).toBeFalsy(); + + router.verify(x => x.navigate(['/404']), Times.once()); + }); + + it('should load schema and return false when not found', () => { + schemasState.setup(x => x.selectSchema('123')) + .returns(() => Observable.of(null)); + + let result: boolean; + + schemaGuard.canActivate(route).subscribe(x => { + result = x; + }).unsubscribe(); + + expect(result!).toBeFalsy(); + + router.verify(x => x.navigate(['/404']), Times.once()); + }); +}); \ No newline at end of file diff --git a/src/Squidex/app/shared/guards/schema-must-exist-published.guard.ts b/src/Squidex/app/shared/guards/schema-must-exist-published.guard.ts index e0dd17508..e94d044ec 100644 --- a/src/Squidex/app/shared/guards/schema-must-exist-published.guard.ts +++ b/src/Squidex/app/shared/guards/schema-must-exist-published.guard.ts @@ -6,7 +6,7 @@ */ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { allParams } from '@app/framework'; @@ -21,7 +21,7 @@ export class SchemaMustExistPublishedGuard implements CanActivate { ) { } - public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + public canActivate(route: ActivatedRouteSnapshot): Observable { const schemaName = allParams(route)['schemaName']; const result = diff --git a/src/Squidex/app/shared/guards/schema-must-exist.guard.spec.ts b/src/Squidex/app/shared/guards/schema-must-exist.guard.spec.ts new file mode 100644 index 000000000..4e6445180 --- /dev/null +++ b/src/Squidex/app/shared/guards/schema-must-exist.guard.spec.ts @@ -0,0 +1,62 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved. + */ + +import { Router } from '@angular/router'; +import { Observable } from 'rxjs'; +import { IMock, Mock, Times } from 'typemoq'; + +import { SchemaDetailsDto } from './../services/schemas.service'; +import { SchemasState } from './../state/schemas.state'; +import { SchemaMustExistGuard } from './schema-must-exist.guard'; + +describe('SchemaMustExistGuard', () => { + const route: any = { + params: { + schemaName: '123' + } + }; + + let schemasState: IMock; + let router: IMock; + let schemaGuard: SchemaMustExistGuard; + + beforeEach(() => { + router = Mock.ofType(); + schemasState = Mock.ofType(); + schemaGuard = new SchemaMustExistGuard(schemasState.object, router.object); + }); + + it('should load schema and return true when found', () => { + schemasState.setup(x => x.selectSchema('123')) + .returns(() => Observable.of({})); + + let result: boolean; + + schemaGuard.canActivate(route).subscribe(x => { + result = x; + }).unsubscribe(); + + expect(result!).toBeTruthy(); + + schemasState.verify(x => x.selectSchema('123'), Times.once()); + }); + + it('should load schema and return false when not found', () => { + schemasState.setup(x => x.selectSchema('123')) + .returns(() => Observable.of(null)); + + let result: boolean; + + schemaGuard.canActivate(route).subscribe(x => { + result = x; + }).unsubscribe(); + + expect(result!).toBeFalsy(); + + router.verify(x => x.navigate(['/404']), Times.once()); + }); +}); \ No newline at end of file diff --git a/src/Squidex/app/shared/guards/schema-must-exist.guard.ts b/src/Squidex/app/shared/guards/schema-must-exist.guard.ts index 592150e69..dc654a967 100644 --- a/src/Squidex/app/shared/guards/schema-must-exist.guard.ts +++ b/src/Squidex/app/shared/guards/schema-must-exist.guard.ts @@ -6,7 +6,7 @@ */ import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; +import { ActivatedRouteSnapshot, CanActivate, Router } from '@angular/router'; import { Observable } from 'rxjs'; import { allParams } from '@app/framework'; @@ -21,7 +21,7 @@ export class SchemaMustExistGuard implements CanActivate { ) { } - public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + public canActivate(route: ActivatedRouteSnapshot): Observable { const schemaName = allParams(route)['schemaName']; const result = diff --git a/src/Squidex/app/shared/internal.ts b/src/Squidex/app/shared/internal.ts index 4b68ad28e..09b62b6f4 100644 --- a/src/Squidex/app/shared/internal.ts +++ b/src/Squidex/app/shared/internal.ts @@ -11,8 +11,6 @@ export * from './guards/must-be-authenticated.guard'; export * from './guards/must-be-not-authenticated.guard'; export * from './guards/resolve-app-languages.guard'; export * from './guards/resolve-content.guard'; -export * from './guards/resolve-published-schema.guard'; -export * from './guards/resolve-schema.guard'; export * from './guards/schema-must-exist-published.guard'; export * from './guards/schema-must-exist.guard'; export * from './guards/unset-app.guard'; diff --git a/src/Squidex/app/shared/module.ts b/src/Squidex/app/shared/module.ts index 9a30fdad5..af40a9ae8 100644 --- a/src/Squidex/app/shared/module.ts +++ b/src/Squidex/app/shared/module.ts @@ -49,8 +49,6 @@ import { PlansService, ResolveAppLanguagesGuard, ResolveContentGuard, - ResolvePublishedSchemaGuard, - ResolveSchemaGuard, SchemaMustExistGuard, SchemaMustExistPublishedGuard, SchemasService, @@ -150,8 +148,6 @@ export class SqxSharedModule { PlansService, ResolveAppLanguagesGuard, ResolveContentGuard, - ResolvePublishedSchemaGuard, - ResolveSchemaGuard, RulesService, SchemaMustExistGuard, SchemaMustExistPublishedGuard,