q3stats/tests_lib/test_lib_charts_player.py

173 lines
5.6 KiB
Python

# -*- 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]