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]; assert.equal( prop('strengthId').value, 8, 'The proficiency bonus should not change the strength score' ); assert.equal( prop('strengthId').modifier, -1, 'The proficiency bonus should not change the strength modifier' ); assert.exists(prop('actionId').attackRoll.proficiencies, 'The proficiency aggregator should be here') assert.exists(prop('actionId').attackRoll.proficiencies[0], 'The proficiency should be here') // attack roll = strength.mod + proficiencyBonus/2 rounded down // = -1 + 13/2 = -1 + 6 = 5 assert.equal( prop('actionId').attackRoll.value, 5, 'The proficiency should apply correctly to modify the attack roll' ); } var testProperties = [ clean({ _id: 'strengthId', variableName: 'strength', type: 'attribute', attributeType: 'ability', baseValue: { calculation: '8' }, }), clean({ _id: 'actionId', type: 'action', ancestors: [{ id: 'charId' }], attackRoll: { calculation: 'strength.modifier', }, tags: ['rapier', 'martial weapon', 'weapon', 'attack'] }), clean({ _id: 'profBonusId', type: 'attribute', variableName: 'proficiencyBonus', ancestors: [{ id: 'charId' }], baseValue: { calculation: '13' }, }), clean({ _id: 'tagTargetedProficiency', type: 'proficiency', stats: ['strength'], // Should be ignored, we are targeting by tags value: 0.49, targetByTags: true, targetTags: ['martial weapon'] }), ];