import { HttpErrorResponse } from '@angular/common/http'; import { TokenResponse } from '@core/typings/token.typing'; import { PortalDeterminationService } from '../portal-determination.service'; import { TokenAdapterService } from './token-adapter.service'; import { TokenRefreshResources } from './token-refresh.resources'; import { mockTokenResponse } from './token-test-helpers.mock'; let tokenRefreshServiceMock: TokenRefreshResourcesMock; export class TokenRefreshResourcesMock extends TokenRefreshResources { mockApplicantResponse = mockTokenResponse(); mockManagerResponse = mockTokenResponse(); mockAdminResponse = mockTokenResponse(); constructor ( private portalDet: PortalDeterminationService, adapter: TokenAdapterService ) { super(null, portalDet, adapter); adapter['getServerTime'] = () => null; if (tokenRefreshServiceMock) { return tokenRefreshServiceMock; } else { tokenRefreshServiceMock = this; } } protected async refreshApplicantToken (refreshToken: string, userId: number, clientIdentifier: string) { return this.mockApplicantResponse; } protected async refreshManagerToken (refreshToken: string, userId: number, clientIdentifier: string) { return this.mockManagerResponse; } protected async refreshAdminToken (refreshToken: string, userId: number, clientIdentifier: string) { return this.mockAdminResponse; } async refreshToken (refreshToken: string, userId: number, clientIdentifier: string): Promise { let body: TokenResponse; if (this.portalDet.isPlatform) { body = await this.refreshAdminToken(refreshToken, userId, clientIdentifier); } else if (this.portalDet.isApply) { body = await this.refreshApplicantToken(refreshToken, userId, clientIdentifier); } else { body = await this.refreshManagerToken(refreshToken, userId, clientIdentifier); } try { return body; } catch (e) { const err = e as HttpErrorResponse; if (err.status === 400) { return null; } throw err; } } } export const TOKEN_REFRESH_RESOURCES_MOCK = { provide: TokenRefreshResources, useValue: TokenRefreshResourcesMock };