public void Check_throws_if_both_sides_in_check()
        {
            var service = new CheckDetectionService(
                _playerStateServiceMock.Object,
                _moveServiceMock.Object,
                ChessFactory.FindAttackPaths(),
                ChessFactory.PathsValidator()

                );

            SetupCheckState(PlayerState.Check, Colours.White);
            SetupCheckState(PlayerState.Checkmate, Colours.Black);

            Should.Throw <Exception>(() => service.Check(_boardStateMock.Object));
        }
        public void Check_returns_valid_check_states(PlayerState whiteState, PlayerState blackState, GameCheckState expectedGameState)
        {
            var service = new CheckDetectionService(
                _playerStateServiceMock.Object,
                ChessFactory.BoardMoveService(ChessFactory.ChessBoardActionProvider()),
                ChessFactory.FindAttackPaths(),
                ChessFactory.PathsValidator()
                );

            if (expectedGameState != GameCheckState.BlackCheckmated &&
                expectedGameState != GameCheckState.WhiteCheckmated)
            {
                // give the king a get out move
                var kingPaths = new Paths();
                kingPaths.Add(new Path {
                    new BoardMove(BoardLocation.At(1, 1), BoardLocation.At(1, 2), 1)
                });
                _kingItem.UpdatePaths(kingPaths);
            }
            SetupCheckState(whiteState, Colours.White);
            SetupCheckState(blackState, Colours.Black);

            service.Check(_boardStateMock.Object).ShouldBe(expectedGameState);
        }