diff --git a/lib/extensions/src/lib/services/extension.service.spec.ts b/lib/extensions/src/lib/services/extension.service.spec.ts index 833e1393b8..c93340ca04 100644 --- a/lib/extensions/src/lib/services/extension.service.spec.ts +++ b/lib/extensions/src/lib/services/extension.service.spec.ts @@ -57,6 +57,43 @@ describe('ExtensionService', () => { expect(service.setup).toHaveBeenCalledWith(blankConfig); }); + describe('getFeature', () => { + it('should return array if seached feature is an array', async () => { + const searchedArrayFeature = [{ test: 'test' }]; + + service.setup({ + ...blankConfig, + features: { + searchedArrayFeature + } + }); + + const requestedFeatue = service.getFeature('searchedArrayFeature'); + expect(requestedFeatue).toEqual(searchedArrayFeature); + }); + + it('should return object if seached feature is an object', async () => { + const searchedObjectFeature: { test: string } = { test: 'test' }; + service.setup({ + ...blankConfig, + features: { + searchedObjectFeature + } + }); + + const requestedFeatue = service.getFeature<{ test: string }>('searchedObjectFeature'); + expect(requestedFeatue).toEqual(searchedObjectFeature); + }); + + it('should return default value if feature is not found', async () => { + const defaultValue = {}; + service.setup(blankConfig); + + const requestedFeatue = service.getFeature<{ test: string }>('searchedFeature', defaultValue); + expect(requestedFeatue).toEqual(defaultValue); + }); + }); + it('should raise warning if setting up with missing config', () => { spyOn(console, 'warn').and.stub(); diff --git a/lib/extensions/src/lib/services/extension.service.ts b/lib/extensions/src/lib/services/extension.service.ts index e54fc70844..23cb346a81 100644 --- a/lib/extensions/src/lib/services/extension.service.ts +++ b/lib/extensions/src/lib/services/extension.service.ts @@ -117,12 +117,13 @@ export class ExtensionService { /** * Gets features by key. * - * @param key Key string, using dot notation - * @returns Features array found by key + * @param key Key string using dot notation or array of strings + * @param defaultValue Default value returned if feature is not found, default is empty array + * @returns Feature found by key */ - getFeature(key: string): any[] { - const properties: string[] = Array.isArray(key) ? [key] : key.split('.'); - return properties.reduce((prev, curr) => prev && prev[curr], this.features) || []; + getFeature(key: string | string[], defaultValue: any = []): T { + const properties: string[] = Array.isArray(key) ? key : key.split('.'); + return properties.reduce((prev, curr) => prev && prev[curr], this.features) || defaultValue; } getElements(key: string, fallback: Array = []): Array {