# -*- coding: utf -*- import datetime from q3stats.lib.scripts import utils from q3stats.models import Game, Score from q3stats.testing import BaseQ3StatsWebAppTestCase from q3stats.web_app.blueprints.api_v1.views import players as views_mod class Test_GetAPIv1Session(BaseQ3StatsWebAppTestCase): @classmethod def setUpClass(cls): super(Test_GetAPIv1Session, cls).setUpClass() with utils.db_session(cls._config) as session: game1_dt = datetime.datetime(2017, 2, 20, 18, 30) game1 = Game( uuid='game1', map='Q3DM7', date=game1_dt.date(), time=game1_dt.time(), fraglimit=20, attrs={} ) game1.scores.extend([ Score( player='Player 1', score=20, kills=21, deaths=10, suicides=1, net=11, damage_taken=123, damage_given=456, total_health=123, total_armor=456, weapons={}, items={}, powerups={} ), Score( player='Player 2', score=10, kills=11, deaths=20, suicides=1, net=10, damage_taken=123, damage_given=456, total_health=123, total_armor=456, weapons={}, items={}, powerups={} ), ]) game2_dt = datetime.datetime(2017, 2, 21, 18, 31) game2 = Game( uuid='game2', map='Q3DM17', date=game2_dt.date(), time=game2_dt.time(), fraglimit=20, attrs={} ) game2.scores.extend([ Score( player='Player 1', score=20, kills=21, deaths=10, suicides=1, net=11, damage_taken=123, damage_given=456, total_health=123, total_armor=456, weapons={ 'RL': { 'hits': 10, 'kills': 4, 'shots': 20 }, 'RG': { 'hits': 10, 'kills': 5, 'shots': 20 } }, items={}, powerups={ 'Quad': [3, 12345] } ), Score( player='Player 3', score=10, kills=11, deaths=20, suicides=1, net=10, damage_taken=123, damage_given=456, total_health=123, total_armor=456, weapons={}, items={}, powerups={ 'Quad': [2, 12345] } ), ]) game3_dt = datetime.datetime(2017, 2, 21, 18, 32) game3 = Game( uuid='game3', map='Q3DM17', date=game3_dt.date(), time=game3_dt.time(), fraglimit=20, attrs={} ) game3.scores.extend([ Score( player='Player 1', score=20, kills=21, deaths=10, suicides=1, net=11, damage_taken=123, damage_given=456, total_health=123, total_armor=456, weapons={}, items={}, powerups={} ), Score( player='Player 3', score=10, kills=11, deaths=20, suicides=1, net=10, damage_taken=123, damage_given=456, total_health=123, total_armor=456, weapons={}, items={}, powerups={} ), ]) game4_dt = datetime.datetime(2017, 2, 22, 18, 31) game4 = Game( uuid='game4', map='Q3DM17', date=game4_dt.date(), time=game4_dt.time(), fraglimit=20, attrs={} ) game4.scores.extend([ Score( player='Player 2', score=20, kills=21, deaths=10, suicides=1, net=11, damage_taken=123, damage_given=456, total_health=123, total_armor=456, weapons={}, items={}, powerups={} ), Score( player='Player 3', score=10, kills=11, deaths=20, suicides=1, net=10, damage_taken=123, damage_given=456, total_health=123, total_armor=456, weapons={}, items={}, powerups={} ), ]) session.add_all([game1, game2, game3, game4]) session.commit() def test_invalid_day(self): with self.app.test_request_context(): rsp = self.client.get('/api/v1/sessions/spam') assert rsp.status_code == 400 def test_not_found(self): with self.app.test_request_context(): rsp = self.client.get('/api/v1/sessions/1985-12-12') assert rsp.status_code == 404 def test_ok(self): with self.app.test_request_context(): rsp = self.client.get('/api/v1/sessions/2017-02-21') assert rsp.status_code == 200 assert rsp.json['day'] == '2017-02-21' assert rsp.json['previous_day'] == '2017-02-20' assert rsp.json['next_day'] == '2017-02-22' assert len(rsp.json['games']) == 2 game = rsp.json['games'][0] assert game['uuid'] == 'game2' assert game['map'] == 'Q3DM17' assert len(game['scores']) == 2 score1 = game['scores'][0] assert score1['player'] == 'Player 1' assert score1['score'] == 20 assert score1['kills'] == 21 assert score1['deaths'] == 10 assert score1['suicides'] == 1 assert score1['favourite_weapon'] == 'RG' assert score1['quad_freak'] is True assert score1['quad_pickups'] == 3 score2 = game['scores'][1] assert score2['favourite_weapon'] is None assert score2['quad_freak'] is False assert score2['quad_pickups'] == 0 def test_ok_no_previous_day(self): with self.app.test_request_context(): rsp = self.client.get('/api/v1/sessions/2017-02-20') assert rsp.status_code == 200 assert rsp.json['previous_day'] is None def test_ok_no_next_day(self): with self.app.test_request_context(): rsp = self.client.get('/api/v1/sessions/2017-02-22') assert rsp.status_code == 200 assert rsp.json['next_day'] is None