Files

149 lines
5.2 KiB
JavaScript

const { k } = require('..');
describe('Calculation.js',()=>{
describe('calcAttribute({trigger,attributes})',()=>{
Object.entries({
vigilance:[{logic:2,willpower:2},{logic:0,willpower:-1},{logic:-1,willpower:-1}],
build:[{size:2,stamina:2},{size:2,stamina:-1},{size:-1,stamina:-1}],
intuition:[{charisma:2,wisdom:2},{charisma:2,wisdom:-1},{charisma:-1,wisdom:-1}],
reflex:[{athletics:2,aptitude:2},{athletics:2,aptitude:-1},{athletics:-1,aptitude:-1}]
}).forEach(([attr,propArray])=>{
propArray.forEach(obj => {
const entries = Object.entries(obj);
const [prop1,value1,prop2,value2] = entries.flat();
const expectedVal = 10 + value1 + value2;
const itMsg = `Given ${value1} ${prop1} and ${value2} ${prop2}, should return ${expectedVal} for ${attr}`
it(itMsg,()=>{
k.getAllAttrs({
callback:(attributes,sections,casc)=>{
attributes[prop1] = value1;
attributes[prop2] = value2;
const retVal = k.callFunc('calcAttribute',{trigger:{name:`${attr}_goal`},attributes});
expect(retVal).toBe(expectedVal);
}
});
});
});
});
});
describe('calcAttributeMod({trigger,attributes})',()=>{
Object.entries({
vigilance:[9,11,14],
build:[9,11,14],
intuition:[9,11,14],
reflex:[9,11,14],
}).forEach(([attr,numArr]) => {
numArr.forEach((num)=>{
const expectedVal = num - 11;
const itMsg = `Given ${num} ${attr}, should return ${expectedVal} for ${attr}_mod`;
it(itMsg,()=>{
k.getAllAttrs({
callback:(attributes,sections,casc)=>{
attributes[`${attr}_goal`] = num;
expect(k.callFunc('calcAttributeMod',{trigger:{name:attr},attributes})).toBe(expectedVal);
}
});
});
});
});
});
describe('calcMovement({attributes})',()=>{
[-1,0,2].forEach(num => {
const expectedVal = 20 + num * 5;
const itMsg = `Given ${num} athletics, should return ${expectedVal}`;
it(itMsg,()=>{
k.getAllAttrs({
callback:(attributes,sections,casc) => {
attributes.athletics = num;
expect(k.callFunc('calcMovement',{attributes})).toBe(expectedVal);
}
})
})
});
});
describe('calcSprint({attributes})',()=>{
[-1,0,2].forEach(num => {
const expectedVal = 10 + num * 5;
const itMsg = `Given ${num} athletics, should return ${expectedVal}`;
it(itMsg,()=>{
k.getAllAttrs({
callback:(attributes,sections,casc) => {
attributes.athletics = num;
expect(k.callFunc('calcSprint',{attributes})).toBe(expectedVal);
}
});
});
});
});
describe('calcItemSlotsMax({attributes})',()=>{
it('Max item slots should equal the largest of SIZ + 3 or SIZ + ATH + 1',()=>{
k.getAllAttrs({
callback:(attributes,sections,casc)=>{
// siz + athletics + 1 < siz + 3
attributes.attributes.size = 4;
attributes.attributes.athletics = 1;
const sizExpected = 7;
const sizReceived = k.callFunc('calcItemSlotsMax',{attributes});
expect(sizReceived).toBe(sizExpected);
// siz + athletics + 1 === siz +3
attributes.attributes.size = 4;
attributes.attributes.athletics = 2;
const equalExpected = 7;
const equalReceived = k.callFunc('calcItemSlotsMax',{attributes});
expect(equalReceived).toBe(equalExpected);
// siz + athletics + 1 > siz +3
attributes.attributes.size = 4;
attributes.attributes.athletics = 4;
const athExpected = 9;
const athReceived = k.callFunc('calcItemSlotsMax',{attributes});
expect(athReceived).toBe(athExpected);
}
});
});
});
describe('calcUsedSlots({attributes,sections})',()=>{
it('used Item slots should equal the number of equipped items',()=>{
k.getAllAttrs({
callback:(attributes,sections,casc)=>{
// no equipped items
const emptyUsed = k.callFunc('calcUsedSlots',{attributes,sections});
expect(emptyUsed).toBe(0);
// 3 equipped gear pieces; 1 that doesn't use a slot, no weapons
const equippedRows = [1,2,3].map(n=>k.generateRowID('repeating_equipped',sections));
equippedRows.forEach((row,n)=>
attributes.attributes[`${row}_uses_slot`] =
n === 1 ?
0 :
1
);
const equipUsed = k.callFunc('calcUsedSlots',{attributes,sections});
expect(equipUsed).toBe(2);
// 3 equipped gear pieces; 1 that doesn't use a slot, and 2 weapons; 1 that doesn't use a slot
const weaponRows = [1,2].map(n=>k.generateRowID('repeating_weapon',sections));
weaponRows.forEach((row,n)=>
attributes.attributes[`${row}_uses_slot`] =
n === 1 ?
0 :
1
);
const weaponUsed = k.callFunc('calcUsedSlots',{attributes,sections});
expect(weaponUsed).toBe(3);
}
})
})
});
});