def test_game_creator_not_in_players(self): arena = make_a_whole_arena() players = make_players(5) extra_player = make_players()[0] game = Game.objects.create( # TODO: This doesn't look great course=arena.course_set.all()[0], creator=extra_player, created=datetime.now(), ) game.players = players # Check that game won't start with invalid creator self.assertRaises(ValidationError, game.start) # Switch to a valid creator and start game game.creator = players[0] game.save() game.start() game.save() # Switch back to invalid creator game.creator = extra_player game.save() # Assert that we can't finish game with invalid creator self.assertRaises(ValidationError, game.finish)
def make_game(): arena = make_a_whole_arena() players = make_players(5) game = Game.objects.create( # TODO: This doesn't look greait course=arena.course_set.all()[0], creator=players[0], created=datetime.now(), ) game.players = players return game
def test_game_requires_players(self): arena = make_a_whole_arena() course = make_course(arena)[0] player = make_players()[0] game = Game( course=course, creator=player, created=datetime.now(), ) game.save() game.players = [player] game.start() # Check that game doesn't finish without players self.assertRaises(ValidationError, game.finish)
def test_create(self): # Ensure we have no game self.assertEqual(Game.objects.all().count(), 0) arena = make_a_whole_arena() players = make_players(5) course = arena.course_set.all()[0] c = get_logged_in_client() r = c.get("/games/create/") self.assertContains(r, 'Create or update a game', count=1) c, user = get_logged_in_client(True) # Include our auto-generated player in the players of this game players.append(user.player) # Create the game, our clients player will be the game creator r = c.post('/games/create/', { "course": course.id, "players": [p.id for p in players], }) self.assertEqual(r.status_code, 302) # Ensure we have created a new game self.assertEqual(Game.objects.all().count(), 1) # Get our created game game = Game.objects.all()[0] # Assert that all posted players are in game for player in players: self.assertIn(player, game.players.all()) # Our posted creator is the creator ? self.assertEqual(user.player.id, game.creator.id)
def test_create_game(self): # Make course, arena and players players = make_players(3) arena = make_a_whole_arena() course = make_course(arena)[0] # Prepare data for new game game_data = { "players": [p.id for p in players], "course": course.id, } game_payload = simplejson.dumps(game_data) # POST data to api c = get_logged_in_client() r = c.post("/api/games/", game_payload, content_type="application/json") # Response looks good ? self.assertEqual(r.status_code, 201) res = simplejson.loads(r.content) created_game = Game.objects.get(id=res['id']) # Check that we are on the right course self.assertEqual(created_game.course.id, course.id) # Check that players are correct self.assertEqual(created_game.players.count(), len(game_data['players'])) for player in created_game.players.all(): self.assertIn(player.id, game_data['players']) # Check that game has "Created" state self.assertEqual(created_game.state, Game.STATE_CREATED)