diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index 5023876a4d..f118ab2836 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -37,7 +37,7 @@ import { SessionState } from './states/session.state'; import { CORE_OPTIONS } from './tokens/options.token'; import { noop } from './utils/common-utils'; import './utils/date-extensions'; -import { getInitialData, localeInitializer } from './utils/initial-utils'; +import { getInitialData, localeInitializer, configureOAuth } from './utils/initial-utils'; export function storageFactory(): OAuthStorage { return localStorage; @@ -179,6 +179,12 @@ export class CoreModule { useClass: ApiInterceptor, multi: true, }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [Injector, NGXS_CONFIG_PLUGIN_OPTIONS], + useFactory: configureOAuth, + }, { provide: APP_INITIALIZER, multi: true, diff --git a/npm/ng-packs/packages/core/src/lib/tests/initial-utils.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/initial-utils.spec.ts index 0c94ad1aed..553fcc6d7e 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/initial-utils.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/initial-utils.spec.ts @@ -3,7 +3,8 @@ import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; import { of } from 'rxjs'; import { GetAppConfiguration } from '../actions'; -import { getInitialData, localeInitializer } from '../utils'; +import { getInitialData, localeInitializer, configureOAuth } from '../utils'; +import { OAuthService } from 'angular-oauth2-oidc'; @Component({ selector: 'abp-dummy', @@ -15,16 +16,30 @@ describe('InitialUtils', () => { let spectator: Spectator; const createComponent = createComponentFactory({ component: DummyComponent, - mocks: [Store], + mocks: [Store, OAuthService], }); beforeEach(() => (spectator = createComponent())); + describe('#configureOAuth', () => { + test('should be called the the configure method of OAuthService', async () => { + const injector = spectator.inject(Injector); + const injectorSpy = jest.spyOn(injector, 'get'); + const oAuth = spectator.inject(OAuthService); + const configureSpy = jest.spyOn(oAuth, 'configure'); + + injectorSpy.mockReturnValueOnce(oAuth); + + await configureOAuth(injector, { environment: { oAuthConfig: { issuer: 'test' } } })(); + expect(configureSpy).toHaveBeenCalledWith({ issuer: 'test' }); + }); + }); + describe('#getInitialData', () => { test('should dispatch GetAppConfiguration and return', async () => { - const injector = spectator.get(Injector); + const injector = spectator.inject(Injector); const injectorSpy = jest.spyOn(injector, 'get'); - const store = spectator.get(Store); + const store = spectator.inject(Store); const dispatchSpy = jest.spyOn(store, 'dispatch'); injectorSpy.mockReturnValueOnce(store); @@ -40,9 +55,9 @@ describe('InitialUtils', () => { describe('#checkAccessToken', () => { test('should call logOut fn of OAuthService when token is valid and current user not found', async () => { - const injector = spectator.get(Injector); + const injector = spectator.inject(Injector); const injectorSpy = jest.spyOn(injector, 'get'); - const store = spectator.get(Store); + const store = spectator.inject(Store); const dispatchSpy = jest.spyOn(store, 'dispatch'); const logOutFn = jest.fn(); @@ -58,9 +73,9 @@ describe('InitialUtils', () => { describe('#localeInitializer', () => { test('should resolve registerLocale', async () => { - const injector = spectator.get(Injector); + const injector = spectator.inject(Injector); const injectorSpy = jest.spyOn(injector, 'get'); - const store = spectator.get(Store); + const store = spectator.inject(Store); store.selectSnapshot.andCallFake(selector => selector({ SessionState: { language: 'tr' } })); injectorSpy.mockReturnValue(store); expect(typeof localeInitializer(injector)).toBe('function'); diff --git a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts index 1ece167a22..e8e62ef057 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts @@ -9,6 +9,16 @@ import { ABP } from '../models/common'; import { ConfigState } from '../states/config.state'; import { CORE_OPTIONS } from '../tokens/options.token'; +export function configureOAuth(injector: Injector, options: ABP.Root) { + const fn = () => { + const oAuth = injector.get(OAuthService); + oAuth.configure(options.environment.oAuthConfig); + return Promise.resolve(); + }; + + return fn; +} + export function getInitialData(injector: Injector) { const fn = () => { const store: Store = injector.get(Store);