173 lines
5.6 KiB
Python
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]
|