mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-07 05:52:57 +00:00
committed by
Thea Schöbl
parent
39d2801114
commit
dea9a82105
@@ -24,13 +24,17 @@ import {
|
|||||||
} from './errors';
|
} from './errors';
|
||||||
import {NGXLogger} from 'ngx-logger';
|
import {NGXLogger} from 'ngx-logger';
|
||||||
import {sampleIndexResponse} from '../../_helpers/data/sample-configuration';
|
import {sampleIndexResponse} from '../../_helpers/data/sample-configuration';
|
||||||
|
import {BehaviorSubject} from 'rxjs';
|
||||||
|
import {InternetConnectionService} from '../../util/internet-connection.service';
|
||||||
|
|
||||||
describe('ConfigProvider', () => {
|
describe('ConfigProvider', () => {
|
||||||
|
let internetConnectionServiceMock: {offline$: BehaviorSubject<boolean>};
|
||||||
let configProvider: ConfigProvider;
|
let configProvider: ConfigProvider;
|
||||||
let storageProviderSpy: jasmine.SpyObj<StorageProvider>;
|
let storageProviderSpy: jasmine.SpyObj<StorageProvider>;
|
||||||
let ngxLogger: jasmine.SpyObj<NGXLogger>;
|
let ngxLogger: jasmine.SpyObj<NGXLogger>;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
internetConnectionServiceMock = {offline$: new BehaviorSubject<boolean>(false)};
|
||||||
storageProviderSpy = jasmine.createSpyObj('StorageProvider', ['init', 'get', 'has', 'put']);
|
storageProviderSpy = jasmine.createSpyObj('StorageProvider', ['init', 'get', 'has', 'put']);
|
||||||
const webHttpClientMethodSpy = jasmine.createSpyObj('StAppsWebHttpClient', ['request']);
|
const webHttpClientMethodSpy = jasmine.createSpyObj('StAppsWebHttpClient', ['request']);
|
||||||
ngxLogger = jasmine.createSpyObj('NGXLogger', ['log', 'error', 'warn']);
|
ngxLogger = jasmine.createSpyObj('NGXLogger', ['log', 'error', 'warn']);
|
||||||
@@ -51,6 +55,10 @@ describe('ConfigProvider', () => {
|
|||||||
provide: NGXLogger,
|
provide: NGXLogger,
|
||||||
useValue: ngxLogger,
|
useValue: ngxLogger,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
provide: InternetConnectionService,
|
||||||
|
useValue: internetConnectionServiceMock,
|
||||||
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -75,6 +83,22 @@ describe('ConfigProvider', () => {
|
|||||||
expect(error).toEqual(new ConfigFetchError());
|
expect(error).toEqual(new ConfigFetchError());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should throw device offline error when offline', async () => {
|
||||||
|
// eslint-disable-next-line unicorn/error-message
|
||||||
|
let error = new Error('');
|
||||||
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
|
// @ts-ignore
|
||||||
|
internetConnectionServiceMock.offline$ = new BehaviorSubject<boolean>(true);
|
||||||
|
|
||||||
|
try {
|
||||||
|
await configProvider.fetch();
|
||||||
|
} catch (error_) {
|
||||||
|
error = error_ as Error;
|
||||||
|
expect(error).toBeInstanceOf(ConfigFetchError);
|
||||||
|
expect(error.message).toContain('Device is offline.');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
it('should init from remote and saved config not available', async () => {
|
it('should init from remote and saved config not available', async () => {
|
||||||
storageProviderSpy.has.and.returnValue(Promise.resolve(false));
|
storageProviderSpy.has.and.returnValue(Promise.resolve(false));
|
||||||
spyOn(configProvider.client, 'handshake').and.returnValue(Promise.resolve(sampleIndexResponse));
|
spyOn(configProvider.client, 'handshake').and.returnValue(Promise.resolve(sampleIndexResponse));
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ import {
|
|||||||
SavedConfigNotAvailable,
|
SavedConfigNotAvailable,
|
||||||
WrongConfigVersionInStorage,
|
WrongConfigVersionInStorage,
|
||||||
} from './errors';
|
} from './errors';
|
||||||
|
import {InternetConnectionService} from '../../util/internet-connection.service';
|
||||||
|
import {firstValueFrom} from 'rxjs';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Key to store config in storage module
|
* Key to store config in storage module
|
||||||
@@ -72,6 +74,7 @@ export class ConfigProvider {
|
|||||||
private readonly storageProvider: StorageProvider,
|
private readonly storageProvider: StorageProvider,
|
||||||
swHttpClient: StAppsWebHttpClient,
|
swHttpClient: StAppsWebHttpClient,
|
||||||
private readonly logger: NGXLogger,
|
private readonly logger: NGXLogger,
|
||||||
|
private readonly internetConnectionService: InternetConnectionService,
|
||||||
) {
|
) {
|
||||||
console.log('config init');
|
console.log('config init');
|
||||||
this.client = new Client(swHttpClient, environment.backend_url, environment.backend_version);
|
this.client = new Client(swHttpClient, environment.backend_url, environment.backend_version);
|
||||||
@@ -82,9 +85,15 @@ export class ConfigProvider {
|
|||||||
*/
|
*/
|
||||||
async fetch(): Promise<SCIndexResponse> {
|
async fetch(): Promise<SCIndexResponse> {
|
||||||
try {
|
try {
|
||||||
|
const isOffline = await firstValueFrom(this.internetConnectionService.offline$);
|
||||||
|
if (isOffline) {
|
||||||
|
throw new Error('Device is offline.');
|
||||||
|
} else {
|
||||||
return await this.client.handshake(this.scVersion);
|
return await this.client.handshake(this.scVersion);
|
||||||
} catch {
|
}
|
||||||
throw new ConfigFetchError();
|
} catch (error) {
|
||||||
|
const error_ = error instanceof Error ? new ConfigFetchError(error.message) : new ConfigFetchError();
|
||||||
|
throw error_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,10 @@ import {AppError} from '../../_helpers/errors';
|
|||||||
* Error that is thrown when fetching from backend fails
|
* Error that is thrown when fetching from backend fails
|
||||||
*/
|
*/
|
||||||
export class ConfigFetchError extends AppError {
|
export class ConfigFetchError extends AppError {
|
||||||
constructor() {
|
constructor(reason?: string) {
|
||||||
super('ConfigFetchError', 'App configuration could not be fetched!');
|
const defaultMessage = 'App configuration could not be fetched!';
|
||||||
|
const message = reason ? `${defaultMessage} ${reason}` : defaultMessage;
|
||||||
|
super('ConfigFetchError', message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user