| import test from 'node:test'; | |
| import assert from 'node:assert/strict'; | |
| import { EVENT_TYPES, commandTranscript } from '../src/shared.js'; | |
| import { | |
| DISTRICTS, | |
| advanceWorldState, | |
| createWorldState, | |
| getNearbyDistrict, | |
| worldReducer | |
| } from '../src/world-architect.js'; | |
| test('initial world is deterministic and contains all repository districts', () => { | |
| const first = createWorldState(); | |
| const second = createWorldState(); | |
| assert.deepEqual(first, second); | |
| assert.equal(first.repository.simulated, true); | |
| assert.deepEqual(first.districts.map((district) => district.id), ['src', 'tests', 'docs', 'issues', 'prs', 'actions']); | |
| assert.equal(DISTRICTS.length, 6); | |
| assert.equal(first.agents.length, 3); | |
| }); | |
| test('movement is bounded and building collision preserves the previous position', () => { | |
| let state = createWorldState(); | |
| const initial = { ...state.player }; | |
| for (let index = 0; index < 120; index += 1) state = worldReducer(state, { type: EVENT_TYPES.PLAYER_MOVE, dx: 0, dy: 1 }); | |
| assert.ok(state.player.y <= 850); | |
| for (let index = 0; index < 120; index += 1) state = worldReducer(state, { type: EVENT_TYPES.PLAYER_MOVE, dx: -1, dy: 0 }); | |
| assert.ok(state.player.x >= 70); | |
| const atStart = createWorldState(); | |
| const blocked = worldReducer(atStart, { type: EVENT_TYPES.PLAYER_MOVE, dx: 0, dy: -1 }); | |
| assert.notDeepEqual(blocked.player, initial); | |
| assert.equal(blocked.player.step, 1); | |
| }); | |
| test('the world emits a deterministic construction event on each simulation step', () => { | |
| const start = createWorldState(); | |
| const first = advanceWorldState(start); | |
| const replay = advanceWorldState(createWorldState()); | |
| assert.equal(first.state.tick, 1); | |
| assert.deepEqual(first.event, replay.event); | |
| assert.equal(first.event.type, EVENT_TYPES.AGENT_PROGRESS); | |
| assert.ok(first.state.events[0].detail.message.includes('WORLD ARCHITECT')); | |
| }); | |
| test('entering and inspecting a repository district updates the shared state', () => { | |
| let state = createWorldState(); | |
| state = worldReducer(state, { type: EVENT_TYPES.SELECT_DISTRICT, districtId: 'docs' }); | |
| state = worldReducer(state, { type: EVENT_TYPES.OPEN_INSPECTOR }); | |
| assert.equal(state.selectedDistrictId, 'docs'); | |
| assert.equal(state.activePanel, 'inspector'); | |
| state = worldReducer(state, { type: EVENT_TYPES.ENTER_DISTRICT, districtId: 'docs' }); | |
| assert.equal(state.view, 'district'); | |
| assert.equal(state.events[0].type, EVENT_TYPES.ENTER_DISTRICT); | |
| }); | |
| test('nearby district detection and terminal transcript are browser-local', () => { | |
| const state = createWorldState(); | |
| const nearby = getNearbyDistrict(state); | |
| assert.equal(nearby.inRange, false); | |
| const transcript = commandTranscript('cargo test', state); | |
| assert.ok(transcript.some((line) => line.includes('142 passed'))); | |
| assert.ok(!transcript.some((line) => line.includes('network'))); | |
| }); | |