262 lines
8.1 KiB
Python
262 lines
8.1 KiB
Python
# -*- 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
|