예제 #1
0
def game(request):

    #check if authed
    # print "user " + str(request.user)
    if not request.user.is_authenticated():
        return HttpResponse('Unauthorized', status=401)

    if request.method == 'GET':
        #return a list of games available
        return get_json(list(Game.objects.all()))
    elif request.method == 'POST':
        # make sure authed

        try:
            json_data = json.loads(request.body)
            # user = this user
            new_game = Game(status = Game.OPEN)
            new_game.save()
            new_game.players.add(request.user)
            amounts = json_data['amounts']
            for i, amount in enumerate(amounts):
                new_pile = Pile(
                    position = i,
                    amount = amount,
                    game = new_game
                )
                new_pile.save()
            return get_json(new_game)
        except Exception, e:
            return HttpResponseServerError("Malformed data!")
예제 #2
0
    def test_simple_game(self):

        game = Game.objects.get()
        #create 3 piles - 2,3,4
        for i, p in enumerate([2,3,4]):
            new_pile = Pile(
                position = i,
                amount = p,
                game = game
            )
            new_pile.save()
        self.assertEqual(len(game.pile_set.all()), 3)

        #create a couple users
        user_one = User.objects.create_user("one", password="******")
        user_one.save()
        user_two = User.objects.create_user("two", password="******")
        user_two.save()
        
        #add them to the game
        game.players.add(user_one)
        game.players.add(user_two)
        game.save()

        #reget the game
        game = Game.objects.get()
        self.assertEqual(len(game.players.all()), 2)

        #test a basic set of three moves, each player taking the max on each
        for i, (user, take) in enumerate([(user_one, 2), (user_two, 3), (user_one, 4)]):

            pile = game.pile_set.get(position = i)
            self.assertEqual(pile.amount, take)
            pile.amount = 0
            pile.save()
            #create a corresponding move
            new_move = Move(
                #start at 0th move
                order = i,
                game = game,
                pile = pile,
                taken = take,
                user = user
            )
            new_move.save()
        
        #check it went user 1, user 2, user 1
        moves = game.move_set.all().order_by('date')
        self.assertEqual(len(moves), 3)
        # print moves[0]
        # print moves[1]
        # print moves[2]
        self.assertEqual(moves[0].user, user_one)
        self.assertEqual(moves[1].user, user_two)
        self.assertEqual(moves[2].user, user_one)
예제 #3
0
    def test_pile_move_added(self):
        game = Game.objects.get()

        new_pile = Pile(
                    position = 0,
                    amount = 3,
                    game = game
                )
        new_pile.save()
        new_move = Move(
            #start at 0th move
            order = 0,
            game = game,
            pile = new_pile,
            taken = 2
        )
        new_move.save()
        self.assertEqual(len(game.pile_set.all()), 1)
        self.assertEqual(len(game.move_set.all()), 1)