private static void ValidateTokenType(PlaceTokenRequest request) { if (!new string[] { "X", "O" }.Contains(request.Type)) { throw new InvalidTokenException(); } }
private void ValidatePositionFree(PlaceTokenRequest request) { if (_boardGateway.Read(request.Board, request.Column, request.Row) != null) { throw new AlreadyPlacedException(); } }
private static void ValidateBoardIncomplete(PlaceTokenRequest request) { if (request.Board.IsComplete()) { throw new BoardCompleteException(); } }
private PlaceTokenResponse WhenIPlaceAToken(string type, int column, int row) { PlaceTokenRequest request = new PlaceTokenRequest { Board = _board, Row = row, Column = column, Type = type, }; PlaceTokenResponse response = _placeToken.Execute(request); _board = response.Board; return(response); }
public PlaceTokenResponse Execute(PlaceTokenRequest request) { Board board = request.Board; System.Exception error = null; IBoardStatus status = new Incomplete(); try { ValidateTokenType(request); ValidatePositionFree(request); ValidateBoardIncomplete(request); board = _boardGateway.Write(request.Board, request.Type, request.Column, request.Row); _boardGateway.Flush(board); } catch (IndexOutOfRangeException) { error = new OffBoardException(); } catch (AlreadyPlacedException) { error = new AlreadyPlacedException(); } catch (InvalidTokenException) { error = new InvalidTokenException(); } catch (BoardCompleteException) { error = new BoardCompleteException(); } return(new PlaceTokenResponse { Board = board, Error = error, Status = board.IsComplete() ? (IBoardStatus) new Complete() : new Incomplete(), }); }
private PlaceTokenResponse Execute(PlaceTokenRequest request) { return(_placeToken.Execute(request)); }