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
117 lines
3.6 KiB
JavaScript
117 lines
3.6 KiB
JavaScript
import { buildComputationFromProps } from '/imports/api/engine/computation/buildCreatureComputation.js';
|
|
import { assert } from 'chai';
|
|
import clean from '../../utility/cleanProp.testFn.js';
|
|
|
|
export default function(){
|
|
let computation = buildComputationFromProps(testProperties);
|
|
const bySelf = (propId, note) => assertDeactivatedBySelf(computation, propId, note);
|
|
const byAncestor = (propId, note) => assertDeactivatedByAncestor(computation, propId, note);
|
|
const active = (propId, note) => assertActive(computation, propId, note);
|
|
|
|
// Items
|
|
active('itemUnequippedId', 'Unequipped items should be active');
|
|
byAncestor('itemUnequippedChildId', 'Children of unequipped items should be inactive');
|
|
active('itemEquippedId', 'Equipped items should be active');
|
|
active('itemEquippedChildId', 'Children of equipped items should be active');
|
|
|
|
// Spells
|
|
active('spellPreparedId', 'Prepared spells should be active');
|
|
byAncestor('spellPreparedChildId', 'Children of prepared spells should be deactivatedByAncestor');
|
|
active('spellAlwaysPreparedId', 'Always prepared spells should be active');
|
|
byAncestor('spellAlwaysPreparedChildId', 'Children of always prepared spells should be deactivatedByAncestor');
|
|
bySelf('spellUnpreparedId', 'Unprepared spells should be deactivatedBySelf');
|
|
byAncestor('spellUnpreparedChildId', 'Children of unprepared spells should be deactivatedByAncestor');
|
|
|
|
// Notes
|
|
active('NoteId', 'Notes should be active');
|
|
byAncestor('NoteChildId', 'children of notes should always be inactive');
|
|
}
|
|
|
|
function assertDeactivatedBySelf(computation, propId, note){
|
|
const prop = computation.propsById[propId];
|
|
assert.isTrue(prop.deactivatedBySelf, note);
|
|
assert.isTrue(prop.inactive, note + '. The property should be inactive');
|
|
}
|
|
|
|
function assertDeactivatedByAncestor(computation, propId, note){
|
|
const prop = computation.propsById[propId];
|
|
assert.isTrue(prop.deactivatedByAncestor, note);
|
|
assert.isTrue(prop.inactive, 'The property should be inactive');
|
|
}
|
|
|
|
function assertActive(computation, propId, note){
|
|
const prop = computation.propsById[propId];
|
|
assert.isNotTrue(prop.inactive, note);
|
|
assert.isNotTrue(prop.deactivatedBySelf, note);
|
|
assert.isNotTrue(prop.deactivatedBySelf, note);
|
|
}
|
|
|
|
var testProperties = [
|
|
// Items
|
|
clean({
|
|
_id: 'itemUnequippedId',
|
|
type: 'item',
|
|
ancestors: [{id: 'charId'}],
|
|
}),
|
|
clean({
|
|
_id: 'itemUnequippedChildId',
|
|
type: 'folder',
|
|
ancestors: [{id: 'charId'}, {id: 'itemUnequippedId'}],
|
|
}),
|
|
clean({
|
|
_id: 'itemEquippedId',
|
|
type: 'item',
|
|
equipped: true,
|
|
ancestors: [{id: 'charId'}],
|
|
}),
|
|
clean({
|
|
_id: 'itemEquippedChildId',
|
|
type: 'folder',
|
|
ancestors: [{id: 'charId'}, {id: 'itemEquippedId'}],
|
|
}),
|
|
// Spells
|
|
clean({
|
|
_id: 'spellPreparedId',
|
|
type: 'spell',
|
|
ancestors: [{id: 'charId'}],
|
|
prepared: true,
|
|
}),
|
|
clean({
|
|
_id: 'spellPreparedChildId',
|
|
type: 'folder',
|
|
ancestors: [{id: 'charId'}, {id: 'spellPreparedId'}],
|
|
}),
|
|
clean({
|
|
_id: 'spellAlwaysPreparedId',
|
|
type: 'spell',
|
|
ancestors: [{id: 'charId'}],
|
|
alwaysPrepared: true,
|
|
}),
|
|
clean({
|
|
_id: 'spellAlwaysPreparedChildId',
|
|
type: 'folder',
|
|
ancestors: [{id: 'charId'}, {id: 'spellAlwaysPreparedId'}],
|
|
}),
|
|
clean({
|
|
_id: 'spellUnpreparedId',
|
|
type: 'spell',
|
|
ancestors: [{id: 'charId'}],
|
|
}),
|
|
clean({
|
|
_id: 'spellUnpreparedChildId',
|
|
type: 'folder',
|
|
ancestors: [{id: 'charId'}, {id: 'spellUnpreparedId'}],
|
|
}),
|
|
// Notes
|
|
clean({
|
|
_id: 'NoteId',
|
|
type: 'note',
|
|
ancestors: [{id: 'charId'}],
|
|
}),
|
|
clean({
|
|
_id: 'NoteChildId',
|
|
type: 'folder',
|
|
ancestors: [{id: 'charId'}, {id: 'NoteId'}],
|
|
}),
|
|
];
|