40 lines
1.6 KiB
TypeScript
40 lines
1.6 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
||
import {
|
||
formatItemDamageRangeScript,
|
||
formatWeaponCalculationScript
|
||
} from './calculation-script';
|
||
|
||
describe('formatWeaponCalculationScript', () => {
|
||
it('starts from the selected equipped damage and explains ordered typed stages', () => {
|
||
const lines = formatWeaponCalculationScript({
|
||
revision: { version: 4, name: 'Resurgence model' },
|
||
stages: [
|
||
{ stage_key: 'base', label: 'Base damage', operator: 'base_damage', display_order: 1 },
|
||
{ stage_key: 'flat', label: 'Flat damage', operator: 'flat_add', display_order: 2 },
|
||
{ stage_key: 'cycle', label: 'Firing cycle', operator: 'firing_cycle', display_order: 3 }
|
||
],
|
||
profiles: [{
|
||
stat_attribute_id: 'weapon-flat',
|
||
stage_key: 'flat',
|
||
weight: 1.5,
|
||
soft_cap: null,
|
||
hard_cap: 100,
|
||
curve_type: 'none',
|
||
curve_parameter: null,
|
||
weapon_category: 'SMG'
|
||
}],
|
||
attributes: [{ id: 'weapon-flat', name: 'Flat Weapon Damage', unit: null }]
|
||
});
|
||
expect(lines).toContain('TAKE equipped_weapon.damage AS base_damage');
|
||
expect(lines).toContain('ADD flat_weapon_damage × 1.5 HARD_CAP 100 FOR SMG TO damage');
|
||
expect(lines.at(-1)).toBe('RETURN expected_damage_per_second');
|
||
});
|
||
|
||
it('keeps level scaling in item configuration instead of applying it twice', () => {
|
||
const lines = formatItemDamageRangeScript();
|
||
expect(lines).toContain('SCALE configured_damage_range TO equipped_weapon.level');
|
||
expect(lines).toContain('PASS equipped_weapon.damage TO combat_calculation');
|
||
expect(lines).not.toContain('SCALE equipped_weapon.damage TO equipped_weapon.level');
|
||
});
|
||
});
|