Files
core2026/packages/logic/test/worldBootstrap.test.ts
T

122 lines
3.9 KiB
TypeScript

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');
});
});