diff --git a/app/imports/api/engine/action/applyProperties/applyAdjustmentProperty.test.ts b/app/imports/api/engine/action/applyProperties/applyAdjustmentProperty.test.ts index ab60949a..d4063fe2 100644 --- a/app/imports/api/engine/action/applyProperties/applyAdjustmentProperty.test.ts +++ b/app/imports/api/engine/action/applyProperties/applyAdjustmentProperty.test.ts @@ -86,7 +86,7 @@ describe('Apply Adjustment Properties', function () { { inline: true, name: 'Attribute damage', - value: 'Dexterity set to 11', + value: 'Dexterity set from 13 to 11', } ], targetIds: [creatureId], diff --git a/app/imports/api/engine/action/applyProperties/applyBuffProperty.test.ts b/app/imports/api/engine/action/applyProperties/applyBuffProperty.test.ts new file mode 100644 index 00000000..27a528c1 --- /dev/null +++ b/app/imports/api/engine/action/applyProperties/applyBuffProperty.test.ts @@ -0,0 +1,116 @@ +import { assert } from 'chai'; +import { + allMutations, + createTestCreature, + getRandomIds, + removeAllCreaturesAndProps, + runActionById +} from '/imports/api/engine/action/functions/actionEngineTest.testFn'; + +const [ + creatureId, targetCreatureId, buffId +] = getRandomIds(100); + +const actionTestCreature = { + _id: creatureId, + props: [ + // If branch + { + _id: buffId, + type: 'buff', + description: { text: 'This buff reduces AC of target by difference between the strength of caster {strength} and the target {~target.strength}' }, + children: [ + { + type: 'effect', + stats: ['armor'], + operation: 'add', + amount: { calculation: '~target.strength - strength' }, + }, + ], + }, + { + type: 'attribute', + attributeType: 'stat', + variableName: 'strength', + baseValue: { calculation: '18' }, + }, + ], +}; + +const actionTargetCreature = { + _id: targetCreatureId, + props: [ + { + type: 'attribute', + attributeType: 'stat', + variableName: 'armor', + baseValue: { calculation: '10' }, + }, + { + type: 'attribute', + attributeType: 'ability', + variableName: 'strength', + baseValue: { calculation: '12' }, + }, + ], +}; + +describe('Apply Branch Properties', function () { + // Increase timeout + this.timeout(8000); + + before(async function () { + await removeAllCreaturesAndProps(); + await createTestCreature(actionTestCreature); + await createTestCreature(actionTargetCreature); + }); + + it.only('Applies a buff and freezes some variables', async function () { + const action = await runActionById(buffId, [targetCreatureId]); + const mutations = allMutations(action); + // Get random Ids of inserted props + const insertedBuffId = mutations?.[1]?.inserts?.[0]?._id; + const insertedEffectId = mutations?.[1]?.inserts?.[1]?._id; + assert.deepEqual(mutations, [{ + contents: [{ + name: 'Buff', + // TODO Make target strength available in action scope to fix: 'target 0' -> 'target 12' + value: 'This buff reduces AC of target by difference between the strength of caster 18 and the target 0', + }], + targetIds: [targetCreatureId], + }, { + contents: [], + inserts: [{ + _id: insertedBuffId, + type: 'buff', + description: { + text: 'This buff reduces AC of target by difference between the strength of caster {18} and the target {strength}' + }, + left: 1, + right: 4, + parentId: null, + root: { + collection: 'creatures', + id: targetCreatureId, + }, + tags: [], + target: 'target', + }, { + _id: insertedEffectId, + type: 'effect', + stats: ['armor'], + operation: 'add', + amount: { calculation: 'strength - 18' }, + left: 2, + right: 3, + parentId: insertedBuffId, + root: { + collection: 'creatures', + id: targetCreatureId, + }, + tags: [], + }], + targetIds: [targetCreatureId], + }]); + }); +});