Files
DiceCloud/app/imports/api/engine/computation/computeComputation/tests/computeAttribute.testFn.js
Stefan Zermatten e34f29f952 Computations now occupy their own nodes on the dependency graph
This mitigates most issues with properties having self-loops, 
particularly in cases like Strength where the value `strength` is used 
in the description of Strength
2021-12-07 21:05:24 +02:00

105 lines
2.8 KiB
JavaScript

import { buildComputationFromProps } from '/imports/api/engine/computation/buildCreatureComputation.js';
import { assert } from 'chai';
import computeCreatureComputation from '../../computeCreatureComputation.js';
import clean from '../../utility/cleanProp.testFn.js';
export default function(){
const computation = buildComputationFromProps(testProperties);
computeCreatureComputation(computation);
const prop = id => computation.propsById[id];
const scope = variableName => computation.scope[variableName];
assert.equal(prop('emptyId').value, 0, 'calculates empty props to zero');
assert.equal(prop('noVariableNameId').value, 8, 'Calculates props without a variable name');
assert.equal(prop('strengthId').value, 12, 'applies base values');
assert.equal(prop('strengthId').modifier, 1, 'calculates modifiers for basic properties');
assert.equal(scope('strength').modifier, 1, 'Access properties via variables');
assert.equal(prop('referencesDexId').value, 4, 'Access variable properties in calculations');
assert.equal(prop('hitDiceId').constitutionMod, 5, 'Hit dice get constitution modifier');
assert.equal(prop('overriddenDexId').overridden, true, 'override properties with the same variable name');
assert.equal(
prop('parseErrorId').baseValue.value, null,
'Parse errors should null the value'
);
}
var testProperties = [
clean({
_id: 'emptyId',
type: 'attribute',
attributeType: 'ability',
}),
clean({
_id: 'noVariableNameId',
type: 'attribute',
attributeType: 'ability',
baseValue: {
calculation: '8'
},
}),
clean({
_id: 'strengthId',
variableName: 'strength',
type: 'attribute',
attributeType: 'ability',
baseValue: {
calculation: '12'
},
}),
clean({
_id: 'overriddenDexId',
variableName: 'dexterity',
type: 'attribute',
attributeType: 'ability',
order: 1,
baseValue: {
calculation: '15'
},
}),
clean({
_id: 'dexterityId',
variableName: 'dexterity',
type: 'attribute',
attributeType: 'ability',
order: 2,
baseValue: {
calculation: '15'
},
}),
clean({
_id: 'constitutionId',
variableName: 'constitution',
type: 'attribute',
attributeType: 'ability',
baseValue: {
calculation: '21'
},
}),
clean({
_id: 'referencesDexId',
variableName: 'refDex',
type: 'attribute',
baseValue: {
calculation: 'dexterity.modifier + 2'
},
}),
clean({
_id: 'hitDiceId',
variableName: 'hd',
type: 'attribute',
attributeType: 'hitDice',
hitDiceSize: 'd8',
baseValue: {
calculation: '4'
},
}),
clean({
_id: 'parseErrorId',
variableName: 'parseError',
type: 'attribute',
attributeType: 'ability',
baseValue: {
calculation: '12 +'
},
}),
];