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'); }); });