1 changed files with 157 additions and 0 deletions
@ -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); |
Loading…
Reference in new issue