merge: 최신 main을 베팅 핵심 능력치 작업에 반영

This commit is contained in:
2026-08-19 13:32:44 +00:00
4 changed files with 380 additions and 12 deletions
@@ -0,0 +1,81 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import {
commandArgumentFieldContract,
shouldPreserveCommandArgumentValue,
} from '../src/components/command/commandArgumentDraft.ts';
import type { CommandInputField, CommandOption } from '../src/components/command/types.ts';
const field = (kind: CommandInputField['kind'], optionSource?: CommandInputField['optionSource']): CommandInputField => ({
key: 'value',
label: '값',
kind,
required: true,
optionSource,
});
void test('preserves every user-editable non-select command argument across data refreshes', () => {
for (const [kind, value] of [
['text', '작성 중인 국명'],
['number', 777],
['boolean', false],
['numberTuple', [111, 222]],
] as const) {
const currentField = field(kind);
assert.equal(
shouldPreserveCommandArgumentValue(
currentField,
commandArgumentFieldContract(currentField),
{ value },
[]
),
true,
kind
);
}
});
void test('preserves a select only while its field contract and selected option remain available', () => {
const currentField = field('select', 'cities');
const options: CommandOption[] = [
{ value: 1, label: '업' },
{ value: 2, label: '허창' },
];
assert.equal(
shouldPreserveCommandArgumentValue(
currentField,
commandArgumentFieldContract(currentField),
{ value: 2 },
options
),
true
);
assert.equal(
shouldPreserveCommandArgumentValue(
currentField,
commandArgumentFieldContract(currentField),
{ value: 3 },
options
),
false
);
assert.equal(
shouldPreserveCommandArgumentValue(currentField, { kind: 'select', optionSource: 'nations' }, { value: 2 }, options),
false
);
});
void test('reinitializes hidden, new, and changed-kind fields', () => {
const hidden = field('hidden');
assert.equal(
shouldPreserveCommandArgumentValue(hidden, commandArgumentFieldContract(hidden), { value: 'old' }, []),
false
);
const text = field('text');
assert.equal(shouldPreserveCommandArgumentValue(text, undefined, { value: 'old' }, []), false);
assert.equal(shouldPreserveCommandArgumentValue(text, { kind: 'number' }, { value: 'old' }, []), false);
assert.equal(
shouldPreserveCommandArgumentValue(text, commandArgumentFieldContract(text), {}, []),
false
);
});