From f7726378f443d9809a6174411d25a811e1d0b5e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thea=20Sch=C3=B6bl?= Date: Fri, 4 Nov 2022 10:49:12 +0000 Subject: [PATCH] fix: prevent multiple heavy setting inits --- cypress/integration/canteen.spec.ts | 37 ++++++++++++------- cypress/integration/dashboard.spec.ts | 4 +- cypress/integration/settings.spec.ts | 22 ++++++----- cypress/support/index.ts | 5 ++- package-lock.json | 6 +-- package.json | 2 +- src/app/modules/settings/settings.provider.ts | 8 +++- 7 files changed, 53 insertions(+), 31 deletions(-) diff --git a/cypress/integration/canteen.spec.ts b/cypress/integration/canteen.spec.ts index a9e73a91..34de8c78 100644 --- a/cypress/integration/canteen.spec.ts +++ b/cypress/integration/canteen.spec.ts @@ -1,16 +1,16 @@ /* * Copyright (C) 2022 StApps - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, version 3. + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, version 3. * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . */ describe('canteen', function () { @@ -27,14 +27,17 @@ describe('canteen', function () { ); }); - it('should have a the default price', function () { + it('should not utilize the default price', function () { cy.visit('/data-detail/86464b64-da1e-5578-a5c4-eec23457f596'); - cy.contains('4,40 €').should('exist'); + cy.contains('4,40 €').should('not.exist'); }); it('should have a student price', function () { cy.visit('/settings'); - cy.contains('stapps-settings-item', 'Gruppe').find('ion-select').click(); + cy.contains('stapps-settings-item', 'Gruppe') + .find('ion-select') + .should('be.visible') + .click(); cy.get('ion-popover').contains('ion-item', 'Studierende').click(); cy.wait(2000); cy.visit('/data-detail/86464b64-da1e-5578-a5c4-eec23457f596'); @@ -43,7 +46,10 @@ describe('canteen', function () { it('should have an employee price', function () { cy.visit('/settings'); - cy.contains('stapps-settings-item', 'Gruppe').find('ion-select').click(); + cy.contains('stapps-settings-item', 'Gruppe') + .find('ion-select') + .should('be.visible') + .click(); cy.get('ion-popover').contains('ion-item', 'Angestellte').click(); cy.wait(2000); cy.visit('/data-detail/86464b64-da1e-5578-a5c4-eec23457f596'); @@ -52,7 +58,10 @@ describe('canteen', function () { it('should have a guest price', function () { cy.visit('/settings'); - cy.contains('stapps-settings-item', 'Gruppe').find('ion-select').click(); + cy.contains('stapps-settings-item', 'Gruppe') + .find('ion-select') + .should('be.visible') + .click(); cy.get('ion-popover').contains('ion-item', 'Gäste').click(); cy.wait(2000); cy.visit('/data-detail/86464b64-da1e-5578-a5c4-eec23457f596'); diff --git a/cypress/integration/dashboard.spec.ts b/cypress/integration/dashboard.spec.ts index 8ecb9c98..0faa9f21 100644 --- a/cypress/integration/dashboard.spec.ts +++ b/cypress/integration/dashboard.spec.ts @@ -184,7 +184,9 @@ describe('dashboard', async function () { it('should go to search when clicking the icon', function () { cy.visit('/overview'); - cy.get('stapps-search-section').find('ion-icon[name=search]').click(); + cy.get('stapps-search-section') + .find('ion-icon[name=search]') + .click({force: true}); cy.url().should('eq', Cypress.config().baseUrl + '/search?query='); cy.get('ion-searchbar').should('not.have.value'); diff --git a/cypress/integration/settings.spec.ts b/cypress/integration/settings.spec.ts index 5aa343b2..ce16b508 100644 --- a/cypress/integration/settings.spec.ts +++ b/cypress/integration/settings.spec.ts @@ -1,16 +1,16 @@ /* * Copyright (C) 2022 StApps - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the Free - * Software Foundation, version 3. + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation, version 3. * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see . + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . */ describe('Settings Page', () => { it('should have a proper title', () => { @@ -21,7 +21,9 @@ describe('Settings Page', () => { it('should change language', () => { cy.visit('/settings'); - cy.contains('ion-select', 'Deutsch').click(); + cy.contains('ion-select', 'Deutsch') + .should('be.visible') + .click({force: true}); cy.get('ion-popover').contains('ion-item', 'English').click(); cy.get('ion-popover').should('not.exist'); cy.get('ion-title').contains('Settings'); diff --git a/cypress/support/index.ts b/cypress/support/index.ts index 5cb1b9f0..10ff9509 100644 --- a/cypress/support/index.ts +++ b/cypress/support/index.ts @@ -45,7 +45,10 @@ beforeEach(async function () { for (const database of databases) { if (database) { console.log(`Deleting database ${database}`); - window.indexedDB.deleteDatabase(database); + await new Promise( + resolve => + (window.indexedDB.deleteDatabase(database).onsuccess = resolve), + ); console.log(`Deleted database ${database}`); } } diff --git a/package-lock.json b/package-lock.json index 79d0a585..9c1cdc28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7414,9 +7414,9 @@ "dev": true }, "cypress": { - "version": "10.9.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.9.0.tgz", - "integrity": "sha512-MjIWrRpc+bQM9U4kSSdATZWZ2hUqHGFEQTF7dfeZRa4MnalMtc88FIE49USWP2ZVtfy5WPBcgfBX+YorFqGElA==", + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.11.0.tgz", + "integrity": "sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==", "dev": true, "requires": { "@cypress/request": "^2.88.10", diff --git a/package.json b/package.json index 75770ca2..7c558d6d 100644 --- a/package.json +++ b/package.json @@ -141,7 +141,7 @@ "@typescript-eslint/parser": "5.35.1", "conventional-changelog-cli": "2.2.2", "cordova-res": "0.15.4", - "cypress": "10.9.0", + "cypress": "10.11.0", "eslint": "8.24.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-jsdoc": "39.3.6", diff --git a/src/app/modules/settings/settings.provider.ts b/src/app/modules/settings/settings.provider.ts index 7769483f..ee6a75c6 100644 --- a/src/app/modules/settings/settings.provider.ts +++ b/src/app/modules/settings/settings.provider.ts @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019, 2020 StApps + * Copyright (C) 2022 StApps * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation, version 3. @@ -96,6 +96,8 @@ export class SettingsProvider { */ private settingsActionSource = new Subject(); + private needsInit = true; + /** * Order of the setting categories */ @@ -332,6 +334,9 @@ export class SettingsProvider { * Initializes settings from config and stored values if exist */ public async init(): Promise { + if (!this.needsInit) return; + this.needsInit = false; + try { const settings: SCSetting[] = this.configProvider.getValue( 'settings', @@ -390,6 +395,7 @@ export class SettingsProvider { */ public async reset(): Promise { await this.storage.put(STORAGE_KEY_SETTING_VALUES, {}); + this.needsInit = true; await this.init(); }