minor improvements (#82)

* update README.md

* add test for existing models

* db datetime to python datetime

* replace(tzinfo=None) in tests
This commit is contained in:
Dmitry Afanasyev 2024-01-09 00:22:44 +03:00 committed by GitHub
parent 28d01f551b
commit bba21b4925
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 12 deletions

View File

@ -38,7 +38,7 @@ python main.py
``` ```
```shell ```shell
cd bot_microservice 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 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
``` ```

View File

@ -1,9 +1,11 @@
from dataclasses import dataclass 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.dialects.sqlite import insert
from sqlalchemy.orm import load_only from sqlalchemy.orm import load_only
from constants import MOSCOW_TZ
from core.auth.dto import UserIsBannedDTO from core.auth.dto import UserIsBannedDTO
from core.auth.models.users import AccessToken, User, UserQuestionCount from core.auth.models.users import AccessToken, User, UserQuestionCount
from infra.database.db_adapter import Database from infra.database.db_adapter import Database
@ -70,7 +72,9 @@ class UserRepository:
UserQuestionCount.question_count.key UserQuestionCount.question_count.key
): UserQuestionCount.question_count ): UserQuestionCount.question_count
+ 1, + 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
),
}, },
) )
) )

View File

@ -11,7 +11,7 @@ from httpx import AsyncClient, Response
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update 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.auth.models.users import User, UserQuestionCount
from core.bot.app import BotApplication, BotQueue from core.bot.app import BotApplication, BotQueue
from main import Application 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() 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.question_count == 1
assert created_user_question_count.last_question_at - datetime.datetime.now() < datetime.timedelta( # noqa: DTZ005 assert created_user_question_count.last_question_at.replace(tzinfo=None) - datetime.datetime.now(
seconds=2 tz=MOSCOW_TZ
) ).replace(tzinfo=None) < datetime.timedelta(seconds=2)
async def test_ask_question_action_bot_user_already_exists( 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() 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.question_count == existing_user_question_count + 1
assert updated_user_question_count.last_question_at - datetime.datetime.now() < datetime.timedelta( # noqa: DTZ005 assert updated_user_question_count.last_question_at.replace(tzinfo=None) - datetime.datetime.now(
seconds=2 tz=MOSCOW_TZ
) ).replace(tzinfo=None) < datetime.timedelta(seconds=2)
async def test_ask_question_action_user_is_banned( async def test_ask_question_action_user_is_banned(

View File

@ -4,6 +4,7 @@ from sqlalchemy.orm import Session
from constants import ChatGptModelsEnum from constants import ChatGptModelsEnum
from core.bot.models.chatgpt import ChatGptModels from core.bot.models.chatgpt import ChatGptModels
from core.bot.services import ChatGptService from core.bot.services import ChatGptService
from tests.integration.factories.bot import ChatGptModelFactory
pytestmark = [ pytestmark = [
pytest.mark.asyncio, 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() models = dbsession.query(ChatGptModels).all()
assert len(models) == 0 assert len(models) == 0
@ -28,3 +29,19 @@ async def test_models_update(dbsession: Session) -> None:
for model_priority in ChatGptModelsEnum.base_models_priority(): for model_priority in ChatGptModelsEnum.base_models_priority():
assert model_priorities[model_priority["model"]] == model_priority["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"]