class TestBoardHelper(TestCase): def setUp(self): self.board = Board() self.board_helper = BoardHelper(self.board.all_ships) def test_generate_all_spots_returns_a_list_of_all_spaces(self): all_spots_list = [ 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'B10', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'E1', 'E2', 'E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9', 'E10', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7', 'G8', 'G9', 'G10', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'H7', 'H8', 'H9', 'H10', 'I1', 'I2', 'I3', 'I4', 'I5', 'I6', 'I7', 'I8', 'I9', 'I10', 'J1', 'J2', 'J3', 'J4', 'J5', 'J6', 'J7', 'J8', 'J9', 'J10' ] self.assertEqual(self.board_helper.generate_all_spots(), all_spots_list) def test_generate_empty_board_returns_an_empty_board(self): empty_board = [ [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], ] self.assertEqual(self.board_helper.generate_empty_board(), empty_board) def test_generate_all_occupied_but_one_returns_a_board_with_one_open_spot( self): all_occupied_but_one = [ [ 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss' ], [ None, 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss' ], [ 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss' ], [ 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss' ], [ 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss' ], [ 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss' ], [ 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss' ], [ 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss' ], [ 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss' ], [ 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss', 'Miss' ], ] self.assertEqual(self.board_helper.generate_all_but_one(), all_occupied_but_one) def test_generate_full_board_returns_a_board_with_all_spots_filled(self): full_board = [ [ 'Sunk', "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss" ], [ 'Sunk', "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss" ], [ 'Sunk', "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss" ], [ 'Sunk', "Miss", "Miss", "Miss", 'Sunk', "Miss", "Miss", "Miss", "Miss", "Miss" ], [ 'Sunk', 'Sunk', "Miss", "Miss", 'Sunk', "Miss", "Miss", "Miss", "Miss", "Miss" ], [ "Miss", 'Sunk', "Miss", "Miss", 'Sunk', "Miss", "Miss", "Miss", "Miss", "Miss" ], [ "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss" ], [ "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", 'Sunk', 'Sunk', 'Sunk', 'Sunk' ], [ "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss" ], [ 'Sunk', 'Sunk', 'Sunk', "Miss", "Miss", "Miss", "Miss", "Miss", "Miss", "Miss" ], ] self.assertEqual(self.board_helper.generate_full_board(), full_board) def test_generate_board_with_ships_returns_a_board_with_ships(self): board_with_ships = [ [ self.board.all_ships[0], self.board.all_ships[0], self.board.all_ships[0], self.board.all_ships[0], self.board.all_ships[0], None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, None, None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, None, None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, self.board.all_ships[2], None, None, None, None, None ], [ None, self.board.all_ships[4], None, None, self.board.all_ships[2], None, None, None, None, None ], [ None, self.board.all_ships[4], None, None, self.board.all_ships[2], None, None, None, None, None ], [None, None, None, None, None, None, None, None, None, None], [ None, None, None, None, None, None, self.board.all_ships[1], self.board.all_ships[1], self.board.all_ships[1], self.board.all_ships[1] ], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], ] self.assertEqual(self.board_helper.generate_board_with_ships(), board_with_ships) def test_generate_board_with_hit_returns_a_board_with_a_hit(self): board_with_a_hit = [ [ self.board.all_ships[0], 'Hit', self.board.all_ships[0], self.board.all_ships[0], self.board.all_ships[0], None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, None, None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, None, None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, self.board.all_ships[2], None, None, None, None, None ], [ None, self.board.all_ships[4], None, None, self.board.all_ships[2], None, None, None, None, None ], [ None, self.board.all_ships[4], None, None, self.board.all_ships[2], None, None, None, None, None ], [None, None, None, None, None, None, None, None, None, None], [ None, None, None, None, None, None, self.board.all_ships[1], self.board.all_ships[1], self.board.all_ships[1], self.board.all_ships[1] ], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], ] self.assertEqual(self.board_helper.generate_board_with_hit(), board_with_a_hit) def test_generate_board_with_a_miss_returns_a_board_with_a_miss(self): board_with_a_miss = [ [ self.board.all_ships[0], self.board.all_ships[0], self.board.all_ships[0], self.board.all_ships[0], self.board.all_ships[0], None, None, None, None, self.board.all_ships[3] ], [ 'Miss', None, None, None, None, None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, None, None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, self.board.all_ships[2], None, None, None, None, None ], [ None, self.board.all_ships[4], None, None, self.board.all_ships[2], None, None, None, None, None ], [ None, self.board.all_ships[4], None, None, self.board.all_ships[2], None, None, None, None, None ], [None, None, None, None, None, None, None, None, None, None], [ None, None, None, None, None, None, self.board.all_ships[1], self.board.all_ships[1], self.board.all_ships[1], self.board.all_ships[1] ], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], ] self.assertEqual(self.board_helper.generate_board_with_a_miss(), board_with_a_miss) def test_generate_board_with_hit_and_miss_returns_a_board_with_a_hit_and_miss( self): board_with_hit_and_miss = [ [ 'Hit', self.board.all_ships[0], self.board.all_ships[0], self.board.all_ships[0], self.board.all_ships[0], None, None, None, None, self.board.all_ships[3] ], [ 'Miss', None, None, None, None, None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, None, None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, self.board.all_ships[2], None, None, None, None, None ], [ None, self.board.all_ships[4], None, None, self.board.all_ships[2], None, None, None, None, None ], [ None, self.board.all_ships[4], None, None, self.board.all_ships[2], None, None, None, None, None ], [None, None, None, None, None, None, None, None, None, None], [ None, None, None, None, None, None, self.board.all_ships[1], self.board.all_ships[1], self.board.all_ships[1], self.board.all_ships[1] ], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], ] self.assertEqual(self.board_helper.generate_board_with_hit_and_miss(), board_with_hit_and_miss) def test_generate_board_with_sunken_ship_returns_a_board_with_a_sunken_ship( self): board_with_a_sunken_ship = [ [ 'Sunk', 'Sunk', 'Sunk', 'Sunk', 'Sunk', None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, None, None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, None, None, None, None, None, self.board.all_ships[3] ], [ None, None, None, None, self.board.all_ships[2], None, None, None, None, None ], [ None, self.board.all_ships[4], None, None, self.board.all_ships[2], None, None, None, None, None ], [ None, self.board.all_ships[4], None, None, self.board.all_ships[2], None, None, None, None, None ], [None, None, None, None, None, None, None, None, None, None], [ None, None, None, None, None, None, self.board.all_ships[1], self.board.all_ships[1], self.board.all_ships[1], self.board.all_ships[1] ], [None, None, None, None, None, None, None, None, None, None], [None, None, None, None, None, None, None, None, None, None], ] self.assertEqual(self.board_helper.generate_board_with_a_sunken_ship(), board_with_a_sunken_ship)
class TestValidations(TestCase): def setUp(self): self.board = Board() self.board_helper = BoardHelper(self.board.all_ships) self.validate = Validate() self.ui = TerminalUi() def test_split_user_row_and_returns_a_single_letter_and_a_number_as_strings( self): user_shot_choice = 'A2' split_choice = ('A', '2') answer = self.validate.split_user_shot(user_shot_choice) self.assertEqual(answer, split_choice) def test_Validate_is_initialized_with_a_letters_list(self): col_letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'] self.assertEqual(self.validate.col_letters, col_letters) def test_Validate_is_initialized_with_a_numbers_list(self): row_nums = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] self.assertEqual(self.validate.row_nums, row_nums) def test_Validate_is_initialized_with_a_all_spots_list(self): all_spots_list = self.board_helper.generate_all_spots() self.assertEqual(self.validate.all_spots, all_spots_list) def test_spot_exists_returns_True_if_spot_exists(self): user_shot_choice = 'A1' self.assertTrue(self.validate._spot_exists(user_shot_choice)) def test_spot_exists_returns_False_if_the_spot_is_invalid(self): user_shot_choice = 'J4000' self.assertFalse(self.validate._spot_exists(user_shot_choice)) def test_get_current_spot_returns_the_value_of_the_selected_spot_on_the_board( self): user_shot_choice = 'A1' board_with_ships = self.board_helper.generate_board_with_ships() spot_value = self.validate.get_current_spot(board_with_ships, user_shot_choice) aircraft_carrier = self.board.all_ships[0] self.assertEqual(spot_value, aircraft_carrier) def test_spot_occupied_returns_False_if_spot_is_not_occupied(self): user_shot_choice = 'A2' all_but_one = self.board_helper.generate_all_but_one() board = MagicMock(state=all_but_one, all_ships=self.board.all_ships) spot_occupied = self.validate._spot_occupied(board, user_shot_choice) self.assertEqual(False, spot_occupied) def test_spot_occupied_returns_true_if_spot_is_occupied(self): user_shot_choice = 'A1' all_but_one = self.board_helper.generate_all_but_one() board = MagicMock(state=all_but_one, all_ships=self.board.all_ships) spot_occupied = self.validate._spot_occupied(board, user_shot_choice) self.assertEqual(True, spot_occupied) def test_all_ships_sunk_returns_True_if_there_are_no_ships_left(self): full_board = self.board_helper.generate_full_board() all_sunken_ships = self.board_helper.generate_sunken_ships() board = MagicMock(state=full_board, all_ships=all_sunken_ships) all_ships_sunk = self.validate.all_ships_sunk(board) self.assertEqual(all_ships_sunk, True) def test_all_ships_sunk_returns_False_if_there_are_ships_left(self): board_with_ships = self.board_helper.generate_board_with_ships() board = MagicMock(state=board_with_ships, all_ships=self.board.all_ships) all_ships_sunk = self.validate.all_ships_sunk(board) self.assertEqual(all_ships_sunk, False) def test_hitting_a_ship_displays_msg_and_returns_str_Hit(self): shot = 'A1' board_with_ships = self.board_helper.generate_board_with_ships() board = MagicMock(state=board_with_ships, all_ships=self.board.all_ships) shot_result = self.validate.shot_result(board, shot) result = (consts.HIT, { 'name': 'Aircraft Carrier', 'size': 5, 'hit_locations': [[0, 0]] }) self.assertEqual(shot_result, result) def test_missing_a_ship_returns_str_Miss_and_None(self): shot = 'A9' board_with_ships = self.board_helper.generate_board_with_ships() board = MagicMock(state=board_with_ships, all_ships=self.board.all_ships) shot_result = self.validate.shot_result(board, shot) result = (consts.MISS, None) self.assertEqual(shot_result, result) def test_ship_is_sunk_when_len_hit_locations_equals_ship_size(self): sunken_ship = { 'name': 'Aircraft Carrier', 'size': 5, 'hit_locations': [[1, 1], [1, 2], [1, 3], [1, 4], [1, 5]], } is_sunk = self.validate._is_ship_sunk(sunken_ship) self.assertEqual(is_sunk, True) def test_ship_is_not_sunk_when_len_hit_locations_doesnt_equal_ship_size( self): ship_with_no_hits = { 'name': 'Aircraft Carrier', 'size': 5, 'hit_locations': [], } self.assertFalse(self.validate._is_ship_sunk(ship_with_no_hits)) def test_when_a_ship_is_hit_it_stores_the_location_of_the_hit(self): current_ship = { 'name': 'Aircraft Carrier', 'size': 5, 'hit_locations': [], } ship_after_hit = { 'name': 'Aircraft Carrier', 'size': 5, 'hit_locations': [[0, 0]] } shot = 'A1' self.assertEqual(self.validate._store_hits(current_ship, shot), ship_after_hit)