75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
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
|