diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index f432ab97d9..caf342491a 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -13,9 +13,9 @@ "@abp/ng.feature-management": "^0.9.0", "@abp/ng.permission-management": "^0.9.0", "@abp/ng.theme.shared": "^0.9.0", + "@angular-builders/jest": "^8.2.0", "@angular-devkit/build-angular": "~0.803.6", "@angular-devkit/build-ng-packagr": "~0.803.6", - "@angular-builders/jest": "^8.2.0", "@angular/animations": "~8.2.8", "@angular/cdk": "^8.2.2", "@angular/cli": "~8.3.6", diff --git a/npm/ng-packs/packages/core/src/lib/tests/api.interceptor.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/api.interceptor.spec.ts new file mode 100644 index 0000000000..3e5e3aa96a --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/api.interceptor.spec.ts @@ -0,0 +1,74 @@ +import { HttpRequest } from '@angular/common/http'; +import { SpyObject } from '@ngneat/spectator'; +import { createServiceFactory, SpectatorService } from '@ngneat/spectator/jest'; +import { Store } from '@ngxs/store'; +import { OAuthService } from 'angular-oauth2-oidc'; +import { Subject, timer } from 'rxjs'; +import { ApiInterceptor } from '../interceptors'; +import { StartLoader, StopLoader } from '../actions'; + +describe('ApiInterceptor', () => { + let spectator: SpectatorService; + let interceptor: ApiInterceptor; + let store: SpyObject; + let oauthService: SpyObject; + + const createService = createServiceFactory({ + service: ApiInterceptor, + mocks: [OAuthService, Store], + }); + + beforeEach(() => { + spectator = createService(); + interceptor = spectator.service; + store = spectator.get(Store); + oauthService = spectator.get(OAuthService); + }); + + it('should add headers to http request', done => { + oauthService.getAccessToken.andReturn('ey892mkwa8^2jk'); + store.selectSnapshot.andReturn({ id: 'test' }); + + const request = new HttpRequest('GET', 'https://abp.io'); + const handleRes$ = new Subject(); + + const handler = { + handle: (req: HttpRequest) => { + expect(req.headers.get('Authorization')).toEqual('Bearer ey892mkwa8^2jk'); + expect(req.headers.get('Accept-Language')).toEqual({ id: 'test' }); + expect(req.headers.get('__tenant')).toEqual('test'); + done(); + return handleRes$; + }, + }; + + interceptor.intercept(request, handler as any); + + handleRes$.next(); + handleRes$.complete(); + }); + + it('should dispatch the loader', done => { + const spy = jest.spyOn(store, 'dispatch'); + + const request = new HttpRequest('GET', 'https://abp.io'); + const handleRes$ = new Subject(); + + const handler = { + handle: (req: HttpRequest) => { + return handleRes$; + }, + }; + + interceptor.intercept(request, handler as any).subscribe(); + + handleRes$.next(); + handleRes$.complete(); + + timer(0).subscribe(() => { + expect(spy.mock.calls[0][0] instanceof StartLoader).toBeTruthy(); + expect(spy.mock.calls[1][0] instanceof StopLoader).toBeTruthy(); + done(); + }); + }); +});