From 6559cd256443b4dcbf554c475bae02b9ad788c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20Seku=C5=82a?= Date: Fri, 14 Oct 2022 14:01:45 +0200 Subject: [PATCH] [AAE-10556] Admin with HxP - In case the roles API call fails the app crashes (#7895) * [AAE-10556] Admin with HxP - In case the roles API call fails the app crashes * Added tests for API error --- lib/core/src/lib/services/user-access.service.spec.ts | 9 ++++++++- lib/core/src/lib/services/user-access.service.ts | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/core/src/lib/services/user-access.service.spec.ts b/lib/core/src/lib/services/user-access.service.spec.ts index 9efaf26a78..62af867c23 100644 --- a/lib/core/src/lib/services/user-access.service.spec.ts +++ b/lib/core/src/lib/services/user-access.service.spec.ts @@ -20,7 +20,7 @@ import { TestBed } from '@angular/core/testing'; import { UserAccessService } from './user-access.service'; import { JwtHelperService } from './jwt-helper.service'; import { OAuth2Service } from './oauth2.service'; -import { of } from 'rxjs'; +import { of, throwError } from 'rxjs'; import { userAccessMock } from '../mock/user-access.mock'; import { AppConfigService } from '../app-config'; @@ -161,5 +161,12 @@ describe('UserAccessService', () => { expect(getAccessFromApiSpy).not.toHaveBeenCalled(); }); + + it('should set empty access list on fething roles error', async () => { + getAccessFromApiSpy.and.returnValue(throwError({ status: 503 })); + await userAccessService.fetchUserAccess(); + + expect(userAccessService.hasGlobalAccess(['MOCKED_ROLES'])).toBe(false); + }); }); }); diff --git a/lib/core/src/lib/services/user-access.service.ts b/lib/core/src/lib/services/user-access.service.ts index fe5fc2810e..73643e0a48 100644 --- a/lib/core/src/lib/services/user-access.service.ts +++ b/lib/core/src/lib/services/user-access.service.ts @@ -21,6 +21,8 @@ import { ApplicationAccessModel } from '../models/application-access.model'; import { UserAccessModel } from '../models/user-access.model'; import { AppConfigService } from '../app-config/app-config.service'; import { OAuth2Service } from './oauth2.service'; +import { catchError } from 'rxjs/operators'; +import { of } from 'rxjs'; const IDENTITY_MICRO_SERVICE_INGRESS = 'identity-adapter-service'; @@ -54,6 +56,14 @@ export class UserAccessService { private async fetchAccessFromApi() { const url = `${this.identityHost}/${IDENTITY_MICRO_SERVICE_INGRESS}/v1/roles`; await this.oAuth2Service.get({ url }) + .pipe( + catchError(() => of({ + globalAccess: { + roles: [] + }, + applicationAccess: [] + })) + ) .toPromise() .then((response: UserAccessModel) => { this.globalAccess = response.globalAccess.roles;