import json import pytest from huesoporro.infra.repos import QuoteRepo, UserRepo from huesoporro.models import User @pytest.fixture async def user_repo(s, db, user: User): async with db.get_client() as client: await client.execute( "INSERT INTO users (user, external_auth) VALUES (?, ?)", (user.user, json.dumps(user.external_auth)), ) return UserRepo(s=s) @pytest.fixture async def quote_repo(s, db): async with db.get_client() as client: await client.execute( "INSERT INTO quotes (channel, quote, author) VALUES (?, ?, ?)", ("channel", "quote", "author"), ) return QuoteRepo(s=s) async def test_get_user(user_repo: UserRepo, user: User): db_user = await user_repo.get_by_user(user.user) assert db_user == user async def test_get_user_returns_none(user_repo: UserRepo): assert await user_repo.get_by_user("unknown_user") is None async def test_create_user(user_repo: UserRepo): new_user = User( user="new_user", external_auth={"twitch": {"token": "twitch_token"}} ) assert await user_repo.create(new_user) == new_user async def test_update_users_tokens(user_repo: UserRepo, user: User): new_tokens = {"twitch": {"token": "new_tokens"}} user.external_auth = new_tokens # type: ignore[assignment] assert await user_repo.update(user) == user async def test_update_non_existing_user_raises_value_error(user_repo: UserRepo): with pytest.raises(ValueError, match="User unknown_user does not exist"): await user_repo.update( User( user="unknown_user", external_auth={"twitch": {"token": "twitch_token"}} ) ) async def test_delete_user(user_repo: UserRepo, user: User): assert await user_repo.delete(user) is None assert await user_repo.get_by_user(user.user) is None async def test_get_random_quote(quote_repo: QuoteRepo): quote = await quote_repo.get_random("channel") assert quote assert quote.author.user == "author" assert quote.channel.user == "channel" async def test_create_quote(quote, quote_repo): new_quote = await quote_repo.create(quote) assert new_quote == quote