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