From bba21b49257d955a6d0317db05ae5df0611137f1 Mon Sep 17 00:00:00 2001 From: Dmitry Afanasyev <71835315+Balshgit@users.noreply.github.com> Date: Tue, 9 Jan 2024 00:22:44 +0300 Subject: [PATCH] minor improvements (#82) * update README.md * add test for existing models * db datetime to python datetime * replace(tzinfo=None) in tests --- README.md | 4 ++-- bot_microservice/core/auth/repository.py | 8 ++++++-- .../tests/integration/bot/test_bot_updates.py | 14 +++++++------- .../integration/bot/test_chatgpt_models.py | 19 ++++++++++++++++++- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index e2dbd75..5923418 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,8 @@ python main.py ``` ```shell -cd bot_microservice - poetry run uvicorn main:create_app --factory --host 0.0.0.0 --port 8080 --forwarded-allow-ips='*' --proxy-headers --reload --workers 2 --log-level warning +cd bot_microservice && +poetry run uvicorn main:create_app --factory --host 0.0.0.0 --port 8080 --forwarded-allow-ips='*' --proxy-headers --reload --workers 2 --log-level warning ``` To start on polling mode set `START_WITH_WEBHOOK` to blank diff --git a/bot_microservice/core/auth/repository.py b/bot_microservice/core/auth/repository.py index 5586316..051d3f6 100644 --- a/bot_microservice/core/auth/repository.py +++ b/bot_microservice/core/auth/repository.py @@ -1,9 +1,11 @@ from dataclasses import dataclass +from datetime import datetime -from sqlalchemy import func, select +from sqlalchemy import select from sqlalchemy.dialects.sqlite import insert from sqlalchemy.orm import load_only +from constants import MOSCOW_TZ from core.auth.dto import UserIsBannedDTO from core.auth.models.users import AccessToken, User, UserQuestionCount from infra.database.db_adapter import Database @@ -70,7 +72,9 @@ class UserRepository: UserQuestionCount.question_count.key ): UserQuestionCount.question_count + 1, - UserQuestionCount.get_real_column_name(UserQuestionCount.last_question_at.key): func.now(), + UserQuestionCount.get_real_column_name(UserQuestionCount.last_question_at.key): datetime.now( + tz=MOSCOW_TZ + ), }, ) ) diff --git a/bot_microservice/tests/integration/bot/test_bot_updates.py b/bot_microservice/tests/integration/bot/test_bot_updates.py index 34dc32f..1717c90 100644 --- a/bot_microservice/tests/integration/bot/test_bot_updates.py +++ b/bot_microservice/tests/integration/bot/test_bot_updates.py @@ -11,7 +11,7 @@ from httpx import AsyncClient, Response from sqlalchemy.orm import Session from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update -from constants import BotStagesEnum +from constants import MOSCOW_TZ, BotStagesEnum from core.auth.models.users import User, UserQuestionCount from core.bot.app import BotApplication, BotQueue from main import Application @@ -415,9 +415,9 @@ async def test_ask_question_action_bot_user_not_exists( created_user_question_count = dbsession.query(UserQuestionCount).filter_by(user_id=user["id"]).one() assert created_user_question_count.question_count == 1 - assert created_user_question_count.last_question_at - datetime.datetime.now() < datetime.timedelta( # noqa: DTZ005 - seconds=2 - ) + assert created_user_question_count.last_question_at.replace(tzinfo=None) - datetime.datetime.now( + tz=MOSCOW_TZ + ).replace(tzinfo=None) < datetime.timedelta(seconds=2) async def test_ask_question_action_bot_user_already_exists( @@ -470,9 +470,9 @@ async def test_ask_question_action_bot_user_already_exists( updated_user_question_count = dbsession.query(UserQuestionCount).filter_by(user_id=user["id"]).one() assert updated_user_question_count.question_count == existing_user_question_count + 1 - assert updated_user_question_count.last_question_at - datetime.datetime.now() < datetime.timedelta( # noqa: DTZ005 - seconds=2 - ) + assert updated_user_question_count.last_question_at.replace(tzinfo=None) - datetime.datetime.now( + tz=MOSCOW_TZ + ).replace(tzinfo=None) < datetime.timedelta(seconds=2) async def test_ask_question_action_user_is_banned( diff --git a/bot_microservice/tests/integration/bot/test_chatgpt_models.py b/bot_microservice/tests/integration/bot/test_chatgpt_models.py index a6d9cb2..4eb5870 100644 --- a/bot_microservice/tests/integration/bot/test_chatgpt_models.py +++ b/bot_microservice/tests/integration/bot/test_chatgpt_models.py @@ -4,6 +4,7 @@ from sqlalchemy.orm import Session from constants import ChatGptModelsEnum from core.bot.models.chatgpt import ChatGptModels from core.bot.services import ChatGptService +from tests.integration.factories.bot import ChatGptModelFactory pytestmark = [ pytest.mark.asyncio, @@ -11,7 +12,7 @@ pytestmark = [ ] -async def test_models_update(dbsession: Session) -> None: +async def test_models_creation(dbsession: Session) -> None: models = dbsession.query(ChatGptModels).all() assert len(models) == 0 @@ -28,3 +29,19 @@ async def test_models_update(dbsession: Session) -> None: for model_priority in ChatGptModelsEnum.base_models_priority(): assert model_priorities[model_priority["model"]] == model_priority["priority"] + + +async def test_update_existing_models(dbsession: Session) -> None: + ChatGptModelFactory.create_batch(size=3) + + chatgpt_service = ChatGptService.build() + + await chatgpt_service.update_chatgpt_models() + + models = dbsession.query(ChatGptModels).all() + + model_priorities = {model.model: model.priority for model in models} + assert len(models) == len(ChatGptModelsEnum.base_models_priority()) + + for model_priority in ChatGptModelsEnum.base_models_priority(): + assert model_priorities.get(model_priority["model"]) == model_priority["priority"]