From f981d63d4e14471ddc7facca8db61a82cdf5e93b Mon Sep 17 00:00:00 2001
From: "mathias.chouet" <mathias.chouet@irstea.fr>
Date: Mon, 8 Jul 2019 12:01:17 +0200
Subject: [PATCH] PAB : add explicit log message when Z1 < Z2

---
 spec/pab/pab.spec.ts | 24 ++++++++++++++++++++++++
 src/nub.ts           |  1 -
 src/pab/pab.ts       |  4 ++++
 src/util/message.ts  |  5 +++++
 4 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/spec/pab/pab.spec.ts b/spec/pab/pab.spec.ts
index 6c223077..77e42a14 100644
--- a/spec/pab/pab.spec.ts
+++ b/spec/pab/pab.spec.ts
@@ -170,6 +170,7 @@ describe("Class Pab: ", () => {
             checkPabResults(pab, 0.773);
         });
     });
+
     describe("Vanne levante sur Cloison aval", () => {
         beforeEach( () => {
             pab = createPabTest();
@@ -199,4 +200,27 @@ describe("Class Pab: ", () => {
                 .toBe(MessageCode.ERROR_CLOISON_AVAL_UN_OUVRAGE_REGULE);
         });
     });
+
+    describe("when Z1 is too low compared to ZDV", () => {
+        it("logs should appear if dichotomy does not converge", () => {
+            pab.calculatedParam = pab.prms.Q;
+            pab.prms.Z1.singleValue = 78.26; // @WTF 78.27 in the example above works, 78.26 fails !
+            pab.CalcSerie();
+            expect(pab.result.hasLog).toBe(true);
+            expect(pab.result.resultElement.log.messages[0].code)
+                .toBe(MessageCode.ERROR_DICHO_CONVERGE); // @TODO or other error message ?
+        });
+    });
+
+    describe("variating Z1", () => {
+        it("logs should appear when Z1 < Z2", () => {
+            pab.calculatedParam = pab.prms.Q;
+            pab.prms.Z1.setValues(73, 85, 6);
+            pab.CalcSerie();
+            expect(pab.result.nbResultElements).toBe(3);
+            expect(pab.result.hasLog).toBe(true);
+            expect(pab.result.resultElements[0].log.messages[0].code).toBe(MessageCode.ERROR_Z1_LOWER_THAN_Z2);
+        });
+    });
+
 });
diff --git a/src/nub.ts b/src/nub.ts
index b98610d3..c7226fd0 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -411,7 +411,6 @@ export abstract class Nub extends ComputeNode implements IObservable {
                 if (this._result.resultElement.ok) {
                     rInit = this._result.resultElement.vCalc;
                 }
-                this._result.globalLog.addLog(this._result.globalLog);
                 // update progress
                 this.progress += progressStep;
             }
diff --git a/src/pab/pab.ts b/src/pab/pab.ts
index c749ae30..78537edb 100644
--- a/src/pab/pab.ts
+++ b/src/pab/pab.ts
@@ -110,6 +110,10 @@ export class Pab extends Nub {
             this.currentResult = new Result(new Message(MessageCode.ERROR_CLOISON_AVAL_UN_OUVRAGE_REGULE));
             return this.result;
         }
+        if (sVarCalc === "Q" && this.prms.Z1.v < this.prms.Z2.v) {
+            this.currentResult = new Result(new Message(MessageCode.ERROR_Z1_LOWER_THAN_Z2));
+            return this.result;
+        }
         return super.Calc(sVarCalc, rInit);
     }
 
diff --git a/src/util/message.ts b/src/util/message.ts
index 4c2778db..ace85e54 100644
--- a/src/util/message.ts
+++ b/src/util/message.ts
@@ -118,6 +118,11 @@ export enum MessageCode {
      */
     ERROR_CLOISON_AVAL_UN_OUVRAGE_REGULE,
 
+    /**
+     * La cote amont est plus basse que la cote aval
+     */
+    ERROR_Z1_LOWER_THAN_Z2,
+
     /**
      * internationalisation : langue non prise en charge
      */
-- 
GitLab