diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index eaff7587d8aaee2286cb790429a37cc6a876d18d..49d6cc12c0ed94f86a31e88f7effe3e278f513e1 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 0000000000000000000000000000000000000000..179b55f54a5877f9ffd1c0f99ba62cc6a44b1d9c --- /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 b47d2ef68a68a78295402fcbea5989e0c5304d2c..69cc7a7b04f36837903b10a36fcb7f6173faefd7 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 2d6e91a20929090e78898ad6c23f87d7d22799c9..bac4ab8eeb3ae7256a52b12c60c012a25e6fa90c 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;