From 098b1d733ee422c5de06886eb7bc6723a695e663 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jovan=20Kruni=C4=87?= Date: Tue, 22 Feb 2022 13:29:04 +0100 Subject: [PATCH] test: inject instead of deprecated TestBed get Additionally refactor tests and ts-ignore annotations. --- src/app/_helpers/data/sample-configuration.ts | 3 +- .../modules/config/config.provider.spec.ts | 7 ++- .../modules/data/data-facets.provider.spec.ts | 2 +- src/app/modules/data/data.provider.spec.ts | 15 +++--- .../data/detail/data-detail.component.spec.ts | 4 +- .../daia-availability.component.spec.ts | 4 +- .../hebis-detail.component.spec.ts | 4 +- src/app/modules/map/map.provider.spec.ts | 2 - .../context/context-menu.component.spec.ts | 6 +-- .../menu/context/context-menu.service.spec.ts | 2 +- .../settings/settings.provider.spec.ts | 48 ++++++++----------- .../modules/storage/storage.provider.spec.ts | 11 ++--- 12 files changed, 50 insertions(+), 58 deletions(-) diff --git a/src/app/_helpers/data/sample-configuration.ts b/src/app/_helpers/data/sample-configuration.ts index 44e55a18..3f838705 100644 --- a/src/app/_helpers/data/sample-configuration.ts +++ b/src/app/_helpers/data/sample-configuration.ts @@ -13,6 +13,7 @@ * this program. If not, see . */ import {SCAuthorizationProvider, SCBackendAggregationConfiguration, SCThingType} from '@openstapps/core'; +import {Polygon} from 'geojson'; // provides sample aggregations to be used in tests or backendless development export const sampleAggregations: SCBackendAggregationConfiguration[] = [ @@ -90,7 +91,7 @@ export const sampleAuthConfiguration: { }, }; -export const sampleDefaultPolygon = { +export const sampleDefaultPolygon: Polygon = { "coordinates": [ [ [ diff --git a/src/app/modules/config/config.provider.spec.ts b/src/app/modules/config/config.provider.spec.ts index 8e8de2e0..e5d52a16 100644 --- a/src/app/modules/config/config.provider.spec.ts +++ b/src/app/modules/config/config.provider.spec.ts @@ -38,7 +38,7 @@ describe('ConfigProvider', () => { let ngxLogger: jasmine.SpyObj; beforeEach(() => { - const storageProviderMethodSpy = jasmine.createSpyObj('StorageProvider', [ + storageProviderSpy = jasmine.createSpyObj('StorageProvider', [ 'init', 'get', 'has', @@ -55,7 +55,7 @@ describe('ConfigProvider', () => { ConfigProvider, { provide: StorageProvider, - useValue: storageProviderMethodSpy, + useValue: storageProviderSpy, }, { provide: StAppsWebHttpClient, @@ -68,8 +68,7 @@ describe('ConfigProvider', () => { ], }); - configProvider = TestBed.get(ConfigProvider); - storageProviderSpy = TestBed.get(StorageProvider); + configProvider = TestBed.inject(ConfigProvider); }); it('should fetch app configuration', async () => { diff --git a/src/app/modules/data/data-facets.provider.spec.ts b/src/app/modules/data/data-facets.provider.spec.ts index ef18a258..1fd3c29c 100644 --- a/src/app/modules/data/data-facets.provider.spec.ts +++ b/src/app/modules/data/data-facets.provider.spec.ts @@ -78,7 +78,7 @@ describe('DataProvider', () => { imports: [DataModule], providers: [DataProvider, StAppsWebHttpClient], }); - dataFacetsProvider = TestBed.get(DataFacetsProvider); + dataFacetsProvider = TestBed.inject(DataFacetsProvider); }); it('should add buckets properly', () => { diff --git a/src/app/modules/data/data.provider.spec.ts b/src/app/modules/data/data.provider.spec.ts index ac09967d..34c762f4 100644 --- a/src/app/modules/data/data.provider.spec.ts +++ b/src/app/modules/data/data.provider.spec.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion,@typescript-eslint/ban-ts-comment,@typescript-eslint/no-explicit-any */ /* * Copyright (C) 2018-2021 StApps * This program is free software: you can redistribute it and/or modify it @@ -13,6 +12,7 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ +/* eslint-disable @typescript-eslint/no-non-null-assertion, @typescript-eslint/no-explicit-any */ import {TestBed} from '@angular/core/testing'; import {Client} from '@openstapps/api/lib/client'; import { @@ -85,8 +85,8 @@ describe('DataProvider', () => { imports: [DataModule], providers: [DataProvider, StAppsWebHttpClient], }); - storageProvider = TestBed.get(StorageProvider); - dataProvider = TestBed.get(DataProvider); + storageProvider = TestBed.inject(StorageProvider); + dataProvider = TestBed.inject(DataProvider); }); it('should generate data key', async () => { @@ -146,13 +146,14 @@ describe('DataProvider', () => { for (const key in request_) { if (request_.hasOwnProperty(key)) { i++; - // @ts-ignore + expect(requestCheck[key]).not.toBeNull(); expect(requestCheck[key]).toEqual(request_[key]); - // @ts-ignore + + // @ts-expect-error is not null // eslint-disable-next-line unicorn/no-null requestCheck[key] = null; - // @ts-ignore + // @ts-expect-error is a string for test purposes request_[key] = request_[key].toUpperCase(); } } @@ -164,7 +165,7 @@ describe('DataProvider', () => { ); const response = await dataProvider.multiSearch(request); - // @ts-ignore + // @ts-expect-error same type expect(response).toEqual(responseShould); }); diff --git a/src/app/modules/data/detail/data-detail.component.spec.ts b/src/app/modules/data/detail/data-detail.component.spec.ts index 11db1e47..8cf2f852 100644 --- a/src/app/modules/data/detail/data-detail.component.spec.ts +++ b/src/app/modules/data/detail/data-detail.component.spec.ts @@ -96,8 +96,8 @@ describe('DataDetailComponent', () => { }); beforeEach(() => { - dataProvider = TestBed.get(DataProvider); - translateService = TestBed.get(TranslateService); + dataProvider = TestBed.inject(DataProvider); + translateService = TestBed.inject(TranslateService); refresher = jasmine.createSpyObj('refresher', ['complete']); spyOn(dataProvider, 'get' as any).and.returnValue( Promise.resolve(sampleThing), diff --git a/src/app/modules/hebis/daia-availability/daia-availability.component.spec.ts b/src/app/modules/hebis/daia-availability/daia-availability.component.spec.ts index 4c507016..9afda024 100644 --- a/src/app/modules/hebis/daia-availability/daia-availability.component.spec.ts +++ b/src/app/modules/hebis/daia-availability/daia-availability.component.spec.ts @@ -109,10 +109,10 @@ describe('DaiaAvailabilityComponent', () => { }); beforeEach(async () => { - dataProvider = TestBed.get(DaiaDataProvider); + dataProvider = TestBed.inject(DaiaDataProvider); const workingDAIAurl = 'https://daia.hebis.de/DAIA2/UB_Frankfurt'; dataProvider.daiaServiceUrl = workingDAIAurl; - translateService = TestBed.get(TranslateService); + translateService = TestBed.inject(TranslateService); refresher = jasmine.createSpyObj('refresher', ['complete']); spyOn(dataProvider, 'getAvailability' as any).and.returnValue( Promise.resolve(sampleThing), diff --git a/src/app/modules/hebis/hebis-detail/hebis-detail.component.spec.ts b/src/app/modules/hebis/hebis-detail/hebis-detail.component.spec.ts index 5e4f5e3f..5a1055d7 100644 --- a/src/app/modules/hebis/hebis-detail/hebis-detail.component.spec.ts +++ b/src/app/modules/hebis/hebis-detail/hebis-detail.component.spec.ts @@ -94,8 +94,8 @@ describe('HebisDetailComponent', () => { }); beforeEach(() => { - dataProvider = TestBed.get(HebisDataProvider); - translateService = TestBed.get(TranslateService); + dataProvider = TestBed.inject(HebisDataProvider); + translateService = TestBed.inject(TranslateService); refresher = jasmine.createSpyObj('refresher', ['complete']); spyOn(dataProvider, 'get' as any).and.returnValue( Promise.resolve(sampleThing), diff --git a/src/app/modules/map/map.provider.spec.ts b/src/app/modules/map/map.provider.spec.ts index 3f58c638..c2455473 100644 --- a/src/app/modules/map/map.provider.spec.ts +++ b/src/app/modules/map/map.provider.spec.ts @@ -44,8 +44,6 @@ describe('MapProvider', () => { ], }); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore configProvider.getValue.and.returnValue(sampleDefaultPolygon); provider = TestBed.inject(MapProvider); }); diff --git a/src/app/modules/menu/context/context-menu.component.spec.ts b/src/app/modules/menu/context/context-menu.component.spec.ts index 11a6657c..d5176786 100644 --- a/src/app/modules/menu/context/context-menu.component.spec.ts +++ b/src/app/modules/menu/context/context-menu.component.spec.ts @@ -12,7 +12,7 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ -/* eslint-disable @typescript-eslint/no-non-null-assertion,@typescript-eslint/ban-ts-comment */ +/* eslint-disable @typescript-eslint/no-non-null-assertion, @typescript-eslint/ban-ts-comment */ import { APP_BASE_HREF, CommonModule, @@ -103,7 +103,7 @@ describe('ContextMenuComponent', async () => { fixture.detectChanges(); const sort: HTMLElement = fixture.debugElement.nativeElement.querySelector('.context-sort'); - // @ts-ignore + // @ts-expect-error not relevant for this case const sortItem: HTMLElement = sort.querySelectorAll('.sort-item')[1]; sortItem!.click(); expect(instance.sortOption.value).toEqual('name'); @@ -148,7 +148,7 @@ describe('ContextMenuComponent', async () => { expect(filterGroup).toBeDefined(); - // @ts-ignore + // @ts-expect-error it is defined const filterItems = filterGroup.querySelectorAll('.filter-item-label'); if (filterItems.length !== facet.buckets.length) { diff --git a/src/app/modules/menu/context/context-menu.service.spec.ts b/src/app/modules/menu/context/context-menu.service.spec.ts index 49adf6da..5f4ca189 100644 --- a/src/app/modules/menu/context/context-menu.service.spec.ts +++ b/src/app/modules/menu/context/context-menu.service.spec.ts @@ -11,7 +11,7 @@ describe('ContextMenuService', () => { TestBed.configureTestingModule({ providers: [ContextMenuService], }); - service = TestBed.get(ContextMenuService); + service = TestBed.inject(ContextMenuService); }); it('should be created', () => { diff --git a/src/app/modules/settings/settings.provider.spec.ts b/src/app/modules/settings/settings.provider.spec.ts index f4b1a6f7..f8252cf6 100644 --- a/src/app/modules/settings/settings.provider.spec.ts +++ b/src/app/modules/settings/settings.provider.spec.ts @@ -12,6 +12,7 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ +/* eslint-disable unicorn/no-useless-undefined, @typescript-eslint/no-non-null-assertion */ import {TestBed} from '@angular/core/testing'; import { SCSetting, @@ -35,15 +36,13 @@ describe('SettingsProvider', () => { let scheduleSyncServiceSpy: jasmine.SpyObj; beforeEach(async () => { - const storageProviderMethodSpy = jasmine.createSpyObj('StorageProvider', [ + storageProviderSpy = jasmine.createSpyObj('StorageProvider', [ 'init', 'get', 'has', 'put', ]); - const configProviderMethodSpy = jasmine.createSpyObj('ConfigProvider', [ - 'getValue', - ]); + configProviderSpy = jasmine.createSpyObj('ConfigProvider', ['getValue']); scheduleSyncServiceSpy = jasmine.createSpyObj('ScheduleSyncService', [ 'getDifferences', 'postDifferencesNotification', @@ -55,11 +54,11 @@ describe('SettingsProvider', () => { SettingsProvider, { provide: StorageProvider, - useValue: storageProviderMethodSpy, + useValue: storageProviderSpy, }, { provide: ConfigProvider, - useValue: configProviderMethodSpy, + useValue: configProviderSpy, }, { provide: ScheduleSyncService, @@ -67,12 +66,10 @@ describe('SettingsProvider', () => { }, ], }); - configProviderSpy = TestBed.get(ConfigProvider); // set settings returned from config configProviderSpy.getValue.and.returnValue(CONFIG_SETTINGS_MOCK); - settingsProvider = TestBed.get(SettingsProvider); - storageProviderSpy = TestBed.get(StorageProvider); - storageProviderMethodSpy.has.and.returnValue(false); + settingsProvider = TestBed.inject(SettingsProvider); + storageProviderSpy.has.and.returnValue(Promise.resolve(false)); }); it('should provide and get setting', async () => { @@ -83,7 +80,7 @@ describe('SettingsProvider', () => { CONFIG_SETTINGS_MOCK[0].categories[0], CONFIG_SETTINGS_MOCK[0].name, ); - await expect(setting.value).toBeDefined(); + expect(setting.value).toBeDefined(); }); it('should provide and get settings value', async () => { @@ -94,7 +91,7 @@ describe('SettingsProvider', () => { CONFIG_SETTINGS_MOCK[0].categories[0], CONFIG_SETTINGS_MOCK[0].name, ); - await expect(value).toEqual(CONFIG_SETTINGS_MOCK[0].defaultValue); + expect(value).toEqual(CONFIG_SETTINGS_MOCK[0].defaultValue); }); it('should get persisted setting value', async () => { @@ -108,7 +105,7 @@ describe('SettingsProvider', () => { CONFIG_SETTINGS_MOCK[3].categories[0], CONFIG_SETTINGS_MOCK[3].name, ); - await expect(value).toEqual(SETTING_VALUES_MOCK.profile.group as string); + expect(value).toEqual(SETTING_VALUES_MOCK.profile.group as string); }); it('should set default setting value if no persisted value exist', async () => { @@ -119,7 +116,7 @@ describe('SettingsProvider', () => { CONFIG_SETTINGS_MOCK[3].categories[0], CONFIG_SETTINGS_MOCK[3].name, ); - await expect(value).toEqual(CONFIG_SETTINGS_MOCK[3].defaultValue); + expect(value).toEqual(CONFIG_SETTINGS_MOCK[3].defaultValue); }); it('should keep persisted setting values from settings that are not contained in loaded config', async () => { @@ -130,7 +127,7 @@ describe('SettingsProvider', () => { Promise.resolve(SETTING_VALUES_MOCK), ); await settingsProvider.init(); - await expect(storageProviderSpy.put).toHaveBeenCalledWith( + expect(storageProviderSpy.put).toHaveBeenCalledWith( STORAGE_KEY_SETTING_VALUES, SETTING_VALUES_MOCK, ); @@ -149,7 +146,7 @@ describe('SettingsProvider', () => { CONFIG_SETTINGS_MOCK[1].categories[0], CONFIG_SETTINGS_MOCK[1].name, ); - await expect(value).toEqual('updated'); + expect(value).toEqual('updated'); }); it('should return copy of settingsCache', async () => { @@ -161,7 +158,7 @@ describe('SettingsProvider', () => { const settings = await settingsProvider.getCache(); settings[category].settings[name].value = 'testValue'; // cached setting value should still be defaultValue - await expect(await settingsProvider.getValue(category, name)).toEqual( + expect(await settingsProvider.getValue(category, name)).toEqual( CONFIG_SETTINGS_MOCK[0].defaultValue, ); }); @@ -175,12 +172,12 @@ describe('SettingsProvider', () => { CONFIG_SETTINGS_MOCK[0].name, '', ); - await expect(storageProviderSpy.put).toHaveBeenCalled(); + expect(storageProviderSpy.put).toHaveBeenCalled(); }); it('should clear settings', async () => { await settingsProvider.reset(); - await expect(storageProviderSpy.put).toHaveBeenCalledWith( + expect(storageProviderSpy.put).toHaveBeenCalledWith( STORAGE_KEY_SETTING_VALUES, {}, ); @@ -198,7 +195,7 @@ describe('SettingsProvider', () => { CONFIG_SETTINGS_MOCK[0].categories[0], CONFIG_SETTINGS_MOCK[0].name, ); - await expect(value).toEqual(CONFIG_SETTINGS_MOCK[0].defaultValue); + expect(value).toEqual(CONFIG_SETTINGS_MOCK[0].defaultValue); }); it('should validate wrong values for inputType text', async () => { @@ -243,7 +240,7 @@ describe('SettingsProvider', () => { * TODO */ async function testValue(setting: SCSetting, value: unknown) { - let error: Error; + let error: Error | undefined = undefined; await settingsProvider.provideSetting(JSON.parse(JSON.stringify(setting))); try { await settingsProvider.setSettingValue( @@ -254,12 +251,9 @@ describe('SettingsProvider', () => { } catch (error_) { error = error_; } - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - await expect(error).toBeDefined(); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - await expect(error.message).toMatch(/is not valid/); + + expect(error).toBeDefined(); + expect(error!.message).toMatch(/is not valid/); } const CONFIG_SETTINGS_MOCK: SCSetting[] = [ diff --git a/src/app/modules/storage/storage.provider.spec.ts b/src/app/modules/storage/storage.provider.spec.ts index 16788e9f..325caf84 100644 --- a/src/app/modules/storage/storage.provider.spec.ts +++ b/src/app/modules/storage/storage.provider.spec.ts @@ -12,8 +12,7 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ - -/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/ban-ts-comment */ +/* eslint-disable @typescript-eslint/no-explicit-any */ import {TestBed} from '@angular/core/testing'; import {Storage} from '@ionic/storage-angular'; import {StorageModule} from './storage.module'; @@ -29,8 +28,8 @@ describe('StorageProvider', () => { imports: [StorageModule], providers: [StorageProvider], }); - storageProvider = TestBed.get(StorageProvider); - storage = TestBed.get(Storage); + storageProvider = TestBed.inject(StorageProvider); + storage = TestBed.inject(Storage); sampleEntries = new Map([ ['foo', 'Bar'], @@ -51,7 +50,7 @@ describe('StorageProvider', () => { }); it('should call ready method of storage on init', async () => { - // @ts-ignore + // @ts-expect-error no need to return storage for this case spyOn(storage, 'create').and.callFake(() => Promise.resolve()); await storageProvider.init(); @@ -107,7 +106,7 @@ describe('StorageProvider', () => { }); it('should put multiple values into the storage', async () => { - // @ts-ignore + // @ts-expect-error no need to return anything for this case spyOn(storageProvider, 'put').and.callFake(() => Promise.resolve()); await storageProvider.putMultiple(sampleEntries);