diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts index 64c8ae5bcb93b331b0ebb41ac8377bfc3374fa63..ee185aaa7edf94f01e03acb3fcbfe63d09108acc 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/ouvrages-empty-fields.e2e-spec.ts b/e2e/ouvrages-empty-fields.e2e-spec.ts index 24078502a66f73fe9559fde6eee826a9fc10b755..b0cebdc6486fc33c7d58e6c9cd42c491b4a6a8f1 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/pab-submergence-error.e2e-spec.ts b/e2e/pab-submergence-error.e2e-spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..1009d941026951bcb61b25ab031acb3f22bd1d21 --- /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); + }); +}); diff --git a/e2e/pab.e2e-spec.ts b/e2e/pab.e2e-spec.ts index 28f88a928f0135cb1d009e516268ad570fe95319..a46cf7912e2861152fe2ef2ea30aecff55c44afb 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 @@ -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/parallel-structures.e2e-spec.ts b/e2e/parallel-structures.e2e-spec.ts index 54ebb02952312ad799e8a46d01de02c1611f098a..f5f12df4bf09e7a6295d865effd4f949a11a0613 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.nthLogEntryIsError(0)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(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.nthLogEntryIsError(0)).toBe(true); + expect(await calcPage.nthLogEntryIsWarning(1)).toBe(true); + }); }); diff --git a/e2e/prebarrages-results.e2e-spec.ts b/e2e/prebarrages-results.e2e-spec.ts index 09c79d23b2f5527fdb744664d70aa3023ce6a2ee..b7e83b5126a6df649dd4ff40a3d9163c2b0a7a30 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/predam-log.e2e-spec.ts b/e2e/predam-log.e2e-spec.ts index 11326ca7b30206e7257009c10ad00cdef48ee4bc..07c936d1e62a863c69faf2e90a69623da2c44d80 100644 --- a/e2e/predam-log.e2e-spec.ts +++ b/e2e/predam-log.e2e-spec.ts @@ -3,18 +3,25 @@ import { ListPage } from "./list.po"; import { Navbar } from "./navbar.po"; import { PreferencesPage } from "./preferences.po" import { browser, $, $$, expect } from '@wdio/globals' +import { changeSelectValue, loadSession, scrollToElement } from "./util.po"; +import { AppPage } from "./app.po"; +import { SideNav } from "./sidenav.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; + let sideNav: SideNav; beforeAll(() => { prefPage = new PreferencesPage(); listPage = new ListPage(); navBar = new Navbar(); calcPage = new CalculatorPage(); + startPage = new AppPage(); + sideNav = new SideNav(); }); beforeEach(async () => { @@ -25,7 +32,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 +49,133 @@ 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); + }); + + 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); + }); + + 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); + }); + + 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); + }); }); diff --git a/e2e/preferences.po.ts b/e2e/preferences.po.ts index 4a3a5755cc3ebf7aec84f2e198608662da8ff6fc..57f921dd1a82ccab94ffe320daf0f57a9161d67f 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()); + } } diff --git a/e2e/session/session-prebarrage-calculation-error.json b/e2e/session/session-prebarrage-calculation-error.json new file mode 100644 index 0000000000000000000000000000000000000000..b8f6f4f8566e75709b4d5dfc83a91d9062bf1c84 --- /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 diff --git a/e2e/session/session-submergence-error-Larinier.json b/e2e/session/session-submergence-error-Larinier.json new file mode 100644 index 0000000000000000000000000000000000000000..4c61453f20e0c7948e333e3a748f6d44cdbd655f --- /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 diff --git a/e2e/util.po.ts b/e2e/util.po.ts index c6cd6471e9815ede92cd6f774a44838232c03ab9..ec4a1c033b66cb66ab8daf209b96b23c1c6db958 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); } /** diff --git a/jalhyd_branch b/jalhyd_branch index c8375d882015b74a13a4efd4a1693afde5aad1c3..9426cd15474d33fe7b65ba1e719ff221566e36dc 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 diff --git a/src/app/results/prebarrage-results.ts b/src/app/results/prebarrage-results.ts index 411c4edd7354211f1dc1bea5f54c180ae3590da9..b5f894b705e63b1b1ef8b388e7efee37d7db9b0a 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) */ diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index b31fc6330b5b2de4bd86edeefe7fcff5786c7fa5..de71e8bbbce84461d413a6540659e57d45673ed2 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 21aca059bcbca69d01786097c849cecafa1e842d..fa314521578af872f57c717ca91fafdc2379e03f 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)",