refactor: add rng & seeding
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { describe, it, expect, beforeEach } from 'vitest';
|
||||
import {
|
||||
registry,
|
||||
createInitialState,
|
||||
import {
|
||||
registry,
|
||||
createInitialState,
|
||||
initializeCards,
|
||||
OnitamaState,
|
||||
createPawns,
|
||||
createCards,
|
||||
@@ -13,6 +14,7 @@ import type { PromptEvent } from '@/utils/command';
|
||||
|
||||
function createTestContext() {
|
||||
const ctx = createGameContext(registry, createInitialState());
|
||||
initializeCards(ctx);
|
||||
return { registry, ctx };
|
||||
}
|
||||
|
||||
@@ -71,18 +73,19 @@ function waitForPrompt(ctx: ReturnType<typeof createTestContext>['ctx']): Promis
|
||||
describe('Onitama Game', () => {
|
||||
describe('Setup', () => {
|
||||
it('should create initial state correctly', () => {
|
||||
const state = createInitialState();
|
||||
const ctx = createGameContext(registry, createInitialState());
|
||||
const stateBefore = ctx.value;
|
||||
|
||||
expect(state.currentPlayer).toBeDefined();
|
||||
expect(state.winner).toBeNull();
|
||||
expect(state.regions.board).toBeDefined();
|
||||
expect(state.regions.red).toBeDefined();
|
||||
expect(state.regions.black).toBeDefined();
|
||||
expect(state.regions.spare).toBeDefined();
|
||||
expect(stateBefore.currentPlayer).toBeDefined();
|
||||
expect(stateBefore.winner).toBeNull();
|
||||
expect(stateBefore.regions.board).toBeDefined();
|
||||
expect(stateBefore.regions.red).toBeDefined();
|
||||
expect(stateBefore.regions.black).toBeDefined();
|
||||
expect(stateBefore.regions.spare).toBeDefined();
|
||||
|
||||
// Should have 10 pawns (5 per player)
|
||||
const redPawns = Object.values(state.pawns).filter(p => p.owner === 'red');
|
||||
const blackPawns = Object.values(state.pawns).filter(p => p.owner === 'black');
|
||||
const redPawns = Object.values(stateBefore.pawns).filter(p => p.owner === 'red');
|
||||
const blackPawns = Object.values(stateBefore.pawns).filter(p => p.owner === 'black');
|
||||
expect(redPawns.length).toBe(5);
|
||||
expect(blackPawns.length).toBe(5);
|
||||
|
||||
@@ -96,10 +99,19 @@ describe('Onitama Game', () => {
|
||||
expect(redMaster?.position[0]).toBe(2);
|
||||
expect(redMaster?.position[1]).toBe(0);
|
||||
|
||||
// Cards should not be distributed yet
|
||||
expect(stateBefore.redCards.length).toBe(0);
|
||||
expect(stateBefore.blackCards.length).toBe(0);
|
||||
expect(stateBefore.spareCard).toBe('');
|
||||
|
||||
// Initialize cards
|
||||
initializeCards(ctx);
|
||||
const stateAfter = ctx.value;
|
||||
|
||||
// Cards should be distributed: 2 per player + 1 spare
|
||||
expect(state.redCards.length).toBe(2);
|
||||
expect(state.blackCards.length).toBe(2);
|
||||
expect(state.spareCard).toBeDefined();
|
||||
expect(stateAfter.redCards.length).toBe(2);
|
||||
expect(stateAfter.blackCards.length).toBe(2);
|
||||
expect(stateAfter.spareCard).toBeDefined();
|
||||
});
|
||||
|
||||
it('should create pawns in correct positions', () => {
|
||||
|
||||
Reference in New Issue
Block a user