feat: 월드 스냅샷 및 시나리오 부트스트랩 관련 타입 및 로더 구현
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
import type { ScenarioDefinition } from '../src/scenario/types.js';
|
||||
import type { MapDefinition, UnitSetDefinition } from '../src/world/types.js';
|
||||
import { buildScenarioBootstrap } from '../src/world/bootstrap.js';
|
||||
|
||||
describe('scenario bootstrap', () => {
|
||||
it('builds snapshot and seed from scenario/map inputs', () => {
|
||||
const scenario: ScenarioDefinition = {
|
||||
title: 'Test Scenario',
|
||||
startYear: 200,
|
||||
life: null,
|
||||
fiction: null,
|
||||
history: [],
|
||||
config: {
|
||||
stat: {
|
||||
total: 100,
|
||||
min: 10,
|
||||
max: 70,
|
||||
npcTotal: 80,
|
||||
npcMax: 60,
|
||||
npcMin: 5,
|
||||
chiefMin: 50,
|
||||
},
|
||||
iconPath: '.',
|
||||
map: {},
|
||||
const: {},
|
||||
environment: {
|
||||
mapName: 'test-map',
|
||||
unitSet: 'test-unit',
|
||||
},
|
||||
},
|
||||
nations: [
|
||||
{
|
||||
id: 1,
|
||||
name: 'TestNation',
|
||||
color: '#123456',
|
||||
gold: 5000,
|
||||
rice: 3000,
|
||||
infoText: 'Test nation',
|
||||
tech: 100,
|
||||
type: 'Test',
|
||||
level: 3,
|
||||
cities: ['Alpha'],
|
||||
},
|
||||
],
|
||||
diplomacy: [],
|
||||
generals: [
|
||||
{
|
||||
affinity: 10,
|
||||
name: 'TestGeneral',
|
||||
picture: 101,
|
||||
nation: 1,
|
||||
city: 'Alpha',
|
||||
leadership: 50,
|
||||
strength: 60,
|
||||
intelligence: 55,
|
||||
officerLevel: 1,
|
||||
birthYear: 180,
|
||||
deathYear: 240,
|
||||
personality: 'Calm',
|
||||
special: 'Special',
|
||||
text: 'Test line',
|
||||
},
|
||||
],
|
||||
generalsEx: [],
|
||||
generalsNeutral: [],
|
||||
cities: [],
|
||||
events: [],
|
||||
initialEvents: [],
|
||||
ignoreDefaultEvents: false,
|
||||
};
|
||||
|
||||
const map: MapDefinition = {
|
||||
id: 'test-map',
|
||||
name: 'test-map',
|
||||
cities: [
|
||||
{
|
||||
id: 1,
|
||||
name: 'Alpha',
|
||||
level: 3,
|
||||
region: 1,
|
||||
position: { x: 10, y: 20 },
|
||||
connections: [],
|
||||
max: {
|
||||
population: 100000,
|
||||
agriculture: 20000,
|
||||
commerce: 20000,
|
||||
security: 15000,
|
||||
defence: 5000,
|
||||
wall: 3000,
|
||||
},
|
||||
initial: {
|
||||
population: 50000,
|
||||
agriculture: 10000,
|
||||
commerce: 10000,
|
||||
security: 8000,
|
||||
defence: 2500,
|
||||
wall: 1500,
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const unitSet: UnitSetDefinition = {
|
||||
id: 'test-unit',
|
||||
name: 'test-unit',
|
||||
};
|
||||
|
||||
const result = buildScenarioBootstrap({ scenario, map, unitSet });
|
||||
|
||||
expect(result.warnings).toHaveLength(0);
|
||||
expect(result.snapshot.nations).toHaveLength(2);
|
||||
expect(result.seed.nations).toHaveLength(1);
|
||||
expect(result.snapshot.cities[0]?.nationId).toBe(1);
|
||||
expect(result.seed.cities[0]?.nationId).toBe(1);
|
||||
expect(result.snapshot.generals[0]?.cityId).toBe(1);
|
||||
expect(result.seed.generals[0]?.npcType).toBe(2);
|
||||
expect(result.snapshot.scenarioMeta?.title).toBe('Test Scenario');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user