def test_move_is_possible_crowned(self):
        for a in range(8):
            # Crowned piece that we are going to move
            piece_1 = Piece(player=1, piece_symbol='P', crowned=True)

            # Piece at the final position
            finish_piece = None

            # One cell fordward, allowed movement where the final cell is empty
            self.assertTrue(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a, row=a + 1), piece_1,
                                      finish_piece))

            # One cell backward, allowed movement where the final cell is empty
            self.assertTrue(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a, row=a - 1), piece_1,
                                      finish_piece))

            # One cell to the right, allowed movement where the final cell is empty
            self.assertTrue(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a + 1, row=a), piece_1,
                                      finish_piece))

            # One cell to the left, allowed movement where the final cell is empty
            self.assertTrue(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a - 1, row=a), piece_1,
                                      finish_piece))

            # Top-right diagonal, allowed movement where the final cell is empty
            self.assertTrue(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a + 1, row=a + 1), piece_1,
                                      finish_piece))

            # Top-left diagonal, allowed movement where the final cell is empty
            self.assertTrue(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a - 1, row=a + 1), piece_1,
                                      finish_piece))

            # Bottom-right diagonal, not allowed movement where the final cell is empty
            self.assertFalse(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a + 1, row=a - 1), piece_1,
                                      finish_piece))

            # Bottom-left diagonal, not allowed movement where the final cell is empty
            self.assertFalse(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a - 1, row=a - 1), piece_1,
                                      finish_piece))

            # Not allowed movements.
            self.assertFalse(
                Pawn.move_is_possible(
                    None, Cell(column=a + randint(2, 8),
                               row=a + randint(2, 8)),
                    Cell(column=a - 1, row=a + 1), piece_1, finish_piece))

            #Diagonal movement where there is an opponent piece
            finish_piece = Piece(player=2, piece_symbol='P', crowned=True)
            self.assertTrue(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a + 1, row=a + 1), piece_1,
                                      finish_piece))

            #Diagonal movement where there is one of our pieces
            finish_piece = Piece(player=1, piece_symbol='P', crowned=True)
            self.assertFalse(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a + 1, row=a + 1), piece_1,
                                      finish_piece))

            #Starting and finishing cells are the same
            self.assertFalse(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a, row=a), piece_1,
                                      finish_piece))
    def test_move_is_possible(self):

        for a in range(8):
            # Piece that we are going to move
            piece_1 = Piece(player=1, piece_symbol='P', crowned=False)

            # Possible piece at the final position
            finish_piece = None

            # Starting and finishing positions
            start_cell_1 = Cell(column=a, row=a)
            finish_cell_1 = Cell(column=a, row=a + 1)

            # Allowed movement where the final cell is empty
            self.assertTrue(
                Pawn.move_is_possible(None, start_cell_1, finish_cell_1,
                                      piece_1, finish_piece))

            # Allowed movement where the final cell is occupied by an opponents piece
            self.assertTrue(
                Pawn.move_is_possible(None,
                                      start_cell_1,
                                      finish_cell_1,
                                      piece_1,
                                      finish_piece=Piece(player=2,
                                                         piece_symbol='P',
                                                         crowned=False)))

            # Top-right diagonal, not allowed movement where the final cell is empty
            self.assertFalse(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a + 1, row=a + 1), piece_1,
                                      finish_piece))

            # Top-left diagonal, not allowed movement where the final cell is empty
            self.assertFalse(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a - 1, row=a + 1), piece_1,
                                      finish_piece))

            # Bottom-right diagonal, not allowed movement where the final cell is empty
            self.assertFalse(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a + 1, row=a - 1), piece_1,
                                      finish_piece))

            # Bottom-left diagonal, not allowed movement where the final cell is empty
            self.assertFalse(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a - 1, row=a - 1), piece_1,
                                      finish_piece))

            # Allowed movement with different player and starting and finishing cells
            piece_2 = Piece(player=2, piece_symbol='P', crowned=False)
            start_cell_2 = Cell(column=a, row=a + 1)
            finish_cell_2 = Cell(column=a, row=a)

            # Allowed movement where the final cell is empty
            self.assertTrue(
                Pawn.move_is_possible(None, start_cell_2, finish_cell_2,
                                      piece_2, finish_piece))

            # Allowed movement where the final cell is occupied by an opponents piece
            self.assertTrue(
                Pawn.move_is_possible(None,
                                      start_cell_2,
                                      finish_cell_2,
                                      piece_2,
                                      finish_piece=Piece(player=1,
                                                         piece_symbol='P',
                                                         crowned=False)))

            #Starting and finishing cells are the same
            self.assertFalse(
                Pawn.move_is_possible(None, Cell(column=a, row=a),
                                      Cell(column=a, row=a), piece_1,
                                      finish_piece))