refactor: many changes

- Add missing actions and make a clear boundary between actions,
  services and nfra (i.e: actions shouldn't use stuff from infra/)
- Delete stuff not in use: tts, gtts, etc
- Add a ton of tests
This commit is contained in:
cătălin 2025-03-05 11:34:44 +01:00
commit 152546982c
No known key found for this signature in database
46 changed files with 2328 additions and 700 deletions

View file

@ -1,12 +1,54 @@
import asyncio
import time
import uuid
import pytest
from huesoporro.models import ChatbotSettings, User
from huesoporro.models import Chatbot, User
from huesoporro.svc.is_mod import IsModSvc
async def test_create_user_svc_returns_user(create_user_svc, user):
created_user = await create_user_svc.run(user=user)
assert created_user == user
async def test_update_user_svc_returns_user(update_user_svc, persisted_user):
persisted_user.username = "new_username"
updated_user = await update_user_svc.run(user=persisted_user)
assert updated_user == persisted_user
async def test_update_user_svc_raises_value_error_for_non_existing_user(
update_user_svc, user
):
with pytest.raises(ValueError, match=f"User {user.username} does not exist"):
await update_user_svc.run(user=user)
async def test_delete_user_svc_returns_none(delete_user_svc, persisted_user):
assert await delete_user_svc.run(user=persisted_user) is None
async def test_get_user_by_id_svc_returns_user(get_user_by_id_svc, persisted_user):
assert await get_user_by_id_svc.run(user_id=persisted_user.id) == persisted_user
async def test_get_user_by_id_returns_none(get_user_by_id_svc):
assert await get_user_by_id_svc.run(user_id=uuid.uuid4()) is None
async def test_get_user_by_username(get_user_by_username_svc, persisted_user):
assert (
await get_user_by_username_svc.run(username=persisted_user.username)
== persisted_user
)
async def test_get_user_by_username_returns_none(get_user_by_username_svc):
assert await get_user_by_username_svc.run(username="unknown_user") is None
async def test_is_mod_svc_returns_true_for_channel(is_mod_svc: IsModSvc, user: User):
is_mod = await is_mod_svc.run(user=user, username="TestUser", channel="TestUser")
assert is_mod
@ -14,27 +56,30 @@ async def test_is_mod_svc_returns_true_for_channel(is_mod_svc: IsModSvc, user: U
async def test_is_mod_svc_returns_true_for_user_in_modlist(
is_mod_svc: IsModSvc,
user: User,
chatbot_settings: ChatbotSettings,
persisted_user: User,
persisted_chatbot: Chatbot,
):
is_mod = await is_mod_svc.run(
user=user, username=chatbot_settings.mods[1], channel=user.user
)
assert is_mod
assert persisted_chatbot.mods
for mod in persisted_chatbot.mods:
is_mod = await is_mod_svc.run(
user=persisted_user, username=mod, channel=persisted_user.username
)
assert is_mod
async def test_is_mod_svc_returns_false_for_settingless_user(
async def test_is_mod_svc_returns_false_for_chatbotless_user(
is_mod_svc: IsModSvc, user: User
):
is_mod = await is_mod_svc.run(user=user, username="TestUser", channel="TestUser2")
assert not is_mod
@pytest.mark.usefixtures("chatbot_settings")
async def test_is_mod_svc_returns_false_for_user_not_in_modlist(
is_mod_svc: IsModSvc, user: User
is_mod_svc: IsModSvc, persisted_user: User, persisted_chatbot
):
is_mod = await is_mod_svc.run(user=user, username="TestUser2", channel=user.user)
is_mod = await is_mod_svc.run(
user=persisted_user, username="TestUser2", channel=persisted_user.username
)
assert not is_mod
@ -94,3 +139,54 @@ async def test_backoff_svc_raises_value_error_for_sync_called_from_async(
):
with pytest.raises(ValueError, match="Cannot call async function with .call()"):
backoff_svc.call(async_backoff_callable)
async def test_create_quote_svc(create_quote_svc, quote):
created_quote = await create_quote_svc.run(quote)
assert created_quote == quote
async def test_get_random_quote_svc_returns_random_quote(
get_random_quote_svc, persisted_quote
):
random_quote = await get_random_quote_svc.run(
channel_name=persisted_quote.channel_name
)
assert random_quote == persisted_quote
def test_generate_hello_svc_returns_greeting(hello_generator_svc, user):
greeting = hello_generator_svc.run(username=user.username)
assert greeting.split()[0] in hello_generator_svc.hellos
def test_generate_hello_svc_returns_none_on_already_greeted_user(
hello_generator_svc, user
):
assert hello_generator_svc.run(username=user.username)
assert not hello_generator_svc.run(username=user.username)
async def test_create_chatbot_svc_returns_chatbot(create_chatbot_svc, chatbot):
created_chatbot = await create_chatbot_svc.run(chatbot)
assert created_chatbot == chatbot
async def test_get_chatbot_by_user_id_svc_returns_chatbot(
get_chatbot_by_user_id_svc, persisted_chatbot
):
existing_chatbot = await get_chatbot_by_user_id_svc.run(
user_id=persisted_chatbot.user_id
)
assert existing_chatbot == persisted_chatbot
async def test_update_chatbot_svc_returns_chatbot(
update_chatbot_svc, persisted_chatbot, faker
):
persisted_chatbot.automatic_quote_timer = faker.pyint()
persisted_chatbot.automatic_quote_timer = faker.pyint()
persisted_chatbot.mods = [faker.word() for _ in range(5)]
updated_chatbot = await update_chatbot_svc.run(chatbot=persisted_chatbot)
persisted_chatbot.last_updated_at = updated_chatbot.last_updated_at
assert updated_chatbot == persisted_chatbot