From 48ea971486493b3c7b1b11d2de1b0f572c8a3d68 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 27 Dec 2019 16:03:00 +0300 Subject: [PATCH] tests(core): add replaceable-route-container.component.spec #2404 --- .../replaceable-route-container.component.ts | 4 +- .../core/src/lib/guards/permission.guard.ts | 9 +-- ...laceable-route-container.component.spec.ts | 66 +++++++++++++++++++ 3 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 npm/ng-packs/packages/core/src/lib/tests/replaceable-route-container.component.spec.ts diff --git a/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts b/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts index 80a56cfb04..32d2dadb76 100644 --- a/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts +++ b/npm/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts @@ -30,8 +30,8 @@ export class ReplaceableRouteContainerComponent implements OnInit, OnDestroy { this.store .select(ReplaceableComponentsState.getComponent(this.componentKey)) .pipe(takeUntilDestroy(this), distinctUntilChanged()) - .subscribe(({ component } = {} as ReplaceableComponents.ReplaceableComponent) => { - this.externalComponent = component; + .subscribe((res = {} as ReplaceableComponents.ReplaceableComponent) => { + this.externalComponent = res.component; }); } diff --git a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts index 9321a7dcf6..c4b70d0b7b 100644 --- a/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts +++ b/npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router'; import { Store } from '@ngxs/store'; -import { Observable } from 'rxjs'; +import { Observable, of } from 'rxjs'; import { tap } from 'rxjs/operators'; import snq from 'snq'; import { RestOccurError } from '../actions'; @@ -13,10 +13,7 @@ import { ConfigState } from '../states'; export class PermissionGuard implements CanActivate { constructor(private store: Store) {} - canActivate( - route: ActivatedRouteSnapshot, - state: RouterStateSnapshot, - ): Observable | boolean { + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { let resource = snq(() => route.data.routes.requiredPolicy) || snq(() => route.data.requiredPolicy as string); if (!resource) { @@ -27,7 +24,7 @@ export class PermissionGuard implements CanActivate { ); if (!resource) { - return true; + return of(true); } } diff --git a/npm/ng-packs/packages/core/src/lib/tests/replaceable-route-container.component.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/replaceable-route-container.component.spec.ts new file mode 100644 index 0000000000..f5874bca46 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/replaceable-route-container.component.spec.ts @@ -0,0 +1,66 @@ +import { createHostFactory, SpectatorHost } from '@ngneat/spectator/jest'; +import { Component } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { Store } from '@ngxs/store'; +import { of, Subject, BehaviorSubject } from 'rxjs'; +import { ReplaceableRouteContainerComponent } from '../components/replaceable-route-container.component'; +import { ReplaceableComponentsState } from '../states'; + +@Component({ + selector: 'abp-external-component', + template: '

external

', +}) +export class ExternalComponent {} + +@Component({ + selector: 'abp-default-component', + template: '

default

', +}) +export class DefaultComponent {} + +const activatedRouteMock = { + snapshot: { + data: { + replaceableComponent: { + defaultComponent: DefaultComponent, + key: 'TestModule.TestComponent', + }, + }, + }, +}; + +describe('ReplaceableRouteContainerComponent', () => { + const selectResponse = new BehaviorSubject(undefined); + const mockSelect = jest.fn(() => selectResponse); + + let spectator: SpectatorHost; + const createHost = createHostFactory({ + component: ReplaceableRouteContainerComponent, + providers: [ + { provide: ActivatedRoute, useValue: activatedRouteMock }, + { provide: Store, useValue: { select: mockSelect } }, + ], + declarations: [ExternalComponent, DefaultComponent], + entryComponents: [DefaultComponent, ExternalComponent], + }); + + beforeEach(() => { + spectator = createHost('', { + detectChanges: true, + }); + }); + + it('should display the default component', () => { + expect(spectator.query('p')).toHaveText('default'); + }); + + it("should display the external component if it's available in store.", () => { + selectResponse.next({ component: ExternalComponent }); + spectator.detectChanges(); + expect(spectator.query('p')).toHaveText('external'); + + selectResponse.next({ component: null }); + spectator.detectChanges(); + expect(spectator.query('p')).toHaveText('default'); + }); +});