|
|
@ -1,3 +1,4 @@ |
|
|
|
//Setup some enum's
|
|
|
|
const Presidence = Object.freeze({ |
|
|
|
General: "general", |
|
|
|
Row: "row", |
|
|
@ -24,6 +25,17 @@ const Capsource = Object.freeze({ |
|
|
|
General: "general" |
|
|
|
}) |
|
|
|
|
|
|
|
const TestResult = Object.freeze({ |
|
|
|
Pass: "Pass", |
|
|
|
Fail: "Fail" |
|
|
|
}) |
|
|
|
|
|
|
|
//Declare some readability constants
|
|
|
|
const ShouldApplyCap = true; |
|
|
|
const GeneralCapIsEnabled = true; |
|
|
|
const RowCapIsEnabled = true; |
|
|
|
|
|
|
|
|
|
|
|
function newResult(shouldApplyCap, reasonNum, trueCap, capSource, myBidNum) { |
|
|
|
let result = {}; |
|
|
|
result.shouldApplyCap = shouldApplyCap; |
|
|
@ -32,8 +44,13 @@ function newResult(shouldApplyCap, reasonNum, trueCap, capSource, myBidNum) { |
|
|
|
result.capSource = capSource; |
|
|
|
result.myBid = myBidNum; |
|
|
|
return result; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
function getBidCapReasonForScenario(scenario) { |
|
|
|
return getBidCapReason(scenario[0], scenario[1], scenario[2], scenario[3], scenario[4], scenario[5], scenario[6], scenario[7], scenario[8]); |
|
|
|
} |
|
|
|
|
|
|
|
//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; |
|
|
@ -142,22 +159,131 @@ function getBidCapReason(generalCapIsEnabled, generalCap, capPresidence, applyPr |
|
|
|
return results; |
|
|
|
} |
|
|
|
|
|
|
|
function Assert(testName, assertion) { |
|
|
|
const output = (assertion == true) ? "Pass" : "Fail"; |
|
|
|
console.log("Test "+ testName + "\t"+ output); |
|
|
|
//Stuff to Testing the actual functionality
|
|
|
|
function Assert(testName, thingsToCheck) { |
|
|
|
let allChecksPassed = true; |
|
|
|
let testCount = thingsToCheck.length; |
|
|
|
let testResults = []; |
|
|
|
for(let i = 0; i < testCount; i++ ){ |
|
|
|
let result = (thingsToCheck[i] == true); |
|
|
|
testResults.push(result); |
|
|
|
if(!result) { |
|
|
|
allChecksPassed = false; |
|
|
|
} |
|
|
|
} |
|
|
|
let output = {}; |
|
|
|
output.testName = testName; |
|
|
|
output.result = (allChecksPassed == true) ? TestResult.Pass: TestResult.Fail; |
|
|
|
output.individualResults = testResults; |
|
|
|
return output; |
|
|
|
} |
|
|
|
|
|
|
|
const expected1 = {}; |
|
|
|
const ShouldApplyCap = true; |
|
|
|
const GeneralCapIsEnabled = true; |
|
|
|
const RowCapIsEnabled = true; |
|
|
|
//All the scenarios we could run into
|
|
|
|
function getScenarios(){ |
|
|
|
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]; |
|
|
|
return useCases; |
|
|
|
} |
|
|
|
|
|
|
|
//And what we expect from each scenario
|
|
|
|
function getExpectations(){ |
|
|
|
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]; |
|
|
|
return expectedOutcomes; |
|
|
|
} |
|
|
|
|
|
|
|
function getTest(testId) { |
|
|
|
//TODO: THIS CODE IS AN IDEA AND IS NOT USED YET
|
|
|
|
let assertion = {}; |
|
|
|
assertion.id = testId; |
|
|
|
assertion.given = useCases[testId]; |
|
|
|
assertion.expect = expectedCoutomes[testId]; |
|
|
|
} |
|
|
|
|
|
|
|
//Setup our scenarios and expected values
|
|
|
|
let scenarios = getScenarios(); |
|
|
|
let expectations = getExpectations(); |
|
|
|
let verboseLevel = 1; |
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
//Run thru the scenarios
|
|
|
|
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]"); |
|
|
|
if(verboseLevel >= 2) { console.log("Test \tScenarioValues -> ExpectedValues"); } |
|
|
|
console.log("--------------------------------------------------------"); |
|
|
|
let scenarioReasons = []; |
|
|
|
for(let i = 0; i < scenariosCount; i++ ){ |
|
|
|
if(verboseLevel >= 2) { console.log(i+"\t["+ scenarios[i]+"] -> "+ "["+expectations[i]+"]");} |
|
|
|
let reason = getBidCapReasonForScenario(scenarios[i]); |
|
|
|
scenarioReasons.push(reason); |
|
|
|
} |
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//Do the actual assertions/tests to confirm we got the results we were expecting
|
|
|
|
const reasonsCount = scenarioReasons.length; |
|
|
|
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"); |
|
|
|
} else { |
|
|
|
console.log("Test\tOutome\t|| ScenarioValues -> ExpectedValues"); |
|
|
|
} |
|
|
|
console.log("-----------------------------------------------------------------"); |
|
|
|
let allTestsPassed = true; |
|
|
|
let failCount = 0; |
|
|
|
for(let i = 0; i < reasonsCount; i++ ){ |
|
|
|
//console.log(JSON.stringify(scenarioReasons[i]));
|
|
|
|
let assertions = [ |
|
|
|
(scenarioReasons[i].shouldApplyCap == expectations[i][0]), |
|
|
|
(scenarioReasons[i].reason == expectations[i][1]), |
|
|
|
(scenarioReasons[i].trueCap == expectations[i][2]), |
|
|
|
(scenarioReasons[i].capSource == expectations[i][3]), |
|
|
|
(scenarioReasons[i].myBid == expectations[i][4]) |
|
|
|
]; |
|
|
|
let testResult = Assert(i, assertions); |
|
|
|
if(verboseLevel >= 1){ |
|
|
|
let individualResults = testResult.individualResults.toString().replaceAll(",","\t| "); |
|
|
|
console.log(testResult.testName + "\t"+ testResult.result + "\t||"+ individualResults +"\t|| ["+scenarios[i]+"]\t-> ["+ expectations[i] +"]"); |
|
|
|
} else { |
|
|
|
console.log(testResult.testName + "\t"+ testResult.result + "\t|| ["+scenarios[i]+"]\t-> ["+ expectations[i] +"]"); |
|
|
|
} |
|
|
|
|
|
|
|
// 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 ); |
|
|
|
if(verboseLevel >= 2) { |
|
|
|
const ePad =" \t |"; |
|
|
|
const TestResult_ShouldApplyCap = (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; |
|
|
|
const TestResult_MyBid = (assertions[4] == true)? TestResult.Pass : TestResult.Fail; |
|
|
|
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 +"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]); |
|
|
|
console.log(ePad +"myBid: "+ TestResult_MyBid +"\t| "+ scenarioReasons[i].myBid +" \t| "+ expectations[i][4]); |
|
|
|
console.log(" +---------------------------------------------------"); |
|
|
|
console.log("---------------------------------------------------------------------"); |
|
|
|
} |
|
|
|
|
|
|
|
console.log(JSON.stringify(results1)); |
|
|
|
Assert(1,(results1.shouldApplyCap == true && results1.reason == 1 && results1.trueCap == 200 && results1.capSource == Capsource.General && mybid == 300)); |
|
|
|
if(testResult.result != TestResult.Pass){ |
|
|
|
allTestsPassed = false; |
|
|
|
failCount++; |
|
|
|
} |
|
|
|
} |
|
|
|
console.log("====================================================================="); |
|
|
|
if(allTestsPassed){ |
|
|
|
console.log("All "+reasonsCount +" tests passed"); |
|
|
|
} else { |
|
|
|
console.log(failCount+"/"+reasonsCount+" tests failed"); |
|
|
|
} |
|
|
|
console.log(""); |
|
|
|