From f04e79a4d1553b1dd930e8cd3c76e239c1b2eb50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 22 Mar 2023 15:36:50 +0100 Subject: [PATCH 01/15] update jalhyd_branch to 302-structure-ajouter-une-erreur-sur-l-ennoiement refs #614 --- jalhyd_branch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jalhyd_branch b/jalhyd_branch index c8375d882..9426cd154 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -343-courbe-de-remous-rendre-facultatif-l-une-des-deux-conditions-limites-en-cote +302-structure-ajouter-une-erreur-sur-l-ennoiement -- GitLab From 73ea8cf0a45365f9540ce6b00a543bc4019f524c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 22 Mar 2023 15:35:27 +0100 Subject: [PATCH 02/15] feat: add error messages for structures with a low submergence percentage (Larinier, Rajaratnam) refs #614 --- src/locale/messages.en.json | 1 + src/locale/messages.fr.json | 1 + 2 files changed, 2 insertions(+) diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index b7b836bd0..85eed8565 100755 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -6,6 +6,7 @@ "WARNING_ORIFICE_FREE_DOWNSTREAM_ELEVATION_POSSIBLE_SUBMERSION": "Downstream elevation is higher than orifice center elevation (%submergencePerc%% submergence)", "WARNING_NOTCH_SUBMERGENCE_GREATER_THAN_07": "Notch submergence (%submergencePerc%%) is higher than recommended boundary (70%)", "WARNING_SLOT_SUBMERGENCE_NOT_BETWEEN_07_AND_09": "Slot submergence (%submergencePerc%%) is not in the recommended boundaries (70 to 90%)", + "ERROR_STRUCTURE_SUBMERGENCE_LOWER_THAN": "Slot submergence (%submergencePerc%%) is lower than %min%%", "WARNING_WEIR_SUBMERGENCE_LOWER_THAN_08": "Weir submergence factor (%submergencePerc%%) is lower than the recommended boundary (80%)", "WARNING_INFO_COUNT_SHORT": "%d info(s)", "WARNING_WARNING_COUNT_SHORT": "%d warning(s)", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 1b2892173..8d35d05b3 100755 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -6,6 +6,7 @@ "WARNING_ORIFICE_FREE_DOWNSTREAM_ELEVATION_POSSIBLE_SUBMERSION": "La cote de l'eau aval est plus élevée que la cote du centre de l'orifice (ennoiement %submergencePerc% %)", "WARNING_NOTCH_SUBMERGENCE_GREATER_THAN_07": "L'ennoiement de l'échancrure (%submergencePerc% %) est supérieur à la limite conseillée de 70 %", "WARNING_SLOT_SUBMERGENCE_NOT_BETWEEN_07_AND_09": "L'ennoiement de la fente (%submergencePerc% %) ne se situe pas entre les valeurs limites conseillées de 70 à 90 %", + "ERROR_STRUCTURE_SUBMERGENCE_LOWER_THAN": "L'ennoiement de la fente (%submergencePerc% %) est inférieur à %min% %", "WARNING_WEIR_SUBMERGENCE_LOWER_THAN_08": "L'ennoiement du seuil noyé (%submergencePerc% %) est inférieur à la limite conseillée de 80% ", "WARNING_INFO_COUNT_SHORT": "%d info(s)", "WARNING_WARNING_COUNT_SHORT": "%d avertissement(s)", -- GitLab From 2d06e14fe50bae31729f15ec9d525a0e59f6f7a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 4 Apr 2023 17:01:12 +0200 Subject: [PATCH 03/15] test(e2e): parallel structures: check submergence error refs #614 --- e2e/session/session-erreur-ennoiement-614.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/e2e/session/session-erreur-ennoiement-614.json b/e2e/session/session-erreur-ennoiement-614.json index e0a38e6b2..2c3933bd6 100644 --- a/e2e/session/session-erreur-ennoiement-614.json +++ b/e2e/session/session-erreur-ennoiement-614.json @@ -1 +1,5 @@ +<<<<<<< HEAD {"header":{"source":"jalhyd","format_version":"1.3","created":"2023-04-03T12:18:32.015Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"cTl6aT","props":{"calcType":"Cloisons","nullparams":false},"meta":{"title":"Cloisons"},"children":[{"uid":"NWllMn","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"h1","mode":"SINGLE","value":1},{"symbol":"L","mode":"SINGLE","value":0.2},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]}],"parameters":[{"symbol":"Q","mode":"CALCUL"},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"LB","mode":"SINGLE","value":10},{"symbol":"BB","mode":"SINGLE","value":1},{"symbol":"PB","mode":"SINGLE","value":1},{"symbol":"DH","mode":"SINGLE","value":0.6}]},{"uid":"bW4wZz","props":{"calcType":"ParallelStructure","nullparams":false},"meta":{"title":"Ouvrages"},"children":[{"uid":"anFpeG","props":{"calcType":"Structure","loiDebit":"WeirSubmerged","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"CdWS","mode":"SINGLE","value":0.9}]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":14.647},{"symbol":"Z1","mode":"CALCUL","value":103},{"symbol":"Z2","mode":"SINGLE","value":101.5}]}]} +======= +{"header":{"source":"jalhyd","format_version":"1.3","created":"2023-04-03T12:18:32.015Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"cTl6aT","props":{"calcType":"Cloisons","nullparams":false},"meta":{"title":"Cloisons"},"children":[{"uid":"NWllMn","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"h1","mode":"SINGLE","value":1},{"symbol":"L","mode":"SINGLE","value":0.2},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]}],"parameters":[{"symbol":"Q","mode":"CALCUL"},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"LB","mode":"SINGLE","value":10},{"symbol":"BB","mode":"SINGLE","value":1},{"symbol":"PB","mode":"SINGLE","value":1},{"symbol":"DH","mode":"SINGLE","value":0.6}]},{"uid":"bW4wZz","props":{"calcType":"ParallelStructure","nullparams":false},"meta":{"title":"Ouvrages"},"children":[{"uid":"anFpeG","props":{"calcType":"Structure","loiDebit":"WeirSubmerged","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"CdWS","mode":"SINGLE","value":0.9}]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":14.647},{"symbol":"Z1","mode":"CALCUL","value":103},{"symbol":"Z2","mode":"SINGLE","value":101.5}]}]} +>>>>>>> 80e36eb0 (test(e2e): parallel structures: check submergence error) -- GitLab From e54991fb15894a5e9732fb69dbee5412329f643d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Fri, 7 Apr 2023 14:59:50 +0200 Subject: [PATCH 04/15] fix(e2e): parallel structure submergence warning is also displayed along with submergence error refs #614 --- e2e/calculator.po.ts | 11 +++ e2e/parallel-structures.e2e-spec.ts | 147 ++++++++++++++-------------- 2 files changed, 85 insertions(+), 73 deletions(-) diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 64c8ae5bc..ee185aaa7 100644 --- a/e2e/calculator.po.ts +++ b/e2e/calculator.po.ts @@ -356,6 +356,17 @@ export class CalculatorPage { return style.indexOf("color: red;") !== -1; } + /** + * return true if the nth log entry is a warning + */ + async nthLogEntryIsWarning(n: number) { + const errs = await $$("log-entry"); + const e = errs[n]; + const icon = await e.$("div mat-icon"); + const style = await icon.getAttribute("style"); + return style.indexOf("color: orange;") !== -1; + } + async clickSaveCalcButton() { await scrollPageToTop(); return await $("#save-calc").click(); diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index 54ebb0295..d60f76076 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -8,101 +8,102 @@ import { SideNav } from "./sidenav.po"; import { browser, $, $$, expect } from '@wdio/globals' describe("Parallel structures - ", () => { - let startPage: AppPage; - let listPage: ListPage; - let navBar: Navbar; - let calcPage: CalculatorPage; - let prefPage: PreferencesPage; - let sideNav: SideNav; + let startPage: AppPage; + let listPage: ListPage; + let navBar: Navbar; + let calcPage: CalculatorPage; + let prefPage: PreferencesPage; + let sideNav: SideNav; - beforeAll(() => { - startPage = new AppPage(); - listPage = new ListPage(); - navBar = new Navbar(); - calcPage = new CalculatorPage(); - prefPage = new PreferencesPage(); - sideNav = new SideNav(); - }); + beforeAll(() => { + startPage = new AppPage(); + listPage = new ListPage(); + navBar = new Navbar(); + calcPage = new CalculatorPage(); + prefPage = new PreferencesPage(); + sideNav = new SideNav(); + }); - beforeEach(async () => { - // disable evil option "empty fields on module creation" - await prefPage.navigateTo(); - await prefPage.disableEvilEmptyFields(); - await browser.pause(200); - }); + beforeEach(async () => { + // disable evil option "empty fields on module creation" + await prefPage.navigateTo(); + await prefPage.disableEvilEmptyFields(); + await browser.pause(200); + }); - it("check calculated parameter remains the same when copying a structure", async () => { - // open "fish ladder: cross walls" calculator - await navBar.clickNewCalculatorButton(); - await browser.pause(200); - await listPage.clickMenuEntryForCalcType(10); - await browser.pause(200); + it("check calculated parameter remains the same when copying a structure", async () => { + // open "fish ladder: cross walls" calculator + await navBar.clickNewCalculatorButton(); + await browser.pause(200); + await listPage.clickMenuEntryForCalcType(10); + await browser.pause(200); - // check L in first structure calc toggle is not checked - const L1 = await calcPage.getInputById("0_L"); + // check L in first structure calc toggle is not checked + const L1 = await calcPage.getInputById("0_L"); - // const h11 = calcPage.getInputById("0_h1"); + // const h11 = calcPage.getInputById("0_h1"); - // set L to calculated in first structure - await calcPage.setParamMode(L1, "cal"); - await browser.pause(500); + // set L to calculated in first structure + await calcPage.setParamMode(L1, "cal"); + await browser.pause(500); - // check L calc toggle is checked - expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); + // check L calc toggle is checked + expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); - // copy 1st structure - const copyStruct = await calcPage.getCopyStructureButton(); + // copy 1st structure + const copyStruct = await calcPage.getCopyStructureButton(); - await browser.execute(e => { e.click() }, copyStruct); // await copyStruct.click() fails with "element not interactable" error - await browser.pause(200); + await browser.execute(e => { e.click() }, copyStruct); // await copyStruct.click() fails with "element not interactable" error + await browser.pause(200); - await calcPage.closeSnackBar(); - await browser.pause(200); + await calcPage.closeSnackBar(); + await browser.pause(200); - // check L in first structure is still in "calc" state - expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); + // check L in first structure is still in "calc" state + expect(await calcPage.inputIsInCalculatedMode(L1)).toBe(true); - // // check L in second structure is still in "fix" state - const L2 = await calcPage.getInputById("1_L"); - expect(await calcPage.inputIsInFixedMode(L2)).toBe(true); - }); + // // check L in second structure is still in "fix" state + const L2 = await calcPage.getInputById("1_L"); + expect(await calcPage.inputIsInFixedMode(L2)).toBe(true); + }); - //TODO à réactiver après fusion de #618 dans devel - xit("check submergence error", async () => { - await startPage.navigateTo(); - await browser.pause(200); + it("check submergence error", async () => { + await startPage.navigateTo(); + await browser.pause(200); - await loadSession(navBar, sideNav, "./session/session-erreur-ennoiement-614.json"); - await browser.pause(1000); + await loadSession(navBar, sideNav, "./session/session-erreur-ennoiement-614.json"); + await browser.pause(1000); - // first calculator + // first calculator - await navBar.clickCalculatorTab(0); - await browser.pause(200); + await navBar.clickCalculatorTab(0); + await browser.pause(200); - // run calculation - let btnCalc = await calcPage.getCalculateButton(); - await btnCalc.click(); - await browser.pause(500); + // run calculation + let btnCalc = await calcPage.getCalculateButton(); + await btnCalc.click(); + await browser.pause(500); - // check error message in log - expect(await calcPage.nbLogEntries()).toBe(1); + // check error message in log + expect(await calcPage.nbLogEntries()).toBe(2); - expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(0)).toBe(true); + expect(await calcPage.nthLogEntryIsError(1)).toBe(true); - // second calculator + // second calculator - await navBar.clickCalculatorTab(1); - await browser.pause(200); + await navBar.clickCalculatorTab(1); + await browser.pause(200); - // run calculation - btnCalc = await calcPage.getCalculateButton(); - await btnCalc.click(); - await browser.pause(500); + // run calculation + btnCalc = await calcPage.getCalculateButton(); + await btnCalc.click(); + await browser.pause(500); - // check error message in log - expect(await calcPage.nbLogEntries()).toBe(1); + // check error message in log + expect(await calcPage.nbLogEntries()).toBe(2); - expect(await calcPage.nthLogEntryIsError(0)).toBe(true); - }); + expect(await calcPage.nthLogEntryIsWarning(0)).toBe(true); + expect(await calcPage.nthLogEntryIsError(1)).toBe(true); + }); }); -- GitLab From 5f35d32d7a85e4e11e7af5014aac0417e36703fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 11 Apr 2023 17:33:17 +0200 Subject: [PATCH 05/15] fix(e2e): PAB test fails due to jalhyd submergence error fixes refs #614 --- e2e/pab.e2e-spec.ts | 14 +++++++++----- e2e/session/session-erreur-ennoiement-614.json | 4 ---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 28f88a928..4b79466ff 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -124,21 +124,23 @@ describe("ngHyd − Passe à Bassins", () => { await scrollPageToTop(); // generate PAB const genButton = await calcPage.getGeneratePabButton(); - await genButton.isExisting(); - await genButton.isDisplayed(); + // await genButton.isExisting(); + // await genButton.isDisplayed(); await genButton.click(); await browser.pause(1000); const nbBassins = await calcPage.getInputById("generatePabNbBassins"); await nbBassins.setValue("9"); // click "Generate" - await $("dialog-generate-pab button#do-generate").click(); + // await $("dialog-generate-pab button#do-generate").click(); + const doGen = await $("dialog-generate-pab button#do-generate"); + await doGen.click(); await browser.pause(1000); // calculate PAB const calcButtonPAB = await calcPage.getCalculateButton(); await calcButtonPAB.click(); - await browser.pause(200); + await browser.pause(500); // check that result is not empty const hasResults = await calcPage.hasResults(); @@ -185,8 +187,10 @@ describe("ngHyd − Passe à Bassins", () => { const genButton = await calcPage.getGeneratePabButton(); await genButton.click(); await browser.pause(1000); + const debit = await calcPage.getInputById("generatePabDebit"); - expect(await debit.getValue()).toBe("0.564"); + expect(await debit.getValue()).toBe("1.128"); + await debit.clearValue(); // send "1.6" in 3 movements, because "." triggers an error and Angular can't cope with the subsequent keys await debit.setValue("1"); await debit.addValue("."); diff --git a/e2e/session/session-erreur-ennoiement-614.json b/e2e/session/session-erreur-ennoiement-614.json index 2c3933bd6..e0a38e6b2 100644 --- a/e2e/session/session-erreur-ennoiement-614.json +++ b/e2e/session/session-erreur-ennoiement-614.json @@ -1,5 +1 @@ -<<<<<<< HEAD {"header":{"source":"jalhyd","format_version":"1.3","created":"2023-04-03T12:18:32.015Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"cTl6aT","props":{"calcType":"Cloisons","nullparams":false},"meta":{"title":"Cloisons"},"children":[{"uid":"NWllMn","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"h1","mode":"SINGLE","value":1},{"symbol":"L","mode":"SINGLE","value":0.2},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]}],"parameters":[{"symbol":"Q","mode":"CALCUL"},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"LB","mode":"SINGLE","value":10},{"symbol":"BB","mode":"SINGLE","value":1},{"symbol":"PB","mode":"SINGLE","value":1},{"symbol":"DH","mode":"SINGLE","value":0.6}]},{"uid":"bW4wZz","props":{"calcType":"ParallelStructure","nullparams":false},"meta":{"title":"Ouvrages"},"children":[{"uid":"anFpeG","props":{"calcType":"Structure","loiDebit":"WeirSubmerged","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"CdWS","mode":"SINGLE","value":0.9}]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":14.647},{"symbol":"Z1","mode":"CALCUL","value":103},{"symbol":"Z2","mode":"SINGLE","value":101.5}]}]} -======= -{"header":{"source":"jalhyd","format_version":"1.3","created":"2023-04-03T12:18:32.015Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"cTl6aT","props":{"calcType":"Cloisons","nullparams":false},"meta":{"title":"Cloisons"},"children":[{"uid":"NWllMn","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"h1","mode":"SINGLE","value":1},{"symbol":"L","mode":"SINGLE","value":0.2},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]}],"parameters":[{"symbol":"Q","mode":"CALCUL"},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"LB","mode":"SINGLE","value":10},{"symbol":"BB","mode":"SINGLE","value":1},{"symbol":"PB","mode":"SINGLE","value":1},{"symbol":"DH","mode":"SINGLE","value":0.6}]},{"uid":"bW4wZz","props":{"calcType":"ParallelStructure","nullparams":false},"meta":{"title":"Ouvrages"},"children":[{"uid":"anFpeG","props":{"calcType":"Structure","loiDebit":"WeirSubmerged","structureType":"SeuilRectangulaire","nullparams":false},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"CdWS","mode":"SINGLE","value":0.9}]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":14.647},{"symbol":"Z1","mode":"CALCUL","value":103},{"symbol":"Z2","mode":"SINGLE","value":101.5}]}]} ->>>>>>> 80e36eb0 (test(e2e): parallel structures: check submergence error) -- GitLab From d33cb071e1991991386a25b4f9411101d34140b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 17 Apr 2023 15:32:01 +0200 Subject: [PATCH 06/15] fix(e2e): PAB test typo refs #614 --- e2e/pab.e2e-spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 4b79466ff..a46cf7912 100644 --- a/e2e/pab.e2e-spec.ts +++ b/e2e/pab.e2e-spec.ts @@ -62,7 +62,7 @@ describe("ngHyd − Passe à Bassins", () => { await listPage.clickMenuEntryForCalcType(12); const c_Z1 = await calcPage.getInputById("Z1"); await c_Z1.setValue("78.27"); - const c_Z2 = await calcPage.getInputById("Z1"); + const c_Z2 = await calcPage.getInputById("Z2"); await c_Z2.setValue("74.86"); // PAB - nombre -- GitLab From a95ebb1a6ae98b7e430714d2bea9dd49862ba30b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Mon, 17 Apr 2023 15:32:20 +0200 Subject: [PATCH 07/15] fix(e2e): submergence error/warning order in submergence test refs #614 --- e2e/parallel-structures.e2e-spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/e2e/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index d60f76076..f5f12df4b 100644 --- a/e2e/parallel-structures.e2e-spec.ts +++ b/e2e/parallel-structures.e2e-spec.ts @@ -87,8 +87,8 @@ describe("Parallel structures - ", () => { // check error message in log expect(await calcPage.nbLogEntries()).toBe(2); - expect(await calcPage.nthLogEntryIsWarning(0)).toBe(true); - expect(await calcPage.nthLogEntryIsError(1)).toBe(true); + expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(1)).toBe(true); // second calculator @@ -103,7 +103,7 @@ describe("Parallel structures - ", () => { // check error message in log expect(await calcPage.nbLogEntries()).toBe(2); - expect(await calcPage.nthLogEntryIsWarning(0)).toBe(true); - expect(await calcPage.nthLogEntryIsError(1)).toBe(true); + expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(1)).toBe(true); }); }); -- GitLab From f9c74ffa99e1ddb4ffb4bbb54dab8121618725f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 16 May 2023 15:55:38 +0200 Subject: [PATCH 08/15] test(e2): predams: check an error in calculation leads to empty results for walls/basins refs #614 --- e2e/prebarrages-results.e2e-spec.ts | 30 ++++++++++++++++++- .../session-prebarrage-calculation-error.json | 1 + 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 e2e/session/session-prebarrage-calculation-error.json diff --git a/e2e/prebarrages-results.e2e-spec.ts b/e2e/prebarrages-results.e2e-spec.ts index 09c79d23b..b7e83b512 100644 --- a/e2e/prebarrages-results.e2e-spec.ts +++ b/e2e/prebarrages-results.e2e-spec.ts @@ -3,7 +3,8 @@ import { CalculatorPage } from "./calculator.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po"; import { browser, $, $$, expect } from '@wdio/globals' -import { scrollToElement } from "./util.po"; +import { loadSession, scrollToElement } from "./util.po"; +import { SideNav } from "./sidenav.po"; /** * Clone calculators @@ -13,12 +14,14 @@ describe("Prébarrages results - ", () => { let calcPage: CalculatorPage; let navBar: Navbar; let prefPage: PreferencesPage; + let sidenav: SideNav; beforeAll(() => { listPage = new ListPage(); calcPage = new CalculatorPage(); navBar = new Navbar(); prefPage = new PreferencesPage(); + sidenav = new SideNav(); jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 1000; }); @@ -56,4 +59,29 @@ describe("Prébarrages results - ", () => { expect(hasResults).toBe(true); } }); + + it("an error in calculation must lead to empty results for all walls/basins", async () => { + // load session file + await loadSession(navBar, sidenav, "./session/session-prebarrage-calculation-error.json"); + + // click "compute" button + const calcButton = await calcPage.getCalculateButton(); + await calcButton.click(); + await browser.pause(300); + + // check no result is available + const nodes = await $$("g.nodes > g"); + const nb = nodes.length; + for (let n = 0; n < nb; n++) { + const node = nodes[n]; + await scrollToElement(node); + await browser.pause(100); + await node.click(); + await browser.pause(200); + + // check that result is empty + const hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(false); + } + }); }); diff --git a/e2e/session/session-prebarrage-calculation-error.json b/e2e/session/session-prebarrage-calculation-error.json new file mode 100644 index 000000000..b8f6f4f85 --- /dev/null +++ b/e2e/session/session-prebarrage-calculation-error.json @@ -0,0 +1 @@ +{"header":{"source":"jalhyd","format_version":"1.3","created":"2023-05-16T06:32:05.999Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"b2kxNm","props":{"calcType":"PreBarrage"},"meta":{"title":"Prébarrages"},"children":[{"uid":"Zjczdz","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":13.8},{"symbol":"ZF","mode":"SINGLE","value":95}]},{"uid":"dWJrZX","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":15.4},{"symbol":"ZF","mode":"SINGLE","value":94.7}]},{"uid":"dzMxN2","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":16.2},{"symbol":"ZF","mode":"SINGLE","value":94.7}]},{"uid":"ZXZua2","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":17.5},{"symbol":"ZF","mode":"SINGLE","value":94.4}]},{"uid":"YmR5aD","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":32.1},{"symbol":"ZF","mode":"SINGLE","value":94.25}]},{"uid":"bDN2OW","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":35},{"symbol":"ZF","mode":"SINGLE","value":94.1}]},{"uid":"MWxycH","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"Zjczdz"},"children":[{"uid":"MmZ2aG","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.3},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"eW9jZH","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.3},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"c3Zpb2","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"dWJrZX"},"children":[{"uid":"bTQ2cG","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96},{"symbol":"L","mode":"SINGLE","value":1},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"N24zM2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"MG4wNG","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"YmR5aD"},"children":[{"uid":"azV4dj","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":3.5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"YjJra2","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"bDN2OW"},"children":[{"uid":"aDd4Y3","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":3.6},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"enE4cn","props":{"calcType":"PbCloison","upstreamBasin":"Zjczdz","downstreamBasin":"dzMxN2"},"children":[{"uid":"ZHczZ2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"aXRjZ3","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":5.2},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"NXNoNG","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"dzMxN2"},"children":[{"uid":"eXFqeH","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.85},{"symbol":"L","mode":"SINGLE","value":4.38},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"bGhodG","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"ZXZua2"},"children":[{"uid":"b3Z3OD","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.85},{"symbol":"L","mode":"SINGLE","value":3},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"MDZ3aH","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"YmR5aD"},"children":[{"uid":"NXJ1OW","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.5},{"symbol":"L","mode":"SINGLE","value":1},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]},{"uid":"b3pjZX","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.5},{"symbol":"L","mode":"SINGLE","value":1},{"symbol":"CdCunge","mode":"SINGLE","value":0.4}]}],"parameters":[]},{"uid":"emZ2bX","props":{"calcType":"PbCloison","upstreamBasin":"dzMxN2","downstreamBasin":"ZXZua2"},"children":[{"uid":"cGllNj","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.7},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"aWFseW","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.65},{"symbol":"L","mode":"SINGLE","value":5.74},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"bG1ucj","props":{"calcType":"PbCloison","upstreamBasin":"ZXZua2","downstreamBasin":"YmR5aD"},"children":[{"uid":"MDJsaD","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.4},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"ZzY2bT","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.35},{"symbol":"L","mode":"SINGLE","value":6},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"dGNnZz","props":{"calcType":"PbCloison","upstreamBasin":"YmR5aD","downstreamBasin":"bDN2OW"},"children":[{"uid":"dnNqeX","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.25},{"symbol":"L","mode":"SINGLE","value":0.7},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"ODFkZ2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.05},{"symbol":"L","mode":"SINGLE","value":9.5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"amprcm","props":{"calcType":"PbCloison","upstreamBasin":"bDN2OW","downstreamBasin":""},"children":[{"uid":"OG02MT","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.1},{"symbol":"L","mode":"SINGLE","value":0.95},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"MHVxZn","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.75},{"symbol":"L","mode":"SINGLE","value":10.2},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":0.844},{"symbol":"Z1","mode":"CALCUL"},{"symbol":"Z2","mode":"SINGLE","value":94.45}]}]} \ No newline at end of file -- GitLab From b2dfb63ee78f98f6cd8f82a2ca399f55e01341cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Tue, 16 May 2023 15:09:50 +0200 Subject: [PATCH 09/15] fix: predams results: do not show fixed parameters in case of error refs #614 --- src/app/results/prebarrage-results.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/results/prebarrage-results.ts b/src/app/results/prebarrage-results.ts index 411c4edd7..b5f894b70 100644 --- a/src/app/results/prebarrage-results.ts +++ b/src/app/results/prebarrage-results.ts @@ -127,7 +127,7 @@ export class PrebarrageResults extends MultiDimensionResults implements IObserva } public get hasWallResults(): boolean { - return this.cloisonResults && this.cloisonResults.result && ! this.cloisonResults.result.hasOnlyErrors; + return this.cloisonResults?.result?.ok; } /** retourne true si au moins un calcul a échoué (le log a un code négatif) */ -- GitLab From 68060547efd6e2d30cb5828f3cca8d6db9a66fd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 09:28:45 +0200 Subject: [PATCH 10/15] test(e2e): check log messages in predams example refs #614 --- e2e/predam-log.e2e-spec.ts | 39 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 11326ca7b..de1cd6685 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -3,18 +3,22 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" import { browser, $, $$, expect } from '@wdio/globals' +import { changeSelectValue, scrollToElement } from "./util.po"; +import { AppPage } from "./app.po"; -describe("check that low iteration count leads to log messages", () => { +describe("predams - ", () => { let listPage: ListPage; let prefPage: PreferencesPage; let navBar: Navbar; let calcPage: CalculatorPage; + let startPage: AppPage; beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + startPage = new AppPage(); }); beforeEach(async () => { @@ -25,7 +29,7 @@ describe("check that low iteration count leads to log messages", () => { await browser.pause(100); }); - it("", async () => { + it("check that low iteration count leads to log messages", async () => { // set low iteration count await prefPage.setIterationCount(5); @@ -42,4 +46,35 @@ describe("check that low iteration count leads to log messages", () => { // check log messages presence expect(await calcPage.hasLog()).toBe(true); }); + + it("check log messages in predams example", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + // open predams example + const examples = await $$("#examples-list .load-example"); + await examples[6].click(); + await browser.pause(500); + + // click "Amont-B2" + const nodes = await $$("g.nodes > g"); + const node = nodes[9]; + await scrollToElement(node); + await browser.pause(100); + await node.click(); + await browser.pause(200); + + // change discharge law to Larinier + const sel = await calcPage.getSelectById("select_loidebit"); + await changeSelectValue(sel, 3); + await browser.pause(100); + + // calculate module + const calcBtn = await calcPage.getCalculateButton(); + await calcBtn.click(); + await browser.pause(300); + + // check log messages presence + expect(await calcPage.hasLog()).toBe(true); + }); }); -- GitLab From 1a344ebb85ca69f4f3ab508ffd1db17e44e5294d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 09:48:00 +0200 Subject: [PATCH 11/15] test(e2e): predams: check sumbmergence error does not trigger too soon refs #614 --- e2e/predam-log.e2e-spec.ts | 20 ++++++++++++++++++- .../session-submergence-error-Larinier.json | 1 + 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 e2e/session/session-submergence-error-Larinier.json diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index de1cd6685..8327fb0ff 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -3,8 +3,9 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" import { browser, $, $$, expect } from '@wdio/globals' -import { changeSelectValue, scrollToElement } from "./util.po"; +import { changeSelectValue, loadSession, scrollToElement } from "./util.po"; import { AppPage } from "./app.po"; +import { SideNav } from "./sidenav.po"; describe("predams - ", () => { let listPage: ListPage; @@ -12,6 +13,7 @@ describe("predams - ", () => { let navBar: Navbar; let calcPage: CalculatorPage; let startPage: AppPage; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); @@ -19,6 +21,7 @@ describe("predams - ", () => { navBar = new Navbar(); calcPage = new CalculatorPage(); startPage = new AppPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -77,4 +80,19 @@ describe("predams - ", () => { // check log messages presence expect(await calcPage.hasLog()).toBe(true); }); + + it("check submergence error does not trigger too soon", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + await loadSession(navBar, sideNav, "./session/session-submergence-error-Larinier.json"); + + // calculate module + const calcBtn = await calcPage.getCalculateButton(); + await calcBtn.click(); + await browser.pause(300); + + // check log messages absence + expect(await calcPage.hasLog()).toBe(false); + }); }); diff --git a/e2e/session/session-submergence-error-Larinier.json b/e2e/session/session-submergence-error-Larinier.json new file mode 100644 index 000000000..4c61453f2 --- /dev/null +++ b/e2e/session/session-submergence-error-Larinier.json @@ -0,0 +1 @@ +{"header":{"source":"jalhyd","format_version":"1.3","created":"2023-05-17T07:40:56.534Z"},"settings":{"precision":1e-7,"maxIterations":100,"displayPrecision":3},"documentation":"","session":[{"uid":"b2kxNm","props":{"calcType":"PreBarrage"},"meta":{"title":"Prébarrages"},"children":[{"uid":"Zjczdz","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":13.8},{"symbol":"ZF","mode":"SINGLE","value":95}]},{"uid":"dWJrZX","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":15.4},{"symbol":"ZF","mode":"SINGLE","value":94.7}]},{"uid":"dzMxN2","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":16.2},{"symbol":"ZF","mode":"SINGLE","value":94.7}]},{"uid":"ZXZua2","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":17.5},{"symbol":"ZF","mode":"SINGLE","value":94.4}]},{"uid":"YmR5aD","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":32.1},{"symbol":"ZF","mode":"SINGLE","value":94.25}]},{"uid":"bDN2OW","props":{"calcType":"PbBassin"},"children":[],"parameters":[{"symbol":"S","mode":"SINGLE","value":35},{"symbol":"ZF","mode":"SINGLE","value":94.1}]},{"uid":"MWxycH","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"Zjczdz"},"children":[{"uid":"cG80a2","props":{"calcType":"Structure","loiDebit":"WeirSubmergedLarinier","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.3},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdWSL","mode":"SINGLE","value":0.75}]},{"uid":"aDVuZj","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":4.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"c3Zpb2","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"dWJrZX"},"children":[{"uid":"ZmFibX","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96},{"symbol":"L","mode":"SINGLE","value":1},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"N24zM2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"MG4wNG","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"YmR5aD"},"children":[{"uid":"azV4dj","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":3.5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"YjJra2","props":{"calcType":"PbCloison","upstreamBasin":"","downstreamBasin":"bDN2OW"},"children":[{"uid":"aDd4Y3","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":3.6},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"enE4cn","props":{"calcType":"PbCloison","upstreamBasin":"Zjczdz","downstreamBasin":"dzMxN2"},"children":[{"uid":"ZHczZ2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"aXRjZ3","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":96.25},{"symbol":"L","mode":"SINGLE","value":5.2},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"NXNoNG","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"dzMxN2"},"children":[{"uid":"eXFqeH","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.85},{"symbol":"L","mode":"SINGLE","value":4.38},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"bGhodG","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"ZXZua2"},"children":[{"uid":"b3Z3OD","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.85},{"symbol":"L","mode":"SINGLE","value":3},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"MDZ3aH","props":{"calcType":"PbCloison","upstreamBasin":"dWJrZX","downstreamBasin":"YmR5aD"},"children":[{"uid":"NTBzZm","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.5},{"symbol":"L","mode":"SINGLE","value":1},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"b3pjZX","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.75},{"symbol":"L","mode":"SINGLE","value":3},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"emZ2bX","props":{"calcType":"PbCloison","upstreamBasin":"dzMxN2","downstreamBasin":"ZXZua2"},"children":[{"uid":"cGllNj","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.7},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"aWFseW","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.65},{"symbol":"L","mode":"SINGLE","value":5.74},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"bG1ucj","props":{"calcType":"PbCloison","upstreamBasin":"ZXZua2","downstreamBasin":"YmR5aD"},"children":[{"uid":"MDJsaD","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.4},{"symbol":"L","mode":"SINGLE","value":0.4},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"ZzY2bT","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.35},{"symbol":"L","mode":"SINGLE","value":6},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"dGNnZz","props":{"calcType":"PbCloison","upstreamBasin":"YmR5aD","downstreamBasin":"bDN2OW"},"children":[{"uid":"dnNqeX","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.25},{"symbol":"L","mode":"SINGLE","value":0.7},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"ODFkZ2","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":95.05},{"symbol":"L","mode":"SINGLE","value":9.5},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]},{"uid":"amprcm","props":{"calcType":"PbCloison","upstreamBasin":"bDN2OW","downstreamBasin":""},"children":[{"uid":"OG02MT","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.1},{"symbol":"L","mode":"SINGLE","value":0.95},{"symbol":"CdCunge","mode":"SINGLE","value":1}]},{"uid":"MHVxZn","props":{"calcType":"Structure","loiDebit":"WeirCunge80","structureType":"SeuilRectangulaire"},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":94.75},{"symbol":"L","mode":"SINGLE","value":10.2},{"symbol":"CdCunge","mode":"SINGLE","value":1}]}],"parameters":[]}],"parameters":[{"symbol":"Q","mode":"SINGLE","value":0.844},{"symbol":"Z1","mode":"CALCUL"},{"symbol":"Z2","mode":"SINGLE","value":94.45}]}]} \ No newline at end of file -- GitLab From 1a5d78e3d9ffbf1a545afd1ee2b27e5b37a5e8ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 10:26:39 +0200 Subject: [PATCH 12/15] test(e2e): check submergence error occurs in fish ladder refs #614 --- e2e/pab-submergence-error.e2e-spec.ts | 61 +++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 e2e/pab-submergence-error.e2e-spec.ts diff --git a/e2e/pab-submergence-error.e2e-spec.ts b/e2e/pab-submergence-error.e2e-spec.ts new file mode 100644 index 000000000..1009d9410 --- /dev/null +++ b/e2e/pab-submergence-error.e2e-spec.ts @@ -0,0 +1,61 @@ +import { CalculatorPage } from "./calculator.po"; +import { Navbar } from "./navbar.po"; +import { AppPage } from "./app.po"; +import { PreferencesPage } from "./preferences.po"; +import { browser, $, $$, expect } from '@wdio/globals' + +/** + * Clone calculators + */ +describe("Passe à Bassins - ", () => { + let startPage: AppPage; + let calcPage: CalculatorPage; + let navBar: Navbar; + let prefPage: PreferencesPage; + + beforeAll(() => { + startPage = new AppPage(); + calcPage = new CalculatorPage(); + navBar = new Navbar(); + prefPage = new PreferencesPage(); + }); + + beforeEach(async () => { + // disable evil option "empty fields on module creation" + await prefPage.setEmptyFields(false); + }); + + it("check submergence error occurs", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + // open PAB example + const examples = await $$("#examples-list .load-example"); + await examples[0].click(); + await browser.pause(500); + + // select PAB module + await navBar.openNthCalculator(5); + await browser.pause(300); + + // modify downstream water elevation + const inpZ2 = await calcPage.getInputById("Z2"); + await inpZ2.setValue("27"); + await browser.pause(100); + + // calculate PAB + const calcButton = await calcPage.getCalculateButton(); + await calcButton.click(); + await browser.pause(300); + + // check that result is empty + const hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(false); + + // check presence of log messages + expect(await calcPage.nbLogEntries()).toBe(3); + expect(await calcPage.nthLogEntryIsError(0)).toBe(true); + expect(await calcPage.nthLogEntryIsError(1)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(2)).toBe(true); + }); +}); -- GitLab From 10e9d3348e63d412059803a5a62c6df6696dea5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 10:46:11 +0200 Subject: [PATCH 13/15] test(e2e): predams: check results are displayed when dichotomy does not converge refs #614 --- e2e/predam-log.e2e-spec.ts | 33 +++++++++++++++++++++++++++++++++ e2e/preferences.po.ts | 5 +++++ 2 files changed, 38 insertions(+) diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 8327fb0ff..0e7e99fe9 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -95,4 +95,37 @@ describe("predams - ", () => { // check log messages absence expect(await calcPage.hasLog()).toBe(false); }); + + it("check submergence error and results if dichotomy did not converge", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + // open predams example + const examples = await $$("#examples-list .load-example"); + await examples[6].click(); + await browser.pause(500); + + // modify iteration count,precision + await prefPage.navigateTo(); + await browser.pause(200); + await prefPage.setIterationCount(10); + await prefPage.setComputePrecision(1e-15); + + // back to module + await navBar.openNthCalculator(0); + await browser.pause(500); + + // calculate module + const calcBtn = await calcPage.getCalculateButton(); + await calcBtn.click(); + await browser.pause(300); + + // check log messages presence + expect(await calcPage.hasLog()).toBe(true); + expect(await calcPage.nbLogEntries()).toBe(12); + + // check that results are not empty (dichotomy did not convergence but results should be displayed anyway) + const hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(true); + }); }); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 4a3a5755c..57f921dd1 100644 --- a/e2e/preferences.po.ts +++ b/e2e/preferences.po.ts @@ -84,4 +84,9 @@ export class PreferencesPage { const input = await this.getInputFromName("nmi"); await input.setValue(n.toString()); } + + async setComputePrecision(p: number) { + const input = await this.getInputFromName("cp"); + await input.setValue(p.toString()); + } } -- GitLab From b5bddeee2e67578c90097adcc2de397e0b5645a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 16:20:46 +0200 Subject: [PATCH 14/15] fix(e2e): failing test refs #614 --- e2e/ouvrages-empty-fields.e2e-spec.ts | 12 +++++----- e2e/util.po.ts | 32 +++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/e2e/ouvrages-empty-fields.e2e-spec.ts b/e2e/ouvrages-empty-fields.e2e-spec.ts index 24078502a..b0cebdc64 100644 --- a/e2e/ouvrages-empty-fields.e2e-spec.ts +++ b/e2e/ouvrages-empty-fields.e2e-spec.ts @@ -2,8 +2,9 @@ import { ListPage } from "./list.po"; import { CalculatorPage } from "./calculator.po"; import { PreferencesPage } from "./preferences.po"; import { Navbar } from "./navbar.po"; -import { changeSelectValue } from "./util.po"; +import { changeSelectValue, openApplication, openCalculator } from "./util.po"; import { browser, $, $$, expect } from '@wdio/globals' +import { AppPage } from "./app.po"; /** * Check that created/cloned structures have empty fields when @@ -14,13 +15,14 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () let listPage: ListPage; let calcPage: CalculatorPage; let navBar: Navbar; + let startPage: AppPage; beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); calcPage = new CalculatorPage(); navBar = new Navbar(); - //browser.manage().window().setPosition(2000, 30); + startPage = new AppPage(); }); beforeEach(async () => { @@ -33,12 +35,10 @@ describe("ngHyd - check that created/cloned structures have empty fields - ", () async function setup() { // start page - await navBar.clickNewCalculatorButton(); - await browser.pause(200); + await openApplication(startPage); // open structures calculator - await listPage.clickMenuEntryForCalcType(8); - await browser.pause(200); + await openCalculator(8, navBar, listPage); } it("when a structure calculator is created", async () => { diff --git a/e2e/util.po.ts b/e2e/util.po.ts index c6cd6471e..ec4a1c033 100644 --- a/e2e/util.po.ts +++ b/e2e/util.po.ts @@ -2,13 +2,13 @@ import { browser, $, $$, expect } from '@wdio/globals' import { Navbar } from './navbar.po'; import { SideNav } from './sidenav.po'; import { ListPage } from './list.po'; - +import { AppPage } from './app.po'; /** * scroll page to make element visible */ export async function scrollToElement(elem) { await browser.execute(e => { e.scrollIntoView({ block: 'center' }) }, elem); - await browser.pause(100); + await browser.pause(200); } /** @@ -31,6 +31,19 @@ export function expectNumber(msg: string, val: number, expected: number) { expect(val).toEqual(expected); } +/** + * execute expect() on a boolean and displays a failure message + * @param msg message in caase of failure + * @param val value to check + * @param expected expected value + */ +export function expectBoolean(msg: string, val: boolean, expected: boolean) { + if (val !== expected) { + console.log(msg, "got", val, "expected", expected); + } + expect(val).toEqual(expected); +} + export async function changeSelectValue(elt, index: number) { await scrollToElement(elt); await browser.pause(100); @@ -58,18 +71,29 @@ export async function newSession(navBar: Navbar, sideNav: SideNav) { } } +/** + * open application if necessary (ie. if no URL has been open) + */ +export async function openApplication(startPage: AppPage) { + const url = await browser.getUrl(); + if (url.indexOf("localhost") === -1) { + await startPage.navigateTo(); + await browser.pause(500); + } +} + export async function openCalculator(id: number, navBar: Navbar, listPage: ListPage) { const ncButton = await navBar.getNewCalculatorButton(); if (await ncButton.isExisting()) { await scrollToElement(ncButton); if (await ncButton.isDisplayed()) { await ncButton.click() - await browser.pause(200); + await browser.pause(300); } } await listPage.clickMenuEntryForCalcType(id); - await browser.pause(200); + await browser.pause(500); } /** -- GitLab From e648460ee20b52a2346ffaf510f9c79acba0ed1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grand?= <francois.grand@inrae.fr> Date: Wed, 17 May 2023 16:23:33 +0200 Subject: [PATCH 15/15] test(e2e): predams: check that results are not displayed when dichotomy convergence error occurred along with another error refs #614 --- e2e/predam-log.e2e-spec.ts | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/e2e/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 0e7e99fe9..07c936d1e 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -128,4 +128,54 @@ describe("predams - ", () => { const hasResults = await calcPage.hasResults(); expect(hasResults).toBe(true); }); + + it("check results (dichotomy did not converge + submergence error)", async () => { + await startPage.navigateTo(); + await browser.pause(200); + + // open predams example + const examples = await $$("#examples-list .load-example"); + await examples[6].click(); + await browser.pause(500); + + // modify iteration count,precision (should trigger submergence+dichotomy non convergence errors) + await prefPage.navigateTo(); + await browser.pause(200); + await prefPage.setIterationCount(20); + await prefPage.setComputePrecision(1e-15); + + // back to module + await navBar.openNthCalculator(0); + await browser.pause(500); + + // click "Amont-B2" + const nodes = await $$("g.nodes > g"); + const node = nodes[9]; + await scrollToElement(node); + await browser.pause(100); + await node.click(); + await browser.pause(200); + + // change discharge law to Larinier + const sel = await calcPage.getSelectById("select_loidebit"); + await changeSelectValue(sel, 3); + await browser.pause(100); + + // calculate module + const calcBtn = await calcPage.getCalculateButton(); + await calcBtn.click(); + await browser.pause(300); + + // check that results are empty + const hasResults = await calcPage.hasResults(); + expect(hasResults).toBe(false); + + // check log messages + expect(await calcPage.hasLog()).toBe(true); + expect(await calcPage.nbLogEntries()).toBe(4); + expect(await calcPage.nthLogEntryIsWarning(0)).toBe(true); + expect(await calcPage.nthLogEntryIsError(1)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(2)).toBe(true); + expect(await calcPage.nthLogEntryIsError(3)).toBe(true); + }); }); -- GitLab