merge: 최신 main을 베팅 핵심 능력치 작업에 반영
This commit is contained in:
@@ -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
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user