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,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

View File

@ -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
),
},
)
)

View File

@ -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(

View File

@ -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"]