import assert from 'node:assert/strict'; import test from 'node:test'; import { toOptimizerCard, type OptimizerSourceCard } from './card-adapter.ts'; const source: OptimizerSourceCard = { id: 'card', name: '카드', power: { statsAtMaxLevel: { performance: 101, technique: 202, sense: 303 } }, details: { active: [ { level: 1, coolTimeSeconds: 10, durationSeconds: 1, effect: '스코어가 10% UP' }, { level: 2, coolTimeSeconds: 8, durationSeconds: 2, effect: '스코어가 20% UP' } ], special: [ { level: 1, coolTimeSeconds: null, durationSeconds: 1, effect: '스코어가 30% UP' }, { level: 2, coolTimeSeconds: null, durationSeconds: 2, effect: '스코어가 40% UP' } ] } }; test('액티브는 1개화, 스페셜은 3개화부터 2레벨을 적용한다', () => { const base = toOptimizerCard(source, 0); const activeAwakened = toOptimizerCard(source, 1); const specialAwakened = toOptimizerCard(source, 3); assert.equal(base.active.scoreUpPercent, 10); assert.equal(base.special.scoreUpPercent, 30); assert.equal(activeAwakened.active.scoreUpPercent, 20); assert.equal(activeAwakened.special.scoreUpPercent, 30); assert.equal(specialAwakened.special.scoreUpPercent, 40); }); test('2개화부터 보드 제외 기본 파라미터 합계에 10%를 적용한다', () => { assert.equal(toOptimizerCard(source, 0).naturalParameterTotal, 606); assert.equal(toOptimizerCard(source, 2).naturalParameterTotal, 669); }); test('4개화 패시브의 타입별 스코어 서포트 대상과 수치를 변환한다', () => { const passiveSource: OptimizerSourceCard = { ...source, type: '퓨어', generation: 'Promise', details: { ...source.details, passive: [ { level: 1, description: '[attribute=pure]퓨어 타입[/attribute] 2명의 스코어 서포트 효과 8%' }, { level: 2, description: '[attribute=pure]퓨어 타입[/attribute] 2명의 스코어 서포트 효과 11%' } ] } }; assert.deepEqual(toOptimizerCard(passiveSource, 4, undefined, [{ type: '퓨어', generation: 'Promise' }]).passiveScoreSupportEffects, [{ percent: 11, target: 'group', targetGroup: '퓨어 타입', targetCount: 2 }]); });