@idealic/poker-engine
Version:
Poker game engine and hand evaluator
181 lines (166 loc) • 6.16 kB
text/typescript
import {
getActionAmount,
getActionCards,
getActionComment,
getActionPlayerIndex,
getActionTimestamp,
getActionType,
} from '../../game/position';
import { isDealerAction } from '../../game/progress';
vi.setSystemTime(new Date(1715616000000));
describe('Action Parser', () => {
describe('getActionTimestamp', () => {
it('should handle missing timestamp', () => {
const parsedAction = getActionTimestamp('p1 cc', false);
expect(parsedAction).toBe(null);
});
it('should handle missing timestamp', () => {
const parsedAction = getActionTimestamp('p1 cc');
expect(parsedAction).toBe(Date.now());
});
it('should handle missing timestamp', () => {
const parsedAction = getActionTimestamp('p1 cc #lol');
expect(parsedAction).toBe(Date.now());
});
it('should parse an action with a timestamp', () => {
const timestamp = Number(new Date());
const parsedAction = getActionTimestamp(`p1 cc #${timestamp}`);
expect(parsedAction).toEqual(timestamp);
});
});
});
describe('Processor', () => {
describe('getActionPlayerIndex', () => {
test('should return the player index for a dealer action', () => {
const action = 'd dh p1 ???? #Agent_4B9M7';
const result = getActionPlayerIndex(action);
expect(result).toEqual(0);
});
test('should return the player index for a player action', () => {
const action = 'p1 cbr 200';
const result = getActionPlayerIndex(action);
expect(result).toEqual(0);
});
});
describe('getActionType', () => {
test('should return the action type for a dealer action', () => {
const action = 'd dh p1 ???? #1756996688802';
const result = getActionType(action);
expect(result).toEqual('dh');
expect(isDealerAction(action)).toBe(true);
});
test('should return "f" for fold action', () => {
const action = 'p1 f #1756996688802';
const result = getActionType(action);
expect(result).toEqual('f');
expect(isDealerAction(action)).toBe(false);
});
test('should return "cc" for check/call action', () => {
const action = 'p2 cc 20 #1756996688802';
const result = getActionType(action);
expect(result).toEqual('cc');
expect(isDealerAction(action)).toBe(false);
});
test('should return "cbr" for complete/bet/raise action', () => {
const action = 'p3 cbr 100 #1756996688802';
const result = getActionType(action);
expect(result).toEqual('cbr');
expect(isDealerAction(action)).toBe(false);
});
test('should return "sm" for show/muck action', () => {
const action = 'p1 sm AsKs #1756996688802';
const result = getActionType(action);
expect(result).toEqual('sm');
expect(isDealerAction(action)).toBe(false);
});
test('should return "db" for deal board action', () => {
const action = 'd db AhKsQd';
const result = getActionType(action);
expect(result).toEqual('db');
expect(isDealerAction(action)).toBe(true);
});
test('should return "m" for message action', () => {
const action = 'p2 m Hello table!';
const result = getActionType(action);
expect(result).toEqual('m');
expect(isDealerAction(action)).toBe(false);
});
test('should return "sd" for stand pat/discard action', () => {
const action = 'p1 sd 2s3h';
const result = getActionType(action);
expect(result).toEqual('sd');
expect(isDealerAction(action)).toBe(false);
});
test('should return "pb" for post bring-in action', () => {
const action = 'p3 pb 5';
const result = getActionType(action);
expect(result).toEqual('pb');
expect(isDealerAction(action)).toBe(false);
});
test('should return "?" for unknown action type', () => {
const action = 'p1 ?';
const result = getActionType(action);
expect(result).toEqual('?');
expect(isDealerAction(action)).toBe(false);
});
});
describe('getActionComment', () => {
test('should return the comment for an action', () => {
const action = 'd dh p1 ???? #Agent_4B9M7';
const result = getActionComment(action);
expect(result).toEqual('Agent_4B9M7');
});
});
describe('getActionTimestamp', () => {
beforeAll(() => {
vi.setSystemTime(new Date(1715616000000));
});
afterAll(() => {
vi.useRealTimers();
});
test('should return the timestamp for an action', () => {
const action = 'd dh p1 ???? #Agent_4B9M7';
const result = getActionTimestamp(action);
expect(result).toEqual(1715616000000);
});
test('should return the default timestamp for an action', () => {
const action = 'p1 cbr 200 #1715616000001';
const result = getActionTimestamp(action);
expect(result).toEqual(1715616000001);
});
});
describe('getActionCards', () => {
test('should return the cards for an action', () => {
const action = 'p1 sm 2d3d';
const result = getActionCards(action);
expect(result).toEqual(['2d', '3d']);
});
test('should return the cards for a player action', () => {
const action = 'p1 cbr 200';
const result = getActionCards(action);
expect(result).toEqual(undefined);
});
test('should return the cards for a dealer action', () => {
const action = 'd dh p1 ???? #Agent_4B9M7';
const result = getActionCards(action);
expect(result).toEqual(['??', '??']);
});
test('should return the cards for a dealer action', () => {
const action = 'd db ThQs #Agent_4B9M7';
const result = getActionCards(action);
expect(result).toEqual(['Th', 'Qs']);
});
});
describe('getActionAmount', () => {
test('should return the amount for an action', () => {
const action = 'p1 cbr 200';
const result = getActionAmount(action);
expect(result).toEqual(200);
});
test('should return the amount for an action', () => {
const action = 'p1 cbr 200.123';
const result = getActionAmount(action);
expect(result).toEqual(200.123);
});
});
});