mirror of https://github.com/stijndcl/didier
73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
import datetime
|
|
|
|
import pytest
|
|
from freezegun import freeze_time
|
|
from sqlalchemy import select
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from database.crud import wordle_stats as crud
|
|
from database.schemas import User, WordleStats
|
|
|
|
|
|
async def insert_game_stats(postgres: AsyncSession, stats: WordleStats):
|
|
"""Helper function to insert some stats"""
|
|
postgres.add(stats)
|
|
await postgres.commit()
|
|
|
|
|
|
@pytest.mark.postgres
|
|
async def test_get_stats_non_existent_creates(postgres: AsyncSession, user: User):
|
|
"""Test getting a user's stats when the db is empty"""
|
|
test_user_id = user.user_id
|
|
|
|
statement = select(WordleStats).where(WordleStats.user_id == test_user_id)
|
|
assert (await postgres.execute(statement)).scalar_one_or_none() is None
|
|
|
|
await crud.get_wordle_stats(postgres, test_user_id)
|
|
assert (await postgres.execute(statement)).scalar_one_or_none() is not None
|
|
|
|
|
|
@pytest.mark.postgres
|
|
async def test_get_stats_existing_returns(postgres: AsyncSession, user: User):
|
|
"""Test getting a user's stats when there's already an entry present"""
|
|
test_user_id = user.user_id
|
|
|
|
stats = WordleStats(user_id=test_user_id)
|
|
stats.games = 20
|
|
await insert_game_stats(postgres, stats)
|
|
found_stats = await crud.get_wordle_stats(postgres, test_user_id)
|
|
assert found_stats.games == 20
|
|
|
|
|
|
@pytest.mark.postgres
|
|
@freeze_time("2022-07-30")
|
|
async def test_complete_wordle_game_won(postgres: AsyncSession, user: User):
|
|
"""Test completing a wordle game when you win"""
|
|
test_user_id = user.user_id
|
|
|
|
await crud.complete_wordle_game(postgres, test_user_id, win=True)
|
|
stats = await crud.get_wordle_stats(postgres, test_user_id)
|
|
assert stats.games == 1
|
|
assert stats.wins == 1
|
|
assert stats.current_streak == 1
|
|
assert stats.highest_streak == 1
|
|
assert stats.last_win == datetime.date.today()
|
|
|
|
|
|
@pytest.mark.postgres
|
|
@freeze_time("2022-07-30")
|
|
async def test_complete_wordle_game_lost(postgres: AsyncSession, user: User):
|
|
"""Test completing a wordle game when you lose"""
|
|
test_user_id = user.user_id
|
|
|
|
stats = WordleStats(user_id=test_user_id)
|
|
stats.current_streak = 10
|
|
await insert_game_stats(postgres, stats)
|
|
|
|
await crud.complete_wordle_game(postgres, test_user_id, win=False)
|
|
stats = await crud.get_wordle_stats(postgres, test_user_id)
|
|
|
|
# Check that streak was broken
|
|
assert stats.current_streak == 0
|
|
assert stats.games == 1
|