mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-20 16:42:56 +00:00
build: upgrade to angular v12
This commit is contained in:
@@ -30,7 +30,7 @@ import {
|
||||
} from '@openstapps/core';
|
||||
import {Observable, of} from 'rxjs';
|
||||
import {delay, map} from 'rxjs/operators';
|
||||
import {dependencies} from '../../../package.json';
|
||||
import packageJson from '../../../package.json';
|
||||
import {facetsMock} from './data/sample-facets';
|
||||
import {SampleThings} from './data/sample-things';
|
||||
|
||||
@@ -244,7 +244,7 @@ export const sampleIndexResponse: SCIndexResponse = {
|
||||
],
|
||||
},
|
||||
backend: {
|
||||
SCVersion: dependencies['@openstapps/core'],
|
||||
SCVersion: packageJson.dependencies['@openstapps/core'],
|
||||
externalRequestTimeout: 5000,
|
||||
hiddenTypes: [
|
||||
SCThingType.DateSeries,
|
||||
|
||||
@@ -22,6 +22,6 @@ const routes: Routes = [{path: '', redirectTo: '/news', pathMatch: 'full'}];
|
||||
*/
|
||||
@NgModule({
|
||||
exports: [RouterModule],
|
||||
imports: [RouterModule.forRoot(routes)],
|
||||
imports: [RouterModule.forRoot(routes, {relativeLinkResolution: 'legacy'})],
|
||||
})
|
||||
export class AppRoutingModule {}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
|
||||
import {async, TestBed} from '@angular/core/testing';
|
||||
import {TestBed, waitForAsync} from '@angular/core/testing';
|
||||
|
||||
import {SplashScreen} from '@ionic-native/splash-screen/ngx';
|
||||
import {StatusBar} from '@ionic-native/status-bar/ngx';
|
||||
@@ -38,41 +38,43 @@ describe('AppComponent', () => {
|
||||
let configProvider: jasmine.SpyObj<ConfigProvider>;
|
||||
let ngxLogger: jasmine.SpyObj<NGXLogger>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']);
|
||||
splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']);
|
||||
platformReadySpy = Promise.resolve();
|
||||
platformSpy = jasmine.createSpyObj('Platform', {ready: platformReadySpy});
|
||||
translateServiceSpy = jasmine.createSpyObj('TranslateService', [
|
||||
'setDefaultLang',
|
||||
'use',
|
||||
]);
|
||||
thingTranslateServiceSpy = jasmine.createSpyObj('ThingTranslateService', [
|
||||
'init',
|
||||
]);
|
||||
settingsProvider = jasmine.createSpyObj('SettingsProvider', [
|
||||
'getSettingValue',
|
||||
'provideSetting',
|
||||
'setCategoriesOrder',
|
||||
]);
|
||||
configProvider = jasmine.createSpyObj('ConfigProvider', ['init']);
|
||||
ngxLogger = jasmine.createSpyObj('NGXLogger', ['log', 'error', 'warn']);
|
||||
beforeEach(
|
||||
waitForAsync(() => {
|
||||
statusBarSpy = jasmine.createSpyObj('StatusBar', ['styleDefault']);
|
||||
splashScreenSpy = jasmine.createSpyObj('SplashScreen', ['hide']);
|
||||
platformReadySpy = Promise.resolve();
|
||||
platformSpy = jasmine.createSpyObj('Platform', {ready: platformReadySpy});
|
||||
translateServiceSpy = jasmine.createSpyObj('TranslateService', [
|
||||
'setDefaultLang',
|
||||
'use',
|
||||
]);
|
||||
thingTranslateServiceSpy = jasmine.createSpyObj('ThingTranslateService', [
|
||||
'init',
|
||||
]);
|
||||
settingsProvider = jasmine.createSpyObj('SettingsProvider', [
|
||||
'getSettingValue',
|
||||
'provideSetting',
|
||||
'setCategoriesOrder',
|
||||
]);
|
||||
configProvider = jasmine.createSpyObj('ConfigProvider', ['init']);
|
||||
ngxLogger = jasmine.createSpyObj('NGXLogger', ['log', 'error', 'warn']);
|
||||
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [AppComponent],
|
||||
providers: [
|
||||
{provide: StatusBar, useValue: statusBarSpy},
|
||||
{provide: SplashScreen, useValue: splashScreenSpy},
|
||||
{provide: Platform, useValue: platformSpy},
|
||||
{provide: TranslateService, useValue: translateServiceSpy},
|
||||
{provide: ThingTranslateService, useValue: thingTranslateServiceSpy},
|
||||
{provide: SettingsProvider, useValue: settingsProvider},
|
||||
{provide: ConfigProvider, useValue: configProvider},
|
||||
{provide: NGXLogger, useValue: ngxLogger},
|
||||
],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
}).compileComponents();
|
||||
}));
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [AppComponent],
|
||||
providers: [
|
||||
{provide: StatusBar, useValue: statusBarSpy},
|
||||
{provide: SplashScreen, useValue: splashScreenSpy},
|
||||
{provide: Platform, useValue: platformSpy},
|
||||
{provide: TranslateService, useValue: translateServiceSpy},
|
||||
{provide: ThingTranslateService, useValue: thingTranslateServiceSpy},
|
||||
{provide: SettingsProvider, useValue: settingsProvider},
|
||||
{provide: ConfigProvider, useValue: configProvider},
|
||||
{provide: NGXLogger, useValue: ngxLogger},
|
||||
],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
}).compileComponents();
|
||||
}),
|
||||
);
|
||||
|
||||
it('should create the app', () => {
|
||||
const fixture = TestBed.createComponent(AppComponent);
|
||||
|
||||
@@ -29,7 +29,7 @@ import {
|
||||
WrongConfigVersionInStorage,
|
||||
} from './errors';
|
||||
import {NGXLogger} from 'ngx-logger';
|
||||
import {dependencies} from '../../../../package.json';
|
||||
import packageJson from '../../../../package.json';
|
||||
|
||||
describe('ConfigProvider', () => {
|
||||
let configProvider: ConfigProvider;
|
||||
@@ -216,7 +216,7 @@ describe('ConfigProvider', () => {
|
||||
});
|
||||
});
|
||||
|
||||
const scVersion = dependencies['@openstapps/core'];
|
||||
const scVersion = packageJson.dependencies['@openstapps/core'];
|
||||
|
||||
const sampleIndexResponse: SCIndexResponse = {
|
||||
app: {
|
||||
|
||||
@@ -16,7 +16,7 @@ import {Injectable} from '@angular/core';
|
||||
import {Client} from '@openstapps/api/lib/client';
|
||||
import {SCAppConfiguration, SCIndexResponse} from '@openstapps/core';
|
||||
import {NGXLogger} from 'ngx-logger';
|
||||
import {dependencies} from '../../../../package.json';
|
||||
import packageJson from '../../../../package.json';
|
||||
import {environment} from '../../../environments/environment';
|
||||
import {StAppsWebHttpClient} from '../data/stapps-web-http-client.provider';
|
||||
import {StorageProvider} from '../storage/storage.provider';
|
||||
@@ -63,7 +63,7 @@ export class ConfigProvider {
|
||||
/**
|
||||
* Version of the @openstapps/core package that app is using
|
||||
*/
|
||||
scVersion = dependencies['@openstapps/core'];
|
||||
scVersion = packageJson.dependencies['@openstapps/core'];
|
||||
|
||||
/**
|
||||
* Constructor, initialise api client
|
||||
|
||||
@@ -87,7 +87,6 @@ describe('DataProvider', () => {
|
||||
});
|
||||
storageProvider = TestBed.get(StorageProvider);
|
||||
dataProvider = TestBed.get(DataProvider);
|
||||
await storageProvider.deleteAll();
|
||||
});
|
||||
|
||||
it('should generate data key', async () => {
|
||||
@@ -165,6 +164,7 @@ describe('DataProvider', () => {
|
||||
);
|
||||
const response = await dataProvider.multiSearch(request);
|
||||
|
||||
// @ts-ignore
|
||||
expect(response).toEqual(responseShould);
|
||||
});
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import {CUSTOM_ELEMENTS_SCHEMA, DebugElement} from '@angular/core';
|
||||
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
||||
import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing';
|
||||
import {ActivatedRoute, RouterModule} from '@angular/router';
|
||||
import {IonRefresher, IonTitle} from '@ionic/angular';
|
||||
import {
|
||||
@@ -29,6 +29,7 @@ import {DataProvider} from '../data.provider';
|
||||
import {DataDetailComponent} from './data-detail.component';
|
||||
import {By} from '@angular/platform-browser';
|
||||
import {Observable, of} from 'rxjs';
|
||||
import {StorageProvider} from '../../storage/storage.provider';
|
||||
|
||||
const translations: any = {data: {detail: {TITLE: 'Foo'}}};
|
||||
|
||||
@@ -62,20 +63,39 @@ describe('DataDetailComponent', () => {
|
||||
},
|
||||
};
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
RouterModule.forRoot([]),
|
||||
DataRoutingModule,
|
||||
DataModule,
|
||||
TranslateModule.forRoot({
|
||||
loader: {provide: TranslateLoader, useClass: TranslateFakeLoader},
|
||||
}),
|
||||
],
|
||||
providers: [{provide: ActivatedRoute, useValue: fakeActivatedRoute}],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
}).compileComponents();
|
||||
}));
|
||||
const storageProviderSpy = jasmine.createSpyObj('StorageProvider', [
|
||||
'init',
|
||||
'get',
|
||||
'has',
|
||||
'put',
|
||||
'search',
|
||||
]);
|
||||
|
||||
beforeEach(
|
||||
waitForAsync(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [
|
||||
RouterModule.forRoot([], {relativeLinkResolution: 'legacy'}),
|
||||
DataRoutingModule,
|
||||
DataModule,
|
||||
TranslateModule.forRoot({
|
||||
loader: {provide: TranslateLoader, useClass: TranslateFakeLoader},
|
||||
}),
|
||||
],
|
||||
providers: [
|
||||
{
|
||||
provide: ActivatedRoute,
|
||||
useValue: fakeActivatedRoute,
|
||||
},
|
||||
{
|
||||
provide: StorageProvider,
|
||||
useValue: storageProviderSpy,
|
||||
},
|
||||
],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
}).compileComponents();
|
||||
}),
|
||||
);
|
||||
|
||||
beforeEach(async () => {
|
||||
dataProvider = TestBed.get(DataProvider);
|
||||
@@ -90,15 +110,12 @@ describe('DataDetailComponent', () => {
|
||||
detailPage = fixture.debugElement;
|
||||
translateService.use('foo');
|
||||
fixture.detectChanges();
|
||||
await dataProvider.deleteAll();
|
||||
});
|
||||
|
||||
it('should create component', () => expect(comp).toBeDefined());
|
||||
|
||||
it('should have appropriate title', async () => {
|
||||
const title: DebugElement | null = detailPage.query(By.directive(IonTitle));
|
||||
// eslint-disable-next-line unicorn/no-null
|
||||
expect(title).not.toBe(null);
|
||||
const title: DebugElement = detailPage.query(By.directive(IonTitle));
|
||||
expect(title!.nativeElement.textContent).toBe('Foo');
|
||||
});
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
||||
import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing';
|
||||
|
||||
import {DataListComponent} from './data-list.component';
|
||||
import {TranslateModule} from '@ngx-translate/core';
|
||||
@@ -10,17 +10,19 @@ describe('DataListComponent', () => {
|
||||
let fixture: ComponentFixture<DataListComponent>;
|
||||
let configProviderMock: jasmine.SpyObj<ConfigProvider>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
configProviderMock = jasmine.createSpyObj('ConfigProvider', {
|
||||
getValue: () => Promise.resolve({lat: 123, lng: 123}),
|
||||
});
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [DataListComponent],
|
||||
imports: [TranslateModule.forRoot()],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
providers: [{provide: ConfigProvider, useValue: configProviderMock}],
|
||||
}).compileComponents();
|
||||
}));
|
||||
beforeEach(
|
||||
waitForAsync(() => {
|
||||
configProviderMock = jasmine.createSpyObj('ConfigProvider', {
|
||||
getValue: () => Promise.resolve({lat: 123, lng: 123}),
|
||||
});
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [DataListComponent],
|
||||
imports: [TranslateModule.forRoot()],
|
||||
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
||||
providers: [{provide: ConfigProvider, useValue: configProviderMock}],
|
||||
}).compileComponents();
|
||||
}),
|
||||
);
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(DataListComponent);
|
||||
|
||||
@@ -24,7 +24,6 @@ import {Point, Polygon} from 'geojson';
|
||||
import {divIcon, geoJSON, icon, LatLng, Map, marker, Marker} from 'leaflet';
|
||||
import {DataProvider} from '../data/data.provider';
|
||||
import {MapPosition, PositionService} from './position.service';
|
||||
import Timeout = NodeJS.Timeout;
|
||||
|
||||
/**
|
||||
* Provides methods for presenting the map
|
||||
@@ -91,7 +90,7 @@ export class MapProvider {
|
||||
static invalidateWhenRendered = (
|
||||
map: Map,
|
||||
element: ElementRef,
|
||||
interval: Timeout,
|
||||
interval: number,
|
||||
) => {
|
||||
if (element.nativeElement.offsetWidth === 0) {
|
||||
return;
|
||||
|
||||
@@ -50,7 +50,6 @@ import {
|
||||
} from '../position.service';
|
||||
import {MapListModalComponent} from './modals/map-list-modal.component';
|
||||
import {MapSingleModalComponent} from './modals/map-single-modal.component';
|
||||
import Timeout = NodeJS.Timeout;
|
||||
|
||||
/**
|
||||
* The main page of the map
|
||||
@@ -324,7 +323,7 @@ export class MapPageComponent {
|
||||
*/
|
||||
async onMapReady(map: Map) {
|
||||
this.map = map;
|
||||
const interval: Timeout = setInterval(() =>
|
||||
const interval = window.setInterval(() =>
|
||||
MapProvider.invalidateWhenRendered(map, this.mapContainer, interval),
|
||||
);
|
||||
|
||||
|
||||
@@ -16,7 +16,6 @@ import {Component, ElementRef, Input, OnInit, ViewChild} from '@angular/core';
|
||||
import {SCPlace} from '@openstapps/core';
|
||||
import {geoJSON, Map, MapOptions, tileLayer} from 'leaflet';
|
||||
import {MapProvider} from '../map.provider';
|
||||
import Timeout = NodeJS.Timeout;
|
||||
|
||||
/**
|
||||
* The map widget (needs a container with explicit size)
|
||||
@@ -77,7 +76,7 @@ export class MapWidgetComponent implements OnInit {
|
||||
*/
|
||||
onMapReady(map: Map) {
|
||||
this.map = map;
|
||||
const interval: Timeout = setInterval(() => {
|
||||
const interval = window.setInterval(() => {
|
||||
MapProvider.invalidateWhenRendered(map, this.mapContainer, interval);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ describe('ContextMenuComponent', async () => {
|
||||
TranslateModule.forRoot(),
|
||||
CommonModule,
|
||||
SettingsModule,
|
||||
RouterModule.forRoot([]),
|
||||
RouterModule.forRoot([], {relativeLinkResolution: 'legacy'}),
|
||||
],
|
||||
}).compileComponents();
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ export class ScheduleProvider implements OnDestroy {
|
||||
private _uuidSubscription?: Subscription;
|
||||
|
||||
constructor(private readonly dataProvider: DataProvider) {
|
||||
window.addEventListener('storage', this.storageEventListener.bind(this));
|
||||
window.addEventListener('storage', this.storageListener);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -87,9 +87,9 @@ export class ScheduleProvider implements OnDestroy {
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen to updates in local storage
|
||||
* What to do when local storage updates
|
||||
*/
|
||||
private storageEventListener(event: StorageEvent) {
|
||||
private storageEventHandler(event: StorageEvent) {
|
||||
if (
|
||||
event.newValue &&
|
||||
event.storageArea === localStorage &&
|
||||
@@ -99,6 +99,11 @@ export class ScheduleProvider implements OnDestroy {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen to updates in local storage
|
||||
*/
|
||||
private storageListener = this.storageEventHandler.bind(this);
|
||||
|
||||
/**
|
||||
* Load Date Series
|
||||
*/
|
||||
@@ -192,6 +197,6 @@ export class ScheduleProvider implements OnDestroy {
|
||||
*/
|
||||
ngOnDestroy(): void {
|
||||
this._uuidSubscription?.unsubscribe();
|
||||
window.removeEventListener('storage', this.storageEventListener.bind(this));
|
||||
window.removeEventListener('storage', this.storageListener);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ describe('SettingsProvider', () => {
|
||||
CONFIG_SETTINGS_MOCK[3].categories[0],
|
||||
CONFIG_SETTINGS_MOCK[3].name,
|
||||
);
|
||||
await expect(value).toEqual(SETTING_VALUES_MOCK.profile.group);
|
||||
await expect(value).toEqual(SETTING_VALUES_MOCK.profile.group as string);
|
||||
});
|
||||
|
||||
it('should set default setting value if no persisted value exist', async () => {
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
import {NgModule} from '@angular/core';
|
||||
import {IonicStorageModule} from '@ionic/storage';
|
||||
import {IonicStorageModule} from '@ionic/storage-angular';
|
||||
import {StorageProvider} from './storage.provider';
|
||||
|
||||
/**
|
||||
|
||||
@@ -48,10 +48,10 @@ describe('StorageProvider', () => {
|
||||
});
|
||||
|
||||
it('should call ready method of storage on init', () => {
|
||||
spyOn(storage, 'ready');
|
||||
spyOn(storage, 'create');
|
||||
storageProvider.init();
|
||||
|
||||
expect(storage.ready).toHaveBeenCalled();
|
||||
expect(storage.create).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should call set method of storage to put a value', () => {
|
||||
|
||||
@@ -102,8 +102,8 @@ export class StorageProvider {
|
||||
/**
|
||||
* Initializes the storage (waits until it's ready)
|
||||
*/
|
||||
async init(): Promise<any> {
|
||||
return this.storage.ready();
|
||||
async init(): Promise<void> {
|
||||
await this.storage.create();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -18,7 +18,8 @@ import {LangChangeEvent, TranslateService} from '@ngx-translate/core';
|
||||
import moment from 'moment';
|
||||
import {Subscription} from 'rxjs';
|
||||
import {logger} from '../_helpers/ts-logger';
|
||||
|
||||
// TODO: use import for opening_hours when the change is published with a new update
|
||||
// see https://github.com/opening-hours/opening_hours.js/pull/407
|
||||
// eslint-disable-next-line @typescript-eslint/no-var-requires, unicorn/prefer-module
|
||||
const ohFunction = require('opening_hours');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user