From 9bac34a6e7d4dba68b17271d0e77435c6a86953e Mon Sep 17 00:00:00 2001 From: Steven Allen Date: Mon, 4 Dec 2023 22:53:24 -0800 Subject: [PATCH] rewrite and test for bidcap logic --- test.js | 157 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 test.js diff --git a/test.js b/test.js new file mode 100644 index 0000000..a618a51 --- /dev/null +++ b/test.js @@ -0,0 +1,157 @@ +const Presidence = Object.freeze({ + General: "general", + Row: "row", + Highest: "highest", + Lowest: "lowest" +}) + +const AppliesTo = Object.freeze({ + All: "all", + None: "none", + Capped: "capped", + Uncapped: "uncapped" +}) + +const Oversight = Object.freeze({ + Win: "win", + Tie: "tie", + Watch: "watch", + Ignore: "ignore" +}) + +const Capsource = Object.freeze({ + Row: "row", + General: "general" +}) + +function newResult(shouldApplyCap, reasonNum, trueCap, capSource, myBidNum) { + let result = {}; + result.shouldApplyCap = shouldApplyCap; + result.reason = reasonNum; + result.trueCap = trueCap; + result.capSource = capSource; + result.myBid = myBidNum; + return results; +} + +function getBidCapReason(generalCapIsEnabled, generalCap, capPresidence, applyPresidenceTo, oversightAction, rowCapIsEnabled, rowCap, tieBid, myBid) { + let tieBidNum = number(tieBid); + let winBidNum = number(tieBid) + 25; + let generalCapNum = number(generalCap); + let rowCapNum = number(rowCap); + let myBidNum = number(myBid); + + //Build our response object + let results = newResult(false, 0, null, null, myBidNum); + + //WIP - LOTS of rules here - these are just the beginning. + if(generalCapIsEnabled) { + if(capPresidence == Presidence.General) { + if(applyPresidenceTo == AppliesTo.All) { + + switch(oversightAction) { + case Oversight.Win: + if(winBidNum > generalCapNum) { + results = newResult(true, 1, generalCapNum, Capsource.General, generalCapNum); + return results; + } + //winBidNum <= generalCapNum + results = newResult(false, 2, generalCapNum, Capsource.General, myBidNum); + break; + + case Oversight.Tie: + if(tieBidNum > generalCapNum) { + results = newResult(true, 3, generalCapNum, Capsource.General, generalCapNum); + return results; + } + //tieBidNum <= generalCapNum + results = newResult(false, 4, generalCapNum, Capsource.General, myBidNum); + break; + + case Oversight.Watch: + results = newResult(false, 5, generalCapNum, Capsource.General, myBidNum); + break; + + case Oversight.Ignore: + results = newResult(false, 6, generalCapNum, Capsource.General, myBidNum); + break; + + default: + //We should never get here because all oversight actions have been covered. + } + return results; + } + else if(applyPresidenceTo == AppliesTo.None){ + + } + else if(applyPresidenceTo == AppliesTo.Capped){ + + } + else if(applyPresidenceTo == AppliesTo.Uncapped){ + + } + return results; + } + else if(capPresidence == Presidence.Row) { + return results; + } + else if(capPresidence == Presidence.Highest){ + return results; + } + else if(capPresidence == Presidence.Lowest){ + return results; + } + } + + //If we made it here, generalCapIsEnabled is FALSE so no conflicts should exist + //This means rowCaps are the winners if they are enabled. + if(rowCapIsEnabled) { + switch(oversightAction) { + case Oversight.Win: + if(winBidNum > rowCapNum) { + results = newResult(true, 101, rowCapNum, Capsource.Row, rowCapNum); + return results; + } + //winBidNum <= rowCapNum + results = newResult(false, 102, rowCapNum, Capsource.Row, myBidNum); + break; + + case Oversight.Tie: + if(tieBidNum > rowCapNum) { + results = newResult(true, 103, rowCapNum, Capsource.Row, rowCapNum); + return results; + } + //tieBidNum <= generalCapNum + results = newResult(false, 104, rowCapNum, Capsource.Row, myBidNum); + break; + + case Oversight.Watch: + results = newResult(false, 105, null, Capsource.Row, myBidNum); + break; + + case Oversight.Ignore: + results = newResult(false, 106, null, Capsource.Row, myBidNum); + break; + default: + //We should never get here because all oversight actions have been covered. + } + return results; + } + //Caps are not enabled for this row. + + return results; +} + + +const expected1 = {}; +const ShouldApplyCap = true; +const GeneralCapIsEnabled = true; +const RowCapIsEnabled = true; + + +// generalCapIsEnabled , generalCap , capPresidence , applyPresidenceTo , oversightAction , rowCapIsEnabled , rowCap , tieBid , myBid +const results1 = getBidCapReason( GeneralCapIsEnabled , 300 , Presidence.General , AppliesTo.All , Oversight.Win , !RowCapIsEnabled , null , 500 , 300 ); +const results2 = getBidCapReason( GeneralCapIsEnabled , 300 , Presidence.General , AppliesTo.All , Oversight.Win , RowCapIsEnabled , 450 , 500 , 300 ); +const results3 = getBidCapReason( GeneralCapIsEnabled , 300 , Presidence.General , AppliesTo.All , Oversight.Tie , !RowCapIsEnabled , null , 500 , 300 ); + +console.log(results1.shouldApplyCap = true && results1.reason == 1 && results1.trueCap == 200 && results1.capSource == Capsource.General && mybid == 300);