123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- jest
- .dontMock('chess.js')
- .dontMock('../GameStore')
- .dontMock('../../constants/GameConstants');
- require('es6-shim');
- const GameConstants = require('../../constants/GameConstants');
- const AppDispatcher = require('../../dispatcher/AppDispatcher');
- const GameStore = require('../GameStore');
- describe('GameStore', () => {
-
- var actionMakeMove = {
- source: 'VIEW_ACTION',
- action: {
- actionType: GameConstants.MAKE_MOVE,
- from: 'e2',
- to: 'e4',
- capture: undefined,
- emitMove: true
- }
- };
- var actionChangePromotion = {
- source: 'VIEW_ACTION',
- action: {
- actionType: GameConstants.CHANGE_PROMOTION,
- promotion: 'b'
- }
- };
- var actionGameOver = {
- source: 'VIEW_ACTION',
- action: {
- actionType: GameConstants.GAME_OVER,
- options: {
- winner: 'White',
- type: 'timeout'
- }
- }
- };
- var actionRematch = {
- source: 'VIEW_ACTION',
- action: {
- actionType: GameConstants.REMATCH
- }
- };
- var state, chessboard, moves, cp;
- const callback = function(cb) {
- AppDispatcher.register.mock.calls[0][0](cb);
- state = GameStore.getState();
- chessboard = GameStore.getChessboardState();
- moves = GameStore.getMoves();
- cp = GameStore.getCapturedPieces();
- };
- it('should register a callback with the dispatcher', () => {
- expect(AppDispatcher.register.mock.calls.length).toBe(1);
- });
- it('should return initial store values', () => {
- state = GameStore.getState();
- chessboard = GameStore.getChessboardState();
- expect(state.gameOver.get('status')).toBeFalsy();
- expect(state.promotion).toBe('q');
- expect(state.turn).toBe('w');
- expect(state.check).toBeFalsy();
- expect(chessboard.lastMove.isEmpty()).toBeTruthy();
- expect(chessboard.fen)
- .toBe('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1');
- });
- it('should make move', () => {
- callback(actionMakeMove);
- expect(state.turn).toBe('b');
- expect(chessboard.lastMove.get('from')).toBe('e2');
- expect(chessboard.lastMove.get('to')).toBe('e4');
- expect(moves.getIn([0, 0])).toBe('e4');
- expect(state.check).toBeFalsy();
- });
- it('should make more moves', () => {
- actionMakeMove.action.from = 'e7';
- actionMakeMove.action.to = 'e5';
- actionMakeMove.action.emitMove = false;
- callback(actionMakeMove);
- actionMakeMove.action.from = 'f2';
- actionMakeMove.action.to = 'f4';
- actionMakeMove.action.emitMove = true;
- callback(actionMakeMove);
- expect(state.turn).toBe('b');
- expect(moves.getIn([1, 0])).toBe('f4');
- expect(chessboard.fen)
- .toBe('rnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq f3 0 2');
- expect(cp.get('w').isEmpty).toBeTruthy();
- expect(cp.get('b').isEmpty).toBeTruthy();
- });
- it('should not change any values if move is invalid', () => {
- actionMakeMove.action.from = 'a1';
- actionMakeMove.action.to = 'a3';
- callback(actionMakeMove);
- expect(state.turn).toBe('b');
- expect(moves.getIn([1, 0])).toBe('f4');
- expect(chessboard.fen)
- .toBe('rnbqkbnr/pppp1ppp/8/4p3/4PP2/8/PPPP2PP/RNBQKBNR b KQkq f3 0 2');
- expect(cp.get('w').isEmpty).toBeTruthy();
- expect(cp.get('b').isEmpty).toBeTruthy();
- expect(state.check).toBeFalsy();
- });
- it('should capture piece', () => {
- actionMakeMove.action.from = 'e5';
- actionMakeMove.action.to = 'f4';
- actionMakeMove.action.capture = 'P';
- actionMakeMove.action.emitMove = false;
- callback(actionMakeMove);
- expect(state.turn).toBe('w');
- expect(moves.getIn([1, 1])).toBe('exf4');
- expect(cp.get('w').first()).toBe('P');
- });
- it('should change promotion to bishop', () => {
- callback(actionChangePromotion);
- expect(state.promotion).toBe('b');
- });
- it('should finish the game', () => {
- callback(actionGameOver);
- expect(state.gameOver.get('status')).toBeTruthy();
- expect(state.gameOver.get('winner')).toBe('White');
- expect(state.gameOver.get('type')).toBe('timeout');
- });
- it('should put the store to initial state after rematch accepted', () => {
- callback(actionRematch);
- expect(state.gameOver.get('status')).toBeFalsy();
- expect(state.promotion).toBe('q');
- expect(state.turn).toBe('w');
- expect(state.check).toBeFalsy();
- expect(chessboard.lastMove.isEmpty()).toBeTruthy();
- expect(chessboard.fen)
- .toBe('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1');
- expect(moves.size).toBe(0);
- expect(cp.get('w').isEmpty()).toBeTruthy();
- expect(cp.get('b').isEmpty()).toBeTruthy();
- });
- });
|