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())
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'])
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()