Browse Source

tests(core): add replaceable-route-container.component.spec

#2404
pull/2522/head
mehmet-erim 7 years ago
parent
commit
48ea971486
  1. 4
      npm/ng-packs/packages/core/src/lib/components/replaceable-route-container.component.ts
  2. 9
      npm/ng-packs/packages/core/src/lib/guards/permission.guard.ts
  3. 66
      npm/ng-packs/packages/core/src/lib/tests/replaceable-route-container.component.spec.ts

4
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;
});
}

9
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> | boolean {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
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);
}
}

66
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: '<p>external</p>',
})
export class ExternalComponent {}
@Component({
selector: 'abp-default-component',
template: '<p>default</p>',
})
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<ReplaceableRouteContainerComponent>;
const createHost = createHostFactory({
component: ReplaceableRouteContainerComponent,
providers: [
{ provide: ActivatedRoute, useValue: activatedRouteMock },
{ provide: Store, useValue: { select: mockSelect } },
],
declarations: [ExternalComponent, DefaultComponent],
entryComponents: [DefaultComponent, ExternalComponent],
});
beforeEach(() => {
spectator = createHost('<abp-replaceable-route-container></abp-replaceable-route-container>', {
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');
});
});
Loading…
Cancel
Save