Skip to content

Commit be79c50

Browse files
committed
add tests
1 parent 325ae00 commit be79c50

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

tests/__init__.py

Whitespace-only changes.

tests/test_database.py

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import pytest
2+
from utils.db_utils import execute_query
3+
from utils.file_utils import load_query
4+
from config.db_config import connect_to_db
5+
6+
engine = connect_to_db()
7+
8+
class TestLolEsports:
9+
def test_tabela_existe(self):
10+
query = load_query('check_table_exists')
11+
df = execute_query(engine, query)
12+
assert df['table_exists'][0], 'Tabela "2024_lol_esports" não existe!'
13+
14+
def test_colunas_existem(self):
15+
expected_columns = [
16+
'gameid', 'datacompleteness', 'url', 'league', 'year', 'split', 'playoffs', 'date', 'game', 'patch', 'participantid',
17+
'side', 'position', 'playername', 'playerid', 'teamname', 'teamid', 'champion', 'ban1', 'ban2', 'ban3', 'ban4', 'ban5',
18+
'pick1', 'pick2', 'pick3', 'pick4', 'pick5', 'gamelength', 'result', 'kills', 'deaths', 'assists', 'teamkills',
19+
'teamdeaths', 'doublekills', 'triplekills', 'quadrakills', 'pentakills', 'firstblood', 'firstbloodkill',
20+
'firstbloodassist', 'firstbloodvictim', 'team kpm', 'ckpm', 'firstdragon', 'dragons', 'opp_dragons', 'elementaldrakes',
21+
'opp_elementaldrakes', 'infernals', 'mountains', 'clouds', 'oceans', 'chemtechs', 'hextechs', 'dragons (type unknown)',
22+
'elders', 'opp_elders', 'firstherald', 'heralds', 'opp_heralds', 'void_grubs', 'opp_void_grubs', 'firstbaron', 'barons',
23+
'opp_barons', 'firsttower', 'towers', 'opp_towers', 'firstmidtower', 'firsttothreetowers', 'turretplates',
24+
'opp_turretplates', 'inhibitors', 'opp_inhibitors', 'damagetochampions', 'dpm', 'damageshare', 'damagetakenperminute',
25+
'damagemitigatedperminute', 'wardsplaced', 'wpm', 'wardskilled', 'wcpm', 'controlwardsbought', 'visionscore', 'vspm',
26+
'totalgold', 'earnedgold', 'earned gpm', 'earnedgoldshare', 'goldspent', 'gspd', 'gpr', 'total cs', 'minionkills',
27+
'monsterkills', 'monsterkillsownjungle', 'monsterkillsenemyjungle', 'cspm', 'goldat10', 'xpat10', 'csat10', 'opp_goldat10',
28+
'opp_xpat10', 'opp_csat10', 'golddiffat10', 'xpdiffat10', 'csdiffat10', 'killsat10', 'assistsat10', 'deathsat10',
29+
'opp_killsat10', 'opp_assistsat10', 'opp_deathsat10', 'goldat15', 'xpat15', 'csat15', 'opp_goldat15', 'opp_xpat15',
30+
'opp_csat15', 'golddiffat15', 'xpdiffat15', 'csdiffat15', 'killsat15', 'assistsat15', 'deathsat15', 'opp_killsat15',
31+
'opp_assistsat15', 'opp_deathsat15', 'goldat20', 'xpat20', 'csat20', 'opp_goldat20', 'opp_xpat20', 'opp_csat20',
32+
'golddiffat20', 'xpdiffat20', 'csdiffat20', 'killsat20', 'assistsat20', 'deathsat20', 'opp_killsat20', 'opp_assistsat20',
33+
'opp_deathsat20', 'goldat25', 'xpat25', 'csat25', 'opp_goldat25', 'opp_xpat25', 'opp_csat25', 'golddiffat25', 'xpdiffat25',
34+
'csdiffat25', 'killsat25', 'assistsat25', 'deathsat25', 'opp_killsat25', 'opp_assistsat25', 'opp_deathsat25'
35+
]
36+
query = load_query('check_columns_exist')
37+
df = execute_query(engine, query)['column_name'].tolist()
38+
missing = set(expected_columns) - set(df)
39+
assert not missing, f'Colunas ausentes: {missing}'
40+
41+
def test_campos_obrigatorios_nao_nulos(self):
42+
required_columns = ['gameid', 'league', 'year', 'playername', 'teamname', 'champion']
43+
for col in required_columns:
44+
query = load_query('check_no_nulls_in_required_columns').replace('{{column_name}}', col)
45+
df = execute_query(engine, query)
46+
assert df['null_count'][0] == 0, f'Coluna {col} contém valores nulos!'
47+
48+
def test_valores_nao_negativos(self):
49+
query = load_query('check_no_negative_values')
50+
df = execute_query(engine, query)
51+
assert df['negative_count'][0] == 0, 'Existem valores negativos em métricas!'
52+
53+
def test_times_vitoriosos(self):
54+
query = load_query('count_victorious_teams')
55+
df = execute_query(engine, query)
56+
assert df['victorious_teams'][0] > 0, 'Nenhum time registrado como vencedor!'
57+
58+
def test_numero_jogadores_unicos(self):
59+
query = load_query('count_unique_players')
60+
df = execute_query(engine, query)
61+
assert df['unique_players'][0] > 0, 'Não há jogadores únicos na tabela!'
62+
63+
def test_campeoes_mais_jogados(self):
64+
query = load_query('most_played_champions')
65+
df = execute_query(engine, query)
66+
assert not df.empty, 'Não há campeões registrados como mais jogados!'
67+
68+
def test_campeoes_nao_repetidos_em_uma_partida(self):
69+
query = load_query('unique_champions_per_game')
70+
df = execute_query(engine, query)
71+
assert df['repeated_champions'].empty, 'Há campeões repetidos em partidas!'
72+
73+
def test_time_com_maior_media_de_kills(self):
74+
query = load_query('team_highest_avg_kills')
75+
df = execute_query(engine, query)
76+
assert not df.empty, 'Nenhum time encontrado com maior média de kills!'
77+
78+
def test_duracao_media_de_jogos(self):
79+
query = load_query('average_game_length')
80+
df = execute_query(engine, query)
81+
assert df['average_length'][0] > 0, 'A duração média dos jogos é inválida!'
82+
83+
def test_jogadores_com_mais_de_uma_pentakill(self):
84+
query = load_query('players_multiple_pentakills')
85+
df = execute_query(engine, query)
86+
assert not df.empty, 'Nenhum jogador possui múltiplas pentakills registradas!'
87+
88+
def test_primeiro_sangue_registrado(self):
89+
query = load_query('games_with_first_blood')
90+
df = execute_query(engine, query)
91+
assert df['games_with_first_blood'][0] > 0, 'Nenhuma partida possui First Blood registrado!'
92+
93+
def test_vitorias_por_lado(self):
94+
query = load_query('victories_by_side')
95+
df = execute_query(engine, query)
96+
assert df['blue_wins'][0] > 0 and df['red_wins'][0] > 0, 'Não há registro de vitórias para ambos os lados!'

0 commit comments

Comments
 (0)