Skip to content

Commit 94fe16a

Browse files
Sobyt483gkrajniak
andauthored
fix: add check for getEnvConfig http error (#415)
Add try catch block for getEnvConfig fn, in order to prevent app crashes if config is missing --------- Co-authored-by: Grzegorz Krajniak <[email protected]>
1 parent 9aa7814 commit 94fe16a

File tree

2 files changed

+39
-29
lines changed

2 files changed

+39
-29
lines changed

projects/lib/src/lib/services/i18n.service.spec.ts

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import { TestBed } from '@angular/core/testing';
2-
import { mock } from 'jest-mock-extended';
31
import { I18nService } from './i18n.service';
42
import { LuigiCoreService } from './luigi-core.service';
53
import { EnvConfigService } from './portal';
4+
import { TestBed } from '@angular/core/testing';
5+
import { mock } from 'jest-mock-extended';
6+
67

78
describe('I18nService', () => {
89
let i18nService: I18nService;
@@ -45,7 +46,7 @@ describe('I18nService', () => {
4546
i18nService.afterInit();
4647
expect(luigiCoreServiceMock.i18n().getCurrentLocale).toHaveBeenCalled();
4748
expect(
48-
luigiCoreServiceMock.i18n().addCurrentLocaleChangeListener
49+
luigiCoreServiceMock.i18n().addCurrentLocaleChangeListener,
4950
).toHaveBeenCalled();
5051
expect(i18nService.currentLanguage).toEqual('de');
5152
});
@@ -55,7 +56,7 @@ describe('I18nService', () => {
5556
'SOME_TEST_KEY',
5657
translationTable,
5758
'de',
58-
undefined
59+
undefined,
5960
);
6061
expect(result).toEqual('some test key');
6162
});
@@ -64,7 +65,7 @@ describe('I18nService', () => {
6465
const result = i18nService.findTranslation(
6566
'SOME_TEST_KEY3',
6667
translationTable,
67-
'de'
68+
'de',
6869
);
6970
expect(result).toEqual('first line<br>second line');
7071
});
@@ -74,7 +75,7 @@ describe('I18nService', () => {
7475
'SOME_TEST_KEY_',
7576
translationTable,
7677
'',
77-
undefined
78+
undefined,
7879
);
7980
expect(result).toEqual(undefined);
8081
});
@@ -83,7 +84,7 @@ describe('I18nService', () => {
8384
'SOME_TEST_KEY_',
8485
translationTable,
8586
'de',
86-
undefined
87+
undefined,
8788
);
8889
expect(result).toEqual(undefined);
8990
});
@@ -93,7 +94,7 @@ describe('I18nService', () => {
9394
'SOME_TEST_KEY2',
9495
translationTable,
9596
'de',
96-
{ test: 'test' }
97+
{ test: 'test' },
9798
);
9899
expect(result).toEqual('some test key 2');
99100
});
@@ -103,7 +104,7 @@ describe('I18nService', () => {
103104
'SOME_TEST_KEY4',
104105
translationTable,
105106
'de',
106-
{ test: 'test1' }
107+
{ test: 'test1' },
107108
);
108109
expect(result).toEqual('first line test1<br>second line');
109110
});
@@ -118,7 +119,7 @@ describe('I18nService', () => {
118119
const interpolations = { test: 'tets' };
119120
const result = i18nService.findInterpolations(
120121
translationKey,
121-
interpolations
122+
interpolations,
122123
);
123124
expect(result).toEqual('some tets key 2');
124125
});
@@ -128,7 +129,7 @@ describe('I18nService', () => {
128129
const interpolations = { asdf: 'tets' };
129130
const result = i18nService.findInterpolations(
130131
translationKey,
131-
interpolations
132+
interpolations,
132133
);
133134
expect(result).toEqual('some {test} key 2');
134135
});
@@ -162,7 +163,7 @@ describe('I18nService', () => {
162163
spyOn(i18nService, 'translationTable').and.returnValue(translationTable);
163164
const spyFindTranslation = spyOn(
164165
i18nService,
165-
'findTranslation'
166+
'findTranslation',
166167
).and.returnValue('some test key');
167168
const result = i18nService.getTranslation('SOME_TEST_KEY', undefined, 'de');
168169
expect(spyFindTranslation).toHaveBeenCalled();
@@ -175,7 +176,7 @@ describe('I18nService', () => {
175176
const result = await i18nService.getTranslationAsync(
176177
'SOME_TEST_KEY',
177178
undefined,
178-
'de'
179+
'de',
179180
);
180181
expect(result).toEqual('some test key');
181182
});
@@ -190,19 +191,19 @@ describe('I18nService', () => {
190191
};
191192
spyOn(i18nService, 'fallbackLanguage').and.returnValue('en');
192193
spyOn(i18nService, 'translationTable').and.returnValue(
193-
fallbackTranslationTable
194+
fallbackTranslationTable,
194195
);
195196
i18nService.fetchTranslationFile = jest
196197
.fn()
197198
.mockResolvedValue('some test key 3');
198199
spyOn(i18nService, 'findTranslation').and.returnValues(
199200
undefined,
200-
'some test key 3'
201+
'some test key 3',
201202
);
202203
const result = await i18nService.getTranslationAsync(
203204
'SOME_TEST_KEY3',
204205
undefined,
205-
'de'
206+
'de',
206207
);
207208
expect(result).toEqual('some test key 3');
208209
});
@@ -213,7 +214,7 @@ describe('I18nService', () => {
213214
globalThis.fetch = jest.fn(() =>
214215
Promise.resolve({
215216
json: () => Promise.resolve(mockData),
216-
} as Response)
217+
} as Response),
217218
);
218219
await i18nService.fetchTranslationFile(locale);
219220

@@ -235,14 +236,14 @@ describe('I18nService', () => {
235236
};
236237
spyOn(i18nService, 'fallbackLanguage').and.returnValue('en');
237238
spyOn(i18nService, 'translationTable').and.returnValue(
238-
fallbackTranslationTable
239+
fallbackTranslationTable,
239240
);
240241
globalThis.fetch = jest.fn(() => Promise.reject('Fetch error'));
241242

242243
const result = await i18nService.getTranslationAsync(
243244
'SOME_TEST_KEY',
244245
undefined,
245-
'de'
246+
'de',
246247
);
247248

248249
expect(result).toEqual('SOME_TEST_KEY');
@@ -259,7 +260,7 @@ describe('I18nService', () => {
259260
const result = await i18nService.getTranslationAsync(
260261
'SOME_TEST_KEY',
261262
undefined,
262-
'de'
263+
'de',
263264
);
264265

265266
expect(result).toEqual('some test key');
@@ -305,9 +306,11 @@ describe('I18nService', () => {
305306
const mockError = new Error('Config fetch failed');
306307
envConfigServiceMock.getEnvConfig.mockRejectedValue(mockError);
307308

308-
await expect(i18nService.getValidLanguages()).rejects.toThrow(
309-
'Config fetch failed'
310-
);
309+
const result = await i18nService.getValidLanguages();
310+
311+
expect(result).toEqual([
312+
{ value: 'en', label: 'USERSETTINGSDIALOG_LANGUAGE_EN' },
313+
]);
311314
});
312315
});
313316
});

projects/lib/src/lib/services/i18n.service.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -205,15 +205,22 @@ export class I18nService {
205205
}
206206

207207
async getValidLanguages(): Promise<{ value: string; label: string }[]> {
208-
const { developmentInstance } = await this.envConfigService.getEnvConfig();
209-
210208
const languages = [
211209
{ value: 'en', label: 'USERSETTINGSDIALOG_LANGUAGE_EN' },
212210
];
213-
if (developmentInstance) {
214-
languages.push({ value: 'de', label: 'USERSETTINGSDIALOG_LANGUAGE_DE' });
215-
}
216211

217-
return languages;
212+
try {
213+
const { developmentInstance } =
214+
await this.envConfigService.getEnvConfig();
215+
216+
if (developmentInstance) {
217+
languages.push({
218+
value: 'de',
219+
label: 'USERSETTINGSDIALOG_LANGUAGE_DE',
220+
});
221+
}
222+
} finally {
223+
return languages;
224+
}
218225
}
219226
}

0 commit comments

Comments
 (0)