Beispiel #1
0
    def test_CanRemoveStone_RemoveCorrectStoneFromBoard_RaisesException(self):
        "Checking if user with white stones can remove black stone after white move."

        # Mock request
        request = Mock()
        request.user = User.objects.get(pk=2)

        # Remove black stone by user with white stones
        stone = Stone.objects.get(row=0, col=0, color=0)
        # Update stone state
        stone.row, stone.col = -1, -1

        # Validate stone
        form = StoneDeleteForm(request=request, data=model_to_dict(stone))
        self.assertTrue(form.is_valid())
Beispiel #2
0
    def test_CanRemoveStone_RemoveCorrectStoneFromBoard_RaisesException(self):
        "Checking if user with white stones can remove black stone after white move."

        # Mock request
        request         = Mock()
        request.user    = User.objects.get(pk=2)

        # Remove black stone by user with white stones
        stone = Stone.objects.get(row=0, col=0, color=0)
        # Update stone state
        stone.row,stone.col = -1,-1

        # Validate stone
        form = StoneDeleteForm(request=request, data=model_to_dict(stone))
        self.assertTrue(form.is_valid())
Beispiel #3
0
    def test_CanRemoveStone_RemoveStoneFromBoardBeforeMove_RaisesException(self):
        "Checking if user can remove stone from board before his move"

        # Mock request
        request         = Mock()
        request.user    = User.objects.get(pk=1)

        # Remove black stone
        stone = Stone.objects.get(row=0, col=0, color=0)
        stone.row,stone.col = -1,-1

        # Validate stone
        form = StoneDeleteForm(request=request, data=model_to_dict(stone))
        self.assertFalse(form.is_valid())
        self.assertEqual(form.non_field_errors(), [u'ERR_STONE_003'])
Beispiel #4
0
    def test_CanRemoveStone_RemoveOwnStoneFromBoard_RaisesException(self):
        "Checking if user can remove own stone from board"

        # Mock request
        request = Mock()
        request.user = User.objects.get(pk=1)

        # Remove white stone
        stone = Stone.objects.get(row=1, col=0, color=1)
        # Update stone state
        stone.row, stone.col = -1, -1

        # Validate stone
        form = StoneDeleteForm(request=request, data=model_to_dict(stone))
        self.assertFalse(form.is_valid())
        self.assertEqual(form.non_field_errors(), [u'ERR_STONE_003'])
Beispiel #5
0
def stone_update(request, game_id):
    """Update stone state with users move."""

    # Get user action performed on stone (by default assume 'add')
    action = 'add'
    if request.POST.has_key('action'):
        action = request.POST['action']

    # Get game board
    board = Board.objects.get(pk=game_id)

    # 'add' - user adds stone to board
    # 'del' - user removes stone from board
    form, stone = None, None
    if action == 'add':
        # Get first stone that isn't placed on Board
        stone = board.get_first_not_placed_stone(request.user)
        # Update stone with users move coordinates
        stone.row, stone.col = request.POST['row'], request.POST['col']
        # Create add form
        form = StoneCreateForm(
            request=request,
            data=model_to_dict(stone),
        )
    elif action == 'del':
        try:
            # Get stone by user coordinates
            stone = board.stone_set.get(row=request.POST['row'],
                                        col=request.POST['col'])
        except ObjectDoesNotExist:
            pass
        else:
            # Set stone coordinates to -1, -1
            stone.row, stone.col = -1, -1
            # Create delete from
            form = StoneDeleteForm(
                request=request,
                data=model_to_dict(stone),
            )

    # Validate stone
    if form and form.is_valid():
        # Update stone state
        stone.save()