q3stats/tests_web_app/test_get_api_v1_sessions.py

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