From 77de25fff5cbf8bc533bd9309363425e76b5a388 Mon Sep 17 00:00:00 2001
From: "mathias.chouet" <mathias.chouet@irstea.fr>
Date: Thu, 28 Mar 2019 11:46:33 +0100
Subject: [PATCH] =?UTF-8?q?Nouveau=20test=20e2e=20pour=20le=20calcul=20de?=
 =?UTF-8?q?=20param=C3=A8tres=20li=C3=A9s?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 e2e/calculate-all-params.e2e-spec.ts    |   4 -
 e2e/calculate-linked-params.e2e-spec.ts | 490 ++++++++++++++++++++++++
 e2e/calculator.po.ts                    |  14 +-
 e2e/load-linked-params.e2e-spec.ts      |   2 +-
 4 files changed, 504 insertions(+), 6 deletions(-)
 create mode 100644 e2e/calculate-linked-params.e2e-spec.ts

diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts
index eaff7587d..49d6cc12c 100644
--- a/e2e/calculate-all-params.e2e-spec.ts
+++ b/e2e/calculate-all-params.e2e-spec.ts
@@ -1,9 +1,5 @@
-import { AppPage } from "./app.po";
 import { ListPage } from "./list.po";
 import { CalculatorPage } from "./calculator.po";
-import { Navbar } from "./navbar.po";
-import { SideNav } from "./sidenav.po";
-import { browser } from "protractor";
 
 /**
  * For all calculators, try to calculate every parameter: check that only one parameter
diff --git a/e2e/calculate-linked-params.e2e-spec.ts b/e2e/calculate-linked-params.e2e-spec.ts
new file mode 100644
index 000000000..179b55f54
--- /dev/null
+++ b/e2e/calculate-linked-params.e2e-spec.ts
@@ -0,0 +1,490 @@
+import { AppPage } from "./app.po";
+import { ListPage } from "./list.po";
+import { CalculatorPage } from "./calculator.po";
+import { Navbar } from "./navbar.po";
+import { SideNav } from "./sidenav.po";
+import { browser } from "protractor";
+
+/**
+ * Uses an example configuration to calculate :
+ *  - with a parameter linked to a single parameter
+ *  - with a parameter linked to a single parameter, plus local variated parameter
+ *  - with a parameter linked to a variated parameter
+ *  - with a parameter linked to a single result
+ *  - with a parameter linked to a single result, plus local variated parameter
+ *  - with a parameter linked to a variated result
+ *  - with a parameter linked to a single extra result
+ *  - with a parameter linked to a single extra result, plus local variated parameter
+ *  - with a parameter linked to a variated extra result
+ *
+ *  => plus all those combinations in indeirect link mode (linked parameter target
+ *     is also a linked parameter)
+ */
+describe("ngHyd − calculate with linked parameters", () => {
+  let listPage: ListPage;
+  let calcPage: CalculatorPage;
+  let navBar: Navbar;
+  let startPage: AppPage;
+
+  beforeEach(() => {
+    listPage = new ListPage();
+    calcPage = new CalculatorPage();
+    navBar = new Navbar();
+    startPage = new AppPage();
+
+  });
+
+  async function computeAndCheckPresenceOfResults() {
+    // check that "compute" button is active
+    const calcButton = calcPage.getCalculateButton();
+    const disabledState = await calcButton.getAttribute("disabled");
+    expect(disabledState).not.toBe("true");
+    // click "compute" button
+    await calcButton.click();
+    // check that result is not empty
+    const hasResults = await calcPage.hasResults();
+    expect(hasResults).toBe(true);
+  }
+
+  it(" − direct links : parameter linked to a single parameter", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (R uniforme)
+    const Y = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y, "link");
+    const sel = await calcPage.getLinkedValueSelect(Y);
+    await calcPage.changeSelectValue(sel, 1);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − direct links : parameter linked to a single parameter, plus local variated parameter", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (R uniforme)
+    const Y = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y, "link");
+    const sel = await calcPage.getLinkedValueSelect(Y);
+    await calcPage.changeSelectValue(sel, 1);
+    // vary W
+    const W = calcPage.getInputById("W");
+    await calcPage.setParamMode(W, "var");
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − direct links : parameter linked to a variated parameter", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+    // vary Y
+    const Y1 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y1, "var");
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (R uniforme)
+    const Y2 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y2, "link");
+    const sel = await calcPage.getLinkedValueSelect(Y2);
+    await calcPage.changeSelectValue(sel, 1);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − direct links : parameter linked to a single result", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+    // calculate Y
+    const Y1 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y1, "cal");
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (R uniforme)
+    const Y2 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y2, "link");
+    const sel = await calcPage.getLinkedValueSelect(Y2);
+    await calcPage.changeSelectValue(sel, 1);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − direct links : parameter linked to a single result, plus local variated parameter", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+    // calculate Y
+    const Y1 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y1, "cal");
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (R uniforme)
+    const Y2 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y2, "link");
+    const sel = await calcPage.getLinkedValueSelect(Y2);
+    await calcPage.changeSelectValue(sel, 1);
+    // vary W
+    const W = calcPage.getInputById("W");
+    await calcPage.setParamMode(W, "var");
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − direct links : parameter linked to a variated result", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+    // vary Q
+    const Q = calcPage.getInputById("Q");
+    await calcPage.setParamMode(Q, "var");
+    // calculate Y
+    const Y1 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y1, "cal");
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (R uniforme)
+    const Y2 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y2, "link");
+    const sel = await calcPage.getLinkedValueSelect(Y2);
+    await calcPage.changeSelectValue(sel, 1);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − direct links : parameter linked to a single extra result", async () => {
+    // create a Déversoirs dénoyés
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(9);
+
+    // create a Régime uniforme
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(3);
+    // link Q to CvQT (Déversoirs dénoyés)
+    const Q = calcPage.getInputById("Q");
+    await calcPage.setParamMode(Q, "link");
+    const sel = await calcPage.getLinkedValueSelect(Q);
+    await calcPage.changeSelectValue(sel, 1);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − direct links : parameter linked to a single extra result, plus local variated parameter", async () => {
+    // create a Déversoirs dénoyés
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(9);
+
+    // create a Régime uniforme
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(3);
+    // link Q to CvQT (Déversoirs dénoyés)
+    const Q = calcPage.getInputById("Q");
+    await calcPage.setParamMode(Q, "link");
+    const sel = await calcPage.getLinkedValueSelect(Q);
+    await calcPage.changeSelectValue(sel, 1);
+    // vary YB
+    const YB = calcPage.getInputById("YB");
+    await calcPage.setParamMode(YB, "var");
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − direct links : parameter linked to a variated extra result", async () => {
+    // create a Déversoirs dénoyés
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(9);
+    // vary BR
+    const BR = calcPage.getInputById("BR");
+    await calcPage.setParamMode(BR, "var");
+
+    // create a Régime uniforme
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(3);
+    // link Q to CvQT (Déversoirs dénoyés)
+    const Q = calcPage.getInputById("Q");
+    await calcPage.setParamMode(Q, "link");
+    const sel = await calcPage.getLinkedValueSelect(Q);
+    await calcPage.changeSelectValue(sel, 1);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − indirect links : parameter linked to a single parameter", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+
+    // create a Section paramétrée
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(2);
+    // link Y to Y (R uniforme)
+    const Yproxy = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Yproxy, "link");
+    const selYproxy = await calcPage.getLinkedValueSelect(Yproxy);
+    await calcPage.changeSelectValue(selYproxy, 1);
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (Sec param)
+    const Y = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Yproxy, "link");
+    const sel = await calcPage.getLinkedValueSelect(Yproxy);
+    await calcPage.changeSelectValue(selYproxy, 3);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − indirect links : parameter linked to a single parameter, plus local variated parameter", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+
+    // create a Section paramétrée
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(2);
+    // link Y to Y (R uniforme)
+    const Yproxy = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Yproxy, "link");
+    const selYproxy = await calcPage.getLinkedValueSelect(Yproxy);
+    await calcPage.changeSelectValue(selYproxy, 1);
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (Sec param)
+    const Y = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y, "link");
+    const sel = await calcPage.getLinkedValueSelect(Y);
+    await calcPage.changeSelectValue(sel, 3);
+    // vary W
+    const W = calcPage.getInputById("W");
+    await calcPage.setParamMode(W, "var");
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − indirect links : parameter linked to a variated parameter", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+    // vary Y
+    const Y1 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y1, "var");
+
+    // create a Section paramétrée
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(2);
+    // link Y to Y (R uniforme)
+    const Yproxy = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Yproxy, "link");
+    const selYproxy = await calcPage.getLinkedValueSelect(Yproxy);
+    await calcPage.changeSelectValue(selYproxy, 1);
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (Sec param)
+    const Y2 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y2, "link");
+    const sel = await calcPage.getLinkedValueSelect(Y2);
+    await calcPage.changeSelectValue(sel, 3);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − indirect links : parameter linked to a single result", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+    // calculate Y
+    const Y1 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y1, "cal");
+
+    // create a Section paramétrée
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(2);
+    // link Y to Y (R uniforme)
+    const Yproxy = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Yproxy, "link");
+    const selYproxy = await calcPage.getLinkedValueSelect(Yproxy);
+    await calcPage.changeSelectValue(selYproxy, 1);
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (Sec param)
+    const Y2 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y2, "link");
+    const sel = await calcPage.getLinkedValueSelect(Y2);
+    await calcPage.changeSelectValue(sel, 3);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − indirect links : parameter linked to a single result, plus local variated parameter", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+    // calculate Y
+    const Y1 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y1, "cal");
+
+    // create a Section paramétrée
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(2);
+    // link Y to Y (R uniforme)
+    const Yproxy = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Yproxy, "link");
+    const selYproxy = await calcPage.getLinkedValueSelect(Yproxy);
+    await calcPage.changeSelectValue(selYproxy, 1);
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (Sec param)
+    const Y2 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y2, "link");
+    const sel = await calcPage.getLinkedValueSelect(Y2);
+    await calcPage.changeSelectValue(sel, 3);
+    // vary W
+    const W = calcPage.getInputById("W");
+    await calcPage.setParamMode(W, "var");
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − indirect links : parameter linked to a variated result", async () => {
+    // create a Régime uniforme
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(3);
+    // vary Q
+    const Q = calcPage.getInputById("Q");
+    await calcPage.setParamMode(Q, "var");
+    // calculate Y
+    const Y1 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y1, "cal");
+
+    // create a Section paramétrée
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(2);
+    // link Y to Y (R uniforme)
+    const Yproxy = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Yproxy, "link");
+    const selYproxy = await calcPage.getLinkedValueSelect(Yproxy);
+    await calcPage.changeSelectValue(selYproxy, 1);
+
+    // create a PAB : dimensions
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(5);
+    // link Y to Y (Sec param)
+    const Y2 = calcPage.getInputById("Y");
+    await calcPage.setParamMode(Y2, "link");
+    const sel = await calcPage.getLinkedValueSelect(Y2);
+    await calcPage.changeSelectValue(sel, 3);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − indirect links : parameter linked to a single extra result", async () => {
+    // create a Déversoirs dénoyés
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(9);
+
+    // create a Section paramétrée
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(2);
+    // link Q to CvQT (Déversoirs dénoyés)
+    const Qproxy = calcPage.getInputById("Q");
+    await calcPage.setParamMode(Qproxy, "link");
+    const selYproxy = await calcPage.getLinkedValueSelect(Qproxy);
+    await calcPage.changeSelectValue(selYproxy, 1);
+
+    // create a Régime uniforme
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(3);
+    // link Q to CvQT (Sec param)
+    const Q = calcPage.getInputById("Q");
+    await calcPage.setParamMode(Q, "link");
+    const sel = await calcPage.getLinkedValueSelect(Q);
+    await calcPage.changeSelectValue(sel, 3);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − indirect links : parameter linked to a single extra result, plus local variated parameter", async () => {
+    // create a Déversoirs dénoyés
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(9);
+
+    // create a Section paramétrée
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(2);
+    // link Q to CvQT (Déversoirs dénoyés)
+    const Qproxy = calcPage.getInputById("Q");
+    await calcPage.setParamMode(Qproxy, "link");
+    const selYproxy = await calcPage.getLinkedValueSelect(Qproxy);
+    await calcPage.changeSelectValue(selYproxy, 1);
+
+    // create a Régime uniforme
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(3);
+    // link Q to CvQT (Sec param)
+    const Q = calcPage.getInputById("Q");
+    await calcPage.setParamMode(Q, "link");
+    const sel = await calcPage.getLinkedValueSelect(Q);
+    await calcPage.changeSelectValue(sel, 3);
+    // vary YB
+    const YB = calcPage.getInputById("YB");
+    await calcPage.setParamMode(YB, "var");
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+  it(" − indirect links : parameter linked to a variated extra result", async () => {
+    // create a Déversoirs dénoyés
+    await startPage.navigateTo();
+    await listPage.clickMenuEntryForCalcType(9);
+    // vary BR
+    const BR = calcPage.getInputById("BR");
+    await calcPage.setParamMode(BR, "var");
+
+    // create a Section paramétrée
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(2);
+    // link Q to CvQT (Déversoirs dénoyés)
+    const Qproxy = calcPage.getInputById("Q");
+    await calcPage.setParamMode(Qproxy, "link");
+    const selYproxy = await calcPage.getLinkedValueSelect(Qproxy);
+    await calcPage.changeSelectValue(selYproxy, 1);
+
+    // create a Régime uniforme
+    await navBar.clickNewCalculatorButton();
+    await listPage.clickMenuEntryForCalcType(3);
+    // link Q to CvQT (Sec param)
+    const Q = calcPage.getInputById("Q");
+    await calcPage.setParamMode(Q, "link");
+    const sel = await calcPage.getLinkedValueSelect(Q);
+    await calcPage.changeSelectValue(sel, 3);
+
+    await computeAndCheckPresenceOfResults();
+  });
+
+});
diff --git a/e2e/calculator.po.ts b/e2e/calculator.po.ts
index b47d2ef68..69cc7a7b0 100644
--- a/e2e/calculator.po.ts
+++ b/e2e/calculator.po.ts
@@ -120,11 +120,23 @@ export class CalculatorPage {
     await button.click();
     // for "var" mode, close the modal
     if (mode === "var") {
-      await browser.sleep(500);
+      await browser.sleep(500); // wait for the modal to appear
       await element(by.css("dialog-edit-param-values .mat-dialog-actions button")).click();
+      await browser.sleep(500); // wait for the navbar to reappear after modal dismissal
     }
   }
 
+  /**
+   * @param elt an <input> element
+   */
+  async getLinkedValueSelect(elt: ElementFinder): Promise<ElementFinder> {
+    // get parent (div.container)
+    const container = await this.findParentContainer(elt) as ElementFinder;
+    // find <select>
+    const select = container.element(by.css("param-link mat-select"));
+    return select;
+  }
+
   /**
    * Returns an object containing all the calculator's inputs values, indexed
    * by parameter ID
diff --git a/e2e/load-linked-params.e2e-spec.ts b/e2e/load-linked-params.e2e-spec.ts
index 2d6e91a20..bac4ab8ee 100644
--- a/e2e/load-linked-params.e2e-spec.ts
+++ b/e2e/load-linked-params.e2e-spec.ts
@@ -10,7 +10,7 @@ import { browser } from "protractor";
  * from one to another
  * @TODO les valeurs des Select sont comparées au français, pas très générique :/
  */
-describe("ngHyd − load session with multiple linked parameters", () => {
+describe("ngHyd − load session with multiple linked parameters − ", () => {
   let startPage: AppPage;
   let listPage: ListPage;
   let calcPage: CalculatorPage;
-- 
GitLab