test: fix app unit tests

This commit is contained in:
2023-07-05 12:56:15 +02:00
parent 16a039a16e
commit 107a7c5e9e
13 changed files with 102 additions and 78 deletions

View File

@@ -0,0 +1,6 @@
---
'@openstapps/app': patch
---
Migrate unit tests to karma-coverage and junit reports.
Fixes an issue where coverage reports would not be generated.

View File

@@ -95,6 +95,7 @@ stop review:
rules: *deploy-rules
unit:
image: registry.gitlab.com/openstapps/app:v18
stage: test
needs: ['build']
script:

View File

@@ -24,19 +24,26 @@ module.exports = function (config) {
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-coverage-istanbul-reporter'),
require('karma-coverage'),
require('@angular-devkit/build-angular/plugins/karma'),
require('karma-mocha-reporter'),
require('karma-junit-reporter'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, './coverage'),
reports: ['html', 'lcovonly', 'text-summary', 'cobertura'],
coverageReporter: {
dir: 'coverage/',
reporters: [{type: 'cobertura', subdir: '.'}],
// reports: ['html', 'lcovonly', 'text-summary', 'cobertura'],
fixWebpackSourcePaths: true,
},
reporters: config.buildWebpack.options.codeCoverage ? ['mocha', 'coverage-istanbul'] : ['mocha'],
junitReporter: {
outputDir: 'coverage/',
outputFile: 'report-junit.xml',
useBrowserName: false,
},
reporters: ['mocha', 'junit', 'coverage'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,

View File

@@ -47,7 +47,7 @@
"start": "ionic serve",
"start:external": "ionic serve --external",
"start:prod": "ionic serve --prod",
"test": "ng test",
"test": "ng test --watch=false --code-coverage",
"test:integration": "sh integration-test.sh"
},
"dependencies": {
@@ -121,6 +121,7 @@
"@angular/compiler": "13.4.0",
"@angular/compiler-cli": "13.4.0",
"@angular/language-service": "13.4.0",
"@angular/platform-browser-dynamic": "13.3.11",
"@capacitor/android": "4.6.1",
"@capacitor/cli": "4.6.1",
"@capacitor/ios": "4.6.1",
@@ -157,10 +158,10 @@
"junit-report-merger": "6.0.2",
"karma": "6.4.1",
"karma-chrome-launcher": "3.1.1",
"karma-coverage-istanbul-reporter": "3.0.3",
"karma-jasmine": "5.1.0",
"karma-jasmine-html-reporter": "2.0.0",
"karma-junit-reporter": "2.0.1",
"karma-coverage": "2.2.1",
"karma-mocha-reporter": "2.2.5",
"karma-jasmine": "5.1.0",
"license-checker": "25.0.1",
"protractor": "7.0.0",
"surge": "0.23.1",

View File

@@ -22,7 +22,7 @@ import {
SCThingType,
} from '@openstapps/core';
import {Polygon} from 'geojson';
import packageJson from '../../../../package.json';
import {environment} from '../../../environments/environment';
// provides sample aggregations to be used in tests or backendless development
export const sampleAggregations: SCBackendAggregationConfiguration[] = [
@@ -108,8 +108,6 @@ export const sampleDefaultPolygon: Polygon = {
type: 'Polygon',
};
const scVersion = packageJson.dependencies['@openstapps/core'];
export const sampleIndexResponse: SCIndexResponse = {
app: {
aboutPages: {
@@ -197,7 +195,7 @@ export const sampleIndexResponse: SCIndexResponse = {
},
auth: {},
backend: {
SCVersion: scVersion,
SCVersion: environment.sc_version,
externalRequestTimeout: 5000,
hiddenTypes: [SCThingType.DateSeries, SCThingType.Diff, SCThingType.Floor],
mappingIgnoredTags: [],

View File

@@ -21,10 +21,10 @@ import {Browser} from 'ionic-appauth';
import {Requestor, StorageBackend} from '@openid/appauth';
import {TranslateService} from '@ngx-translate/core';
import {PAIAAuthService} from './paia/paia-auth.service';
import {LoggerConfig, LoggerModule, NGXLogger} from 'ngx-logger';
import {StAppsWebHttpClient} from '../data/stapps-web-http-client.provider';
import {HttpClientModule} from '@angular/common/http';
import {SimpleBrowser} from '../../util/browser.factory';
import {LoggerTestingModule} from 'ngx-logger/testing';
describe('AuthHelperService', () => {
let authHelperService: AuthHelperService;
@@ -54,11 +54,9 @@ describe('AuthHelperService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientModule, LoggerModule],
imports: [HttpClientModule, LoggerTestingModule],
providers: [
NGXLogger,
StAppsWebHttpClient,
LoggerConfig,
{
provide: TranslateService,
useValue: translateServiceSpy,

View File

@@ -19,11 +19,11 @@ import {DefaultAuthService} from './default-auth.service';
import {Browser} from 'ionic-appauth';
import {nowInSeconds, Requestor, StorageBackend} from '@openid/appauth';
import {TranslateService} from '@ngx-translate/core';
import {LoggerConfig, LoggerModule, NGXLogger, NgxLoggerLevel} from 'ngx-logger';
import {StAppsWebHttpClient} from '../data/stapps-web-http-client.provider';
import {HttpClientModule} from '@angular/common/http';
import {IonicStorage} from 'ionic-appauth/lib';
import {RouterModule} from '@angular/router';
import {LoggerTestingModule} from 'ngx-logger/testing';
describe('AuthService', () => {
let defaultAuthService: DefaultAuthService;
@@ -35,15 +35,9 @@ describe('AuthService', () => {
storageBackendSpy = jasmine.createSpyObj('StorageBackend', ['getItem']);
TestBed.configureTestingModule({
imports: [
HttpClientModule,
LoggerModule.forRoot({level: NgxLoggerLevel.TRACE}),
RouterModule.forRoot([]),
],
imports: [HttpClientModule, LoggerTestingModule, RouterModule.forRoot([])],
providers: [
NGXLogger,
StAppsWebHttpClient,
LoggerConfig,
{
provide: TranslateService,
useValue: translateServiceSpy,

View File

@@ -25,8 +25,8 @@ import {DaiaAvailabilityComponent} from './daia-availability.component';
import {Observable, of} from 'rxjs';
import {StorageProvider} from '../../storage/storage.provider';
import {DaiaDataProvider} from '../daia-data.provider';
import {LoggerConfig, LoggerModule, NGXLogger} from 'ngx-logger';
import {ConfigProvider} from '../../config/config.provider';
import {LoggerTestingModule} from 'ngx-logger/testing';
const translations: any = {data: {detail: {TITLE: 'Foo'}}};
@@ -71,7 +71,7 @@ describe('DaiaAvailabilityComponent', () => {
TranslateModule.forRoot({
loader: {provide: TranslateLoader, useClass: TranslateFakeLoader},
}),
LoggerModule,
LoggerTestingModule,
],
providers: [
{
@@ -86,8 +86,6 @@ describe('DaiaAvailabilityComponent', () => {
provide: ConfigProvider,
useValue: configProviderMock,
},
NGXLogger,
LoggerConfig,
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents();

View File

@@ -19,7 +19,7 @@ import {HebisModule} from './hebis.module';
import {ConfigProvider} from '../config/config.provider';
import {StAppsWebHttpClient} from '../data/stapps-web-http-client.provider';
import {StorageProvider} from '../storage/storage.provider';
import {LoggerConfig, LoggerModule, NGXLogger} from 'ngx-logger';
import {LoggerTestingModule} from 'ngx-logger/testing';
import {MapModule} from '../map/map.module';
import {HttpClientModule} from '@angular/common/http';
import {StorageModule} from '../storage/storage.module';
@@ -49,7 +49,7 @@ describe('DaiaDataProvider', () => {
MapModule,
HttpClientModule,
StorageModule,
LoggerModule,
LoggerTestingModule,
TranslateModule.forRoot({
loader: {provide: TranslateLoader, useClass: TranslateFakeLoader},
}),
@@ -61,8 +61,6 @@ describe('DaiaDataProvider', () => {
},
StAppsWebHttpClient,
StorageProvider,
NGXLogger,
LoggerConfig,
DaiaDataProvider,
],
});

View File

@@ -18,7 +18,7 @@ import {HttpClientModule} from '@angular/common/http';
import {StorageModule} from '../storage/storage.module';
import {MapPosition, PositionService} from './position.service';
import {ConfigProvider} from '../config/config.provider';
import {LoggerConfig, LoggerModule, NGXLogger, NGXMapperService} from 'ngx-logger';
import {LoggerTestingModule} from 'ngx-logger/testing';
describe('PositionService', () => {
let positionService: PositionService;
@@ -37,11 +37,8 @@ describe('PositionService', () => {
},
});
TestBed.configureTestingModule({
imports: [MapModule, HttpClientModule, StorageModule, LoggerModule],
imports: [MapModule, HttpClientModule, StorageModule, LoggerTestingModule],
providers: [
LoggerConfig,
NGXLogger,
NGXMapperService,
{
provider: ConfigProvider,
useValue: configProviderMock,

View File

@@ -15,14 +15,25 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/testing';
import {getTestBed} from '@angular/core/testing';
import {BrowserTestingModule, platformBrowserTesting} from '@angular/platform-browser/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting,
} from '@angular/platform-browser-dynamic/testing';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
declare const __karma__: any;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
declare const require: any;
// prevent Karma from runnint prematurely
// eslint-disable-next-line @typescript-eslint/no-empty-function
__karma__.loaded = function () {};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserTestingModule, platformBrowserTesting());
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);
__karma__.start();

View File

@@ -20,7 +20,7 @@
"publish-packages": "pnpm changeset version && pnpm syncpack:fix && pnpm install && git add . && git commit -m \"refactor: update changelog\n\nci: publish release\" && git push && pnpm changeset tag && git push --follow-tags",
"syncpack": "syncpack list-mismatches && syncpack lint-semver-ranges --types dev,peer,prod",
"syncpack:fix": "syncpack format && syncpack fix-mismatches",
"test": "trap 'node coverage.mjs' EXIT && dotenv -c -- turbo run test --filter=!@openstapps/app",
"test": "trap 'node coverage.mjs' EXIT && dotenv -c -- turbo run test",
"test:integration": "dotenv -c -- turbo run test:integration",
"test:integration:app": "dotenv -c -- turbo run test:integration --filter=@openstapps/app",
"test:integration:backend": "dotenv -c -- turbo run test:integration --filter=@openstapps/backend",

89
pnpm-lock.yaml generated
View File

@@ -396,8 +396,6 @@ importers:
specifier: 2.8.6
version: 2.8.6
configuration/builder-image: {}
configuration/eslint-config:
dependencies:
'@typescript-eslint/eslint-plugin':
@@ -924,6 +922,9 @@ importers:
'@angular/language-service':
specifier: 13.4.0
version: 13.4.0
'@angular/platform-browser-dynamic':
specifier: 13.3.11
version: 13.3.11(@angular/common@13.4.0)(@angular/compiler@13.4.0)(@angular/core@13.4.0)(@angular/platform-browser@13.4.0)
'@capacitor/android':
specifier: 4.6.1
version: 4.6.1(@capacitor/core@4.6.1)
@@ -1032,15 +1033,15 @@ importers:
karma-chrome-launcher:
specifier: 3.1.1
version: 3.1.1
karma-coverage-istanbul-reporter:
specifier: 3.0.3
version: 3.0.3
karma-coverage:
specifier: 2.2.1
version: 2.2.1
karma-jasmine:
specifier: 5.1.0
version: 5.1.0(karma@6.4.1)
karma-jasmine-html-reporter:
specifier: 2.0.0
version: 2.0.0(jasmine-core@4.5.0)(karma-jasmine@5.1.0)(karma@6.4.1)
karma-junit-reporter:
specifier: 2.0.1
version: 2.0.1(karma@6.4.1)
karma-mocha-reporter:
specifier: 2.2.5
version: 2.2.5(karma@6.4.1)
@@ -2390,7 +2391,6 @@ packages:
dependencies:
'@angular/core': 13.4.0(rxjs@7.8.0)(zone.js@0.12.0)
tslib: 2.4.1
dev: false
/@angular/cdk@13.3.9(@angular/common@13.4.0)(@angular/core@13.4.0)(rxjs@7.8.0):
resolution: {integrity: sha512-XCuCbeuxWFyo3EYrgEYx7eHzwl76vaWcxtWXl00ka8d+WAOtMQ6Tf1D98ybYT5uwF9889fFpXAPw98mVnlo3MA==}
@@ -2448,7 +2448,6 @@ packages:
'@angular/core': 13.4.0(rxjs@7.8.0)(zone.js@0.12.0)
rxjs: 7.8.0
tslib: 2.4.1
dev: false
/@angular/compiler-cli@13.4.0(@angular/compiler@13.4.0)(typescript@4.6.4):
resolution: {integrity: sha512-OQD0w9aZXbpcyWDEaozoHH/n3eYDLhBsmJcIBVqUN8Awx8m17v2u2R6m7DIEpVRbBzYtTscAMTKONNVwsTolHA==}
@@ -2513,6 +2512,22 @@ packages:
engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0}
dev: true
/@angular/platform-browser-dynamic@13.3.11(@angular/common@13.4.0)(@angular/compiler@13.4.0)(@angular/core@13.4.0)(@angular/platform-browser@13.4.0):
resolution: {integrity: sha512-xM0VRC1Nw//SHO3gkghUHyjCaaQbk1UYMq4vIu3iKVq9KLqOSZgccv0NcOKHzXXN3S5RgX2auuyOUOCD6ny1Pg==}
engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0}
peerDependencies:
'@angular/common': 13.3.11
'@angular/compiler': 13.3.11
'@angular/core': 13.3.11
'@angular/platform-browser': 13.3.11
dependencies:
'@angular/common': 13.4.0(@angular/core@13.4.0)(rxjs@7.8.0)
'@angular/compiler': 13.4.0
'@angular/core': 13.4.0(rxjs@7.8.0)(zone.js@0.12.0)
'@angular/platform-browser': 13.4.0(@angular/animations@13.4.0)(@angular/common@13.4.0)(@angular/core@13.4.0)
tslib: 2.4.1
dev: true
/@angular/platform-browser@13.4.0(@angular/animations@13.4.0)(@angular/common@13.4.0)(@angular/core@13.4.0):
resolution: {integrity: sha512-kq4TpdkSS0Z/7ToFzWhyBbh4Ai1uOKFVdL9/TAm19dLnYNIInrN3KYW6GRxZ+pkJJA9Vkq4NtgcxysQ42VFotA==}
engines: {node: ^12.20.0 || ^14.15.0 || >=16.10.0}
@@ -2528,7 +2543,6 @@ packages:
'@angular/common': 13.4.0(@angular/core@13.4.0)(rxjs@7.8.0)
'@angular/core': 13.4.0(rxjs@7.8.0)(zone.js@0.12.0)
tslib: 2.4.1
dev: false
/@angular/router@13.4.0(@angular/common@13.4.0)(@angular/core@13.4.0)(@angular/platform-browser@13.4.0)(rxjs@7.8.0):
resolution: {integrity: sha512-YlPAf3tPqD04rAMPAwW+XqFQaBXT9fY2Mh7J/9MXeyLZau59afBIcVNbeQxW5RxDajmfyFy437Qh22qFP2l0Hw==}
@@ -12854,11 +12868,6 @@ packages:
resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
dev: true
/istanbul-lib-coverage@2.0.5:
resolution: {integrity: sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==}
engines: {node: '>=6'}
dev: true
/istanbul-lib-coverage@3.2.0:
resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==}
engines: {node: '>=8'}
@@ -12886,14 +12895,12 @@ packages:
supports-color: 7.2.0
dev: true
/istanbul-lib-source-maps@3.0.6:
resolution: {integrity: sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==}
engines: {node: '>=6'}
/istanbul-lib-source-maps@4.0.1:
resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==}
engines: {node: '>=10'}
dependencies:
debug: 4.3.4(supports-color@8.1.1)
istanbul-lib-coverage: 2.0.5
make-dir: 2.1.0
rimraf: 2.7.1
istanbul-lib-coverage: 3.2.0
source-map: 0.6.1
transitivePeerDependencies:
- supports-color
@@ -13171,30 +13178,20 @@ packages:
which: 1.3.1
dev: true
/karma-coverage-istanbul-reporter@3.0.3:
resolution: {integrity: sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==}
/karma-coverage@2.2.1:
resolution: {integrity: sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==}
engines: {node: '>=10.0.0'}
dependencies:
istanbul-lib-coverage: 3.2.0
istanbul-lib-instrument: 5.2.1
istanbul-lib-report: 3.0.0
istanbul-lib-source-maps: 3.0.6
istanbul-lib-source-maps: 4.0.1
istanbul-reports: 3.1.5
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
dev: true
/karma-jasmine-html-reporter@2.0.0(jasmine-core@4.5.0)(karma-jasmine@5.1.0)(karma@6.4.1):
resolution: {integrity: sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==}
peerDependencies:
jasmine-core: ^4.0.0
karma: ^6.0.0
karma-jasmine: ^5.0.0
dependencies:
jasmine-core: 4.5.0
karma: 6.4.1
karma-jasmine: 5.1.0(karma@6.4.1)
dev: true
/karma-jasmine@5.1.0(karma@6.4.1):
resolution: {integrity: sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==}
engines: {node: '>=12'}
@@ -13205,6 +13202,17 @@ packages:
karma: 6.4.1
dev: true
/karma-junit-reporter@2.0.1(karma@6.4.1):
resolution: {integrity: sha512-VtcGfE0JE4OE1wn0LK8xxDKaTP7slN8DO3I+4xg6gAi1IoAHAXOJ1V9G/y45Xg6sxdxPOR3THCFtDlAfBo9Afw==}
engines: {node: '>= 8'}
peerDependencies:
karma: '>=0.9'
dependencies:
karma: 6.4.1
path-is-absolute: 1.0.1
xmlbuilder: 12.0.0
dev: true
/karma-mocha-reporter@2.2.5(karma@6.4.1):
resolution: {integrity: sha512-Hr6nhkIp0GIJJrvzY8JFeHpQZNseuIakGac4bpw8K1+5F0tLb6l7uvXRa8mt2Z+NVwYgCct4QAfp2R2QP6o00w==}
peerDependencies:
@@ -13725,10 +13733,12 @@ packages:
/make-dir@2.1.0:
resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
engines: {node: '>=6'}
requiresBuild: true
dependencies:
pify: 4.0.1
semver: 5.7.1
dev: true
optional: true
/make-dir@3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
@@ -18958,6 +18968,11 @@ packages:
engines: {node: '>=4.0'}
dev: true
/xmlbuilder@12.0.0:
resolution: {integrity: sha512-lMo8DJ8u6JRWp0/Y4XLa/atVDr75H9litKlb2E5j3V3MesoL50EBgZDWoLT3F/LztVnG67GjPXLZpqcky/UMnQ==}
engines: {node: '>=6.0'}
dev: true
/xmlbuilder@15.1.1:
resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==}
engines: {node: '>=8.0'}