# -*- coding: utf-8 -*- import datetime import mock from q3stats.lib.charts import player from q3stats.lib.scripts import utils from q3stats.models import Game, Score from q3stats.testing import BaseQ3StatsTestCase class Test_LibChartsPlayer(BaseQ3StatsTestCase): @classmethod def setUpClass(cls): super(Test_LibChartsPlayer, cls).setUpClass() with utils.db_session(cls._config) as session: game1_dt = datetime.datetime(2017, 2, 14, 20, 21, 0) 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={ 'BFG': {'hits': 0, 'shots': 0}, 'G': {'hits': 1, 'shots': 1}, 'LG': {'hits': 0, 'shots': 1}, 'MG': {'hits': 1, 'shots': 2}, }, 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 = game1_dt + datetime.timedelta(seconds=60) 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=10, kills=11, deaths=20, suicides=1, net=10, damage_taken=123, damage_given=456, total_health=123, total_armor=456, weapons={ 'BFG': {'hits': 0, 'shots': 0}, 'G': {'hits': 1, 'shots': 1}, 'LG': {'hits': 0, 'shots': 1}, 'MG': {'hits': 1, 'shots': 2}, }, items={}, powerups={} ), 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={} ), ]) session.add_all([game1, game2]) session.commit() cls._day = game1_dt.date() def test_get_player_wins_chart_date(self): with utils.db_session(self._config) as session: categories, wins, loses = player.get_player_wins_chart( session, 'Player 1', agg_by='date' ) assert categories == [self._day] assert wins == [1] assert loses == [1] def test_get_player_wins_chart_map(self): with utils.db_session(self._config) as session: categories, wins, loses = player.get_player_wins_chart( session, 'Player 1', agg_by='map' ) assert categories == ['Q3DM17', 'Q3DM7'] assert wins == [0, 1] assert loses == [1, 0] def test_get_player_avg_accuracy_chart_date(self): with utils.db_session(self._config) as session: categories, series = player.get_player_avg_accuracy_chart( session, 'Player 1', agg_by='date' ) assert categories == [self._day] weapon_accuracies = { x['name']: x['data'] for x in series } assert 'Gauntlet' not in weapon_accuracies assert weapon_accuracies['BFG10k'] == [None] assert weapon_accuracies['Lightning Gun'] == [0.0] assert weapon_accuracies['Machine Gun'] == [50.0] assert weapon_accuracies['Plasma Gun'] == [None] def test_get_player_avg_accuracy_chart_map(self): with utils.db_session(self._config) as session: categories, series = player.get_player_avg_accuracy_chart( session, 'Player 1', agg_by='map' ) weapon_accuracies = { x['name']: x['data'] for x in series } assert 'Gauntlet' not in weapon_accuracies assert weapon_accuracies['BFG10k'] == [None, None] assert weapon_accuracies['Lightning Gun'] == [0.0, 0.0] assert weapon_accuracies['Machine Gun'] == [50.0, 50.0] assert weapon_accuracies['Plasma Gun'] == [None, None]