fix: 예약 명령의 Ref 인자 검증 순서를 복원한다
This commit is contained in:
@@ -8,9 +8,11 @@ import { loadScenarioDefinitionById } from '@sammo-ts/game-engine/scenario/scena
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import {
|
||||
assertReservedTurnArgsPassLegacyBasicValidation,
|
||||
buildEquipmentTradeItemOptions,
|
||||
buildTurnCommandInputFields,
|
||||
parseReservedTurnArgs,
|
||||
sanitizeReservedTurnArgs,
|
||||
} from '../src/turns/commandInput.js';
|
||||
|
||||
const buildShopItem = (key: string, name: string) => ({
|
||||
@@ -99,6 +101,46 @@ describe('turn command argument input', () => {
|
||||
await expect(parseReservedTurnArgs('general', 'che_포상', {})).rejects.toThrow('Unknown general turn command');
|
||||
});
|
||||
|
||||
it('keeps Ref common validation separate from command-specific required fields', async () => {
|
||||
expect(() => assertReservedTurnArgsPassLegacyBasicValidation({})).not.toThrow();
|
||||
expect(() =>
|
||||
assertReservedTurnArgsPassLegacyBasicValidation({
|
||||
isGold: true,
|
||||
amount: '1',
|
||||
destGeneralId: 7,
|
||||
})
|
||||
).toThrow('턴이 입력되지 않았습니다.');
|
||||
expect(() => assertReservedTurnArgsPassLegacyBasicValidation({ month: '12', year: 0 })).not.toThrow();
|
||||
expect(() => assertReservedTurnArgsPassLegacyBasicValidation({ nationName: '0' })).not.toThrow();
|
||||
expect(() => assertReservedTurnArgsPassLegacyBasicValidation({ year: '0x10' })).toThrow(
|
||||
'턴이 입력되지 않았습니다.'
|
||||
);
|
||||
await expect(parseReservedTurnArgs('nation', 'che_국호변경', { nationName: '0' })).rejects.toBeDefined();
|
||||
});
|
||||
|
||||
it('recursively sanitizes reserved command strings like Ref before command parsing', async () => {
|
||||
expect(
|
||||
sanitizeReservedTurnArgs({
|
||||
nationName: ' <신-국># ',
|
||||
nested: ['A/B', '0'],
|
||||
})
|
||||
).toEqual({
|
||||
nationName: '<신국>',
|
||||
nested: ['AB', ''],
|
||||
});
|
||||
await expect(
|
||||
parseReservedTurnArgs('nation', 'che_국호변경', {
|
||||
nationName: ' <신-국># ',
|
||||
})
|
||||
).resolves.toEqual({ nationName: '<신국>' });
|
||||
await expect(
|
||||
parseReservedTurnArgs('nation', 'che_피장파장', {
|
||||
destNationId: 2,
|
||||
commandType: 'che_-수몰',
|
||||
})
|
||||
).resolves.toEqual({ destNationId: 2, commandType: 'che_수몰' });
|
||||
});
|
||||
|
||||
it('rejects internal general commands before parsing their arguments or scenario overrides', async () => {
|
||||
await expect(parseReservedTurnArgs('general', 'che_NPC능동', {})).rejects.toThrow(
|
||||
'Unknown general turn command: che_NPC능동'
|
||||
|
||||
Reference in New Issue
Block a user