|
|
@ -31,16 +31,16 @@ const TestResult = Object.freeze({ |
|
|
|
}) |
|
|
|
|
|
|
|
//Declare some readability constants
|
|
|
|
const ShouldApplyCap = true; |
|
|
|
const GeneralCapIsEnabled = true; |
|
|
|
const RowCapIsEnabled = true; |
|
|
|
const CapIsTriggered = true; //myBid is over the targetCap the cap is enabled in some way for the row)
|
|
|
|
const GeneralCapIsEnabled = true; //The generalCap checkbox is checked
|
|
|
|
const RowCapIsEnabled = true; //The rowCap checkBox is checked for the county
|
|
|
|
|
|
|
|
|
|
|
|
function newResult(shouldApplyCap, reasonNum, trueCap, capSource, myBidNum) { |
|
|
|
function newResult(capIsTriggered, reasonNum, trueCapNum, capSource, myBidNum) { |
|
|
|
let result = {}; |
|
|
|
result.shouldApplyCap = shouldApplyCap; |
|
|
|
result.capIsTriggered = capIsTriggered; |
|
|
|
result.reason = reasonNum; |
|
|
|
result.trueCap = trueCap; |
|
|
|
result.trueCap = trueCapNum; |
|
|
|
result.capSource = capSource; |
|
|
|
result.myBid = myBidNum; |
|
|
|
return result; |
|
|
@ -75,7 +75,7 @@ function executeTests(scenarios, expectations, verboseLevel) { |
|
|
|
const scenariosCount = scenarios.length; |
|
|
|
console.log("VerboseLevel: "+ verboseLevel); |
|
|
|
console.log("Generating Scenarios... \t[generalCapIsEnabled, generalCap, capPresidence, applyPresidenceTo, oversightAction, rowCapIsEnabled, rowCap, tieBid, myBid]"); |
|
|
|
console.log("Generating ExpectedValues...\t[shouldApplyCap, reason, trueCap, capSource, myBid]"); |
|
|
|
console.log("Generating ExpectedValues...\t[capIsTriggered, reason, trueCap, capSource, myBid]"); |
|
|
|
if(verboseLevel >= 2) { console.log("Test \tScenarioValues -> ExpectedValues"); } |
|
|
|
console.log("--------------------------------------------------------"); |
|
|
|
let scenarioReasons = []; |
|
|
@ -91,7 +91,7 @@ function executeTests(scenarios, expectations, verboseLevel) { |
|
|
|
console.log(""); |
|
|
|
console.log("Running tests on each scenario..."); |
|
|
|
if(verboseLevel >= 1){ |
|
|
|
console.log("Test\tOutome\t||apply\t|reason\t|truCap\t|capSrc\t|myBid\t|| ScenarioValues -> ExpectedValues"); |
|
|
|
console.log("Test\tOutome\t||trgrd\t|reason\t|truCap\t|capSrc\t|myBid\t|| ScenarioValues -> ExpectedValues"); |
|
|
|
} else { |
|
|
|
console.log("Test\tOutome\t|| ScenarioValues -> ExpectedValues"); |
|
|
|
} |
|
|
@ -101,7 +101,7 @@ function executeTests(scenarios, expectations, verboseLevel) { |
|
|
|
for(let i = 0; i < reasonsCount; i++ ){ |
|
|
|
//console.log(JSON.stringify(scenarioReasons[i]));
|
|
|
|
let assertions = [ |
|
|
|
(scenarioReasons[i].shouldApplyCap == expectations[i][0]), |
|
|
|
(scenarioReasons[i].capIsTriggered == expectations[i][0]), |
|
|
|
(scenarioReasons[i].reason == expectations[i][1]), |
|
|
|
(scenarioReasons[i].trueCap == expectations[i][2]), |
|
|
|
(scenarioReasons[i].capSource == expectations[i][3]), |
|
|
@ -117,7 +117,7 @@ function executeTests(scenarios, expectations, verboseLevel) { |
|
|
|
|
|
|
|
if(verboseLevel >= 2) { |
|
|
|
const ePad =" \t |"; |
|
|
|
const TestResult_ShouldApplyCap = (assertions[0] == true)? TestResult.Pass : TestResult.Fail; |
|
|
|
const TestResult_CapIsTriggered = (assertions[0] == true)? TestResult.Pass : TestResult.Fail; |
|
|
|
const TestResult_Reason = (assertions[1] == true)? TestResult.Pass : TestResult.Fail; |
|
|
|
const TestResult_TrueCap = (assertions[2] == true)? TestResult.Pass : TestResult.Fail; |
|
|
|
const TestResult_CapSource = (assertions[3] == true)? TestResult.Pass : TestResult.Fail; |
|
|
@ -125,7 +125,7 @@ function executeTests(scenarios, expectations, verboseLevel) { |
|
|
|
console.log(" +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); |
|
|
|
console.log(ePad +" ITEM RESULT \t| ACTUAL \t| EXPECTED"); |
|
|
|
console.log(" +---------------------------------------------------"); |
|
|
|
console.log(ePad +"shouldApplyCap: "+ TestResult_ShouldApplyCap +" \t| "+ scenarioReasons[i].shouldApplyCap +" \t| "+ expectations[i][0]); |
|
|
|
console.log(ePad +"capIsTriggered: "+ TestResult_CapIsTriggered +" \t| "+ scenarioReasons[i].capIsTriggered +" \t| "+ expectations[i][0]); |
|
|
|
console.log(ePad +"reason: "+ TestResult_Reason +"\t| "+ scenarioReasons[i].reason +" \t| "+ expectations[i][1]); |
|
|
|
console.log(ePad +"trueCap: "+ TestResult_TrueCap +"\t| "+ scenarioReasons[i].trueCap +" \t| "+ expectations[i][2]); |
|
|
|
console.log(ePad +"capSource: "+ TestResult_CapSource+"\t| "+ scenarioReasons[i].capSource +"\t| "+ expectations[i][3]); |
|
|
@ -160,15 +160,15 @@ function getTest(testId) { |
|
|
|
} |
|
|
|
|
|
|
|
//The function from our main codebase
|
|
|
|
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); |
|
|
|
function getBidCapReason(generalCapIsEnabled, pGeneralCap, capPresidence, applyPresidenceTo, oversightAction, rowCapIsEnabled, pRowCap, pTieBid, pMyBid) { |
|
|
|
let tieBid = Number(pTieBid); |
|
|
|
let winBid = Number(pTieBid) + 25; |
|
|
|
let generalCap = Number(pGeneralCap); |
|
|
|
let rowCap = Number(pRowCap); |
|
|
|
let myBid = Number(pMyBid); |
|
|
|
|
|
|
|
//Build our response object
|
|
|
|
let results = newResult(false, 0, null, null, myBidNum); |
|
|
|
let results = newResult(false, 0, null, null, myBid); |
|
|
|
|
|
|
|
//WIP - LOTS of rules here - these are just the beginning.
|
|
|
|
if(generalCapIsEnabled) { |
|
|
@ -177,29 +177,29 @@ function getBidCapReason(generalCapIsEnabled, generalCap, capPresidence, applyPr |
|
|
|
|
|
|
|
switch(oversightAction) { |
|
|
|
case Oversight.Win: |
|
|
|
if(winBidNum > generalCapNum) { |
|
|
|
results = newResult(true, 1, generalCapNum, Capsource.General, generalCapNum); |
|
|
|
if(winBid > generalCap) { |
|
|
|
results = newResult(true, 1, generalCap, Capsource.General, generalCap); |
|
|
|
return results; |
|
|
|
} |
|
|
|
//winBidNum <= generalCapNum
|
|
|
|
results = newResult(false, 2, generalCapNum, Capsource.General, myBidNum); |
|
|
|
//winBid <= generalCap
|
|
|
|
results = newResult(false, 2, generalCap, Capsource.General, myBid); |
|
|
|
break; |
|
|
|
|
|
|
|
case Oversight.Tie: |
|
|
|
if(tieBidNum > generalCapNum) { |
|
|
|
results = newResult(true, 3, generalCapNum, Capsource.General, generalCapNum); |
|
|
|
if(tieBid > generalCap) { |
|
|
|
results = newResult(true, 3, generalCap, Capsource.General, generalCap); |
|
|
|
return results; |
|
|
|
} |
|
|
|
//tieBidNum <= generalCapNum
|
|
|
|
results = newResult(false, 4, generalCapNum, Capsource.General, myBidNum); |
|
|
|
//tieBid <= generalCap
|
|
|
|
results = newResult(false, 4, generalCap, Capsource.General, myBid); |
|
|
|
break; |
|
|
|
|
|
|
|
case Oversight.Watch: |
|
|
|
results = newResult(false, 5, generalCapNum, Capsource.General, myBidNum); |
|
|
|
results = newResult(false, 5, generalCap, Capsource.General, myBid); |
|
|
|
break; |
|
|
|
|
|
|
|
case Oversight.Ignore: |
|
|
|
results = newResult(false, 6, generalCapNum, Capsource.General, myBidNum); |
|
|
|
results = newResult(false, 6, generalCap, Capsource.General, myBid); |
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
@ -234,29 +234,29 @@ function getBidCapReason(generalCapIsEnabled, generalCap, capPresidence, applyPr |
|
|
|
if(rowCapIsEnabled) { |
|
|
|
switch(oversightAction) { |
|
|
|
case Oversight.Win: |
|
|
|
if(winBidNum > rowCapNum) { |
|
|
|
results = newResult(true, 101, rowCapNum, Capsource.Row, rowCapNum); |
|
|
|
if(winBid > rowCap) { |
|
|
|
results = newResult(true, 101, rowCap, Capsource.Row, rowCap); |
|
|
|
return results; |
|
|
|
} |
|
|
|
//winBidNum <= rowCapNum
|
|
|
|
results = newResult(false, 102, rowCapNum, Capsource.Row, myBidNum); |
|
|
|
//winBid <= rowCap
|
|
|
|
results = newResult(false, 102, rowCap, Capsource.Row, myBid); |
|
|
|
break; |
|
|
|
|
|
|
|
case Oversight.Tie: |
|
|
|
if(tieBidNum > rowCapNum) { |
|
|
|
results = newResult(true, 103, rowCapNum, Capsource.Row, rowCapNum); |
|
|
|
if(tieBid > rowCap) { |
|
|
|
results = newResult(true, 103, rowCap, Capsource.Row, rowCap); |
|
|
|
return results; |
|
|
|
} |
|
|
|
//tieBidNum <= generalCapNum
|
|
|
|
results = newResult(false, 104, rowCapNum, Capsource.Row, myBidNum); |
|
|
|
//tieBid <= generalCap
|
|
|
|
results = newResult(false, 104, rowCap, Capsource.Row, myBid); |
|
|
|
break; |
|
|
|
|
|
|
|
case Oversight.Watch: |
|
|
|
results = newResult(false, 105, null, Capsource.Row, myBidNum); |
|
|
|
results = newResult(false, 105, null, Capsource.Row, myBid); |
|
|
|
break; |
|
|
|
|
|
|
|
case Oversight.Ignore: |
|
|
|
results = newResult(false, 106, null, Capsource.Row, myBidNum); |
|
|
|
results = newResult(false, 106, null, Capsource.Row, myBid); |
|
|
|
break; |
|
|
|
default: |
|
|
|
//We should never get here because all oversight actions have been covered.
|
|
|
@ -271,20 +271,40 @@ function getBidCapReason(generalCapIsEnabled, generalCap, capPresidence, applyPr |
|
|
|
//All the scenarios we could run into
|
|
|
|
function getUseCases(){ |
|
|
|
let useCases = []; //[generalCapIsEnabled, generalCap, capPresidence, applyPresidenceTo, oversightAction, rowCapIsEnabled, rowCap, tieBid, myBid];
|
|
|
|
useCases[0] = [GeneralCapIsEnabled, 300, Presidence.General, AppliesTo.All, Oversight.Win, !RowCapIsEnabled, null, 500, 350]; |
|
|
|
useCases[1] = [GeneralCapIsEnabled, 300, Presidence.General, AppliesTo.All, Oversight.Win, RowCapIsEnabled, 450 , 500, 350]; |
|
|
|
useCases[2] = [GeneralCapIsEnabled, 300, Presidence.General, AppliesTo.All, Oversight.Tie, !RowCapIsEnabled, null, 500, 350]; |
|
|
|
useCases[3] = [GeneralCapIsEnabled, 300, Presidence.General, AppliesTo.All, Oversight.Tie, RowCapIsEnabled, 450 , 500, 350]; |
|
|
|
|
|
|
|
// [generalCapIsEnabled, gCap, capPresidence , applyTo , rowAction , rowCapIsEnabled, rCap, tie, myBid]; //win
|
|
|
|
//winBid > generalCap > rowCap > myBid
|
|
|
|
useCases[0] = [GeneralCapIsEnabled, 350, Presidence.General, AppliesTo.All, Oversight.Win, !RowCapIsEnabled, null, 550, 225]; //575
|
|
|
|
useCases[1] = [GeneralCapIsEnabled, 350, Presidence.General, AppliesTo.All, Oversight.Win, RowCapIsEnabled, 450 , 550, 225]; //575
|
|
|
|
//winBid = generalCap > rowCap > myBid
|
|
|
|
useCases[2] = [GeneralCapIsEnabled, 350, Presidence.General, AppliesTo.All, Oversight.Win, !RowCapIsEnabled, null, 275, 225]; //300
|
|
|
|
useCases[3] = [GeneralCapIsEnabled, 350, Presidence.General, AppliesTo.All, Oversight.Win, RowCapIsEnabled, 450 , 275, 225]; //300
|
|
|
|
//winBid < generalCap > rowCap > myBid
|
|
|
|
useCases[4] = [GeneralCapIsEnabled, 350, Presidence.General, AppliesTo.All, Oversight.Win, !RowCapIsEnabled, null, 250, 225]; //275
|
|
|
|
useCases[5] = [GeneralCapIsEnabled, 350, Presidence.General, AppliesTo.All, Oversight.Win, RowCapIsEnabled, 450 , 250, 225]; //275
|
|
|
|
|
|
|
|
//useCases[2] = [GeneralCapIsEnabled, 300, Presidence.General, AppliesTo.All, Oversight.Tie, !RowCapIsEnabled, null, 500, 350];
|
|
|
|
//useCases[3] = [GeneralCapIsEnabled, 300, Presidence.General, AppliesTo.All, Oversight.Tie, RowCapIsEnabled, 450 , 500, 350];
|
|
|
|
return useCases; |
|
|
|
} |
|
|
|
|
|
|
|
//And what we expect from each scenario
|
|
|
|
function getExpectedOutcomes(){ |
|
|
|
let expectedOutcomes = []; //[shouldApplyCap, reason, trueCap, capSource, myBid]);
|
|
|
|
expectedOutcomes[0] = [GeneralCapIsEnabled, 1, 300, Capsource.General, 300]; |
|
|
|
expectedOutcomes[1] = [GeneralCapIsEnabled, 1, 300, Capsource.General, 300]; |
|
|
|
expectedOutcomes[2] = [GeneralCapIsEnabled, 3, 300, Capsource.General, 300]; |
|
|
|
expectedOutcomes[3] = [GeneralCapIsEnabled, 4, 300, Capsource.General, 300]; |
|
|
|
let expectedOutcomes = [];//[capIsTriggered, reason, trueCap, capSource, myBid]);
|
|
|
|
|
|
|
|
// [ capIsTriggered, r,trueCap, capSource, myBid] //wBid,(gC||rC ) -> tCap? myBid
|
|
|
|
//winBid > generalCap > rowCap > myBid
|
|
|
|
expectedOutcomes[0] = [!CapIsTriggered, 1, 350, Capsource.General, 225]; //575,(350||null) -> 350 ? 225
|
|
|
|
expectedOutcomes[1] = [!CapIsTriggered, 1, 350, Capsource.General, 225]; //575,(350||450) -> 350 ? 225
|
|
|
|
//winBid = generalCap > rowCap > myBid
|
|
|
|
expectedOutcomes[2] = [!CapIsTriggered, 0, 350, Capsource.General, 225]; //300,(350||null) -> 350 ? 225
|
|
|
|
expectedOutcomes[3] = [!CapIsTriggered, 0, 350, Capsource.General, 225]; //300,(350||450) -> 350 ? 225
|
|
|
|
//winBid < generalCap > rowCap > myBid
|
|
|
|
expectedOutcomes[4] = [!CapIsTriggered, 0, 350, Capsource.General, 225]; //275,(350||null) -> 350 ? 225
|
|
|
|
expectedOutcomes[5] = [!CapIsTriggered, 0, 350, Capsource.General, 225]; //275,(350||450) -> 350 ? 225
|
|
|
|
|
|
|
|
//expectedOutcomes[2] = [CapIsTriggered, 3, 300, Capsource.General, 300];
|
|
|
|
//expectedOutcomes[3] = [CapIsTriggered, 4, 300, Capsource.General, 300];
|
|
|
|
return expectedOutcomes; |
|
|
|
} |
|
|
|
|
|
|
|