mirror of
https://github.com/Balshgit/gpt_chat_bot.git
synced 2026-02-04 16:50:38 +03:00
add testing database and chatgpt factories (#28)
* add testing database and chatgpt factories * include lint job to develop stage * reformat audioconverter save files to tmp directory * add api tests * update README.md
This commit is contained in:
@@ -1,17 +1,26 @@
|
||||
import string
|
||||
import time
|
||||
from typing import Any
|
||||
from typing import Any, NamedTuple
|
||||
|
||||
import factory
|
||||
import factory.fuzzy
|
||||
from faker import Faker
|
||||
|
||||
from constants import BotStagesEnum
|
||||
from tests.integration.factories.models import Chat, User
|
||||
from core.bot.models.chat_gpt import ChatGpt
|
||||
from tests.integration.factories.utils import BaseModelFactory
|
||||
|
||||
faker = Faker("ru_RU")
|
||||
|
||||
|
||||
class User(NamedTuple):
|
||||
id: int
|
||||
is_bot: bool
|
||||
first_name: str | None
|
||||
last_name: str | None
|
||||
username: str | None
|
||||
language_code: str
|
||||
|
||||
|
||||
class BotUserFactory(factory.Factory):
|
||||
id = factory.Sequence(lambda n: 1000 + n)
|
||||
is_bot = False
|
||||
@@ -24,6 +33,14 @@ class BotUserFactory(factory.Factory):
|
||||
model = User
|
||||
|
||||
|
||||
class Chat(NamedTuple):
|
||||
id: int
|
||||
first_name: str | None
|
||||
last_name: str | None
|
||||
username: str
|
||||
type: str
|
||||
|
||||
|
||||
class BotChatFactory(factory.Factory):
|
||||
id = factory.Sequence(lambda n: 1 + n)
|
||||
first_name = factory.Faker("first_name")
|
||||
@@ -35,6 +52,15 @@ class BotChatFactory(factory.Factory):
|
||||
model = Chat
|
||||
|
||||
|
||||
class ChatGptModelFactory(BaseModelFactory):
|
||||
id = factory.Sequence(lambda n: n + 1)
|
||||
model = factory.Faker("word")
|
||||
priority = factory.Faker("random_int", min=0, max=42)
|
||||
|
||||
class Meta:
|
||||
model = ChatGpt
|
||||
|
||||
|
||||
class BotInfoFactory(factory.DictFactory):
|
||||
token = factory.Faker(
|
||||
"bothify", text="#########:??????????????????????????-#????????#?", letters=string.ascii_letters
|
||||
@@ -67,6 +93,7 @@ class BotMessageFactory(factory.DictFactory):
|
||||
date = time.time()
|
||||
text = factory.Faker("text")
|
||||
entities = factory.LazyFunction(lambda: [BotEntitleFactory()])
|
||||
voice = None
|
||||
|
||||
@classmethod
|
||||
def create_instance(cls, **kwargs: Any) -> dict[str, Any]:
|
||||
@@ -94,3 +121,13 @@ class CallBackFactory(factory.DictFactory):
|
||||
class BotCallBackQueryFactory(factory.DictFactory):
|
||||
update_id = factory.Faker("random_int", min=10**8, max=10**9 - 1)
|
||||
callback_query = factory.LazyFunction(lambda: BotMessageFactory.create_instance())
|
||||
|
||||
|
||||
class BotVoiceFactory(factory.DictFactory):
|
||||
duration = factory.Faker("random_int", min=1, max=700)
|
||||
file_id = factory.Faker(
|
||||
"lexify", text="????????????????????????????????????????????????????????????????????????", locale="en_US"
|
||||
)
|
||||
file_size = factory.Faker("random_int")
|
||||
file_unique_id = factory.Faker("lexify", text="???????????????", locale="en_US")
|
||||
mime_type = "audio/ogg"
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
from typing import NamedTuple
|
||||
|
||||
|
||||
class User(NamedTuple):
|
||||
id: int
|
||||
is_bot: bool
|
||||
first_name: str | None
|
||||
last_name: str | None
|
||||
username: str | None
|
||||
language_code: str
|
||||
|
||||
|
||||
class Chat(NamedTuple):
|
||||
id: int
|
||||
first_name: str | None
|
||||
last_name: str | None
|
||||
username: str
|
||||
type: str
|
||||
13
bot_microservice/tests/integration/factories/utils.py
Normal file
13
bot_microservice/tests/integration/factories/utils.py
Normal file
@@ -0,0 +1,13 @@
|
||||
import factory
|
||||
|
||||
from infra.database.db_adapter import Database
|
||||
from settings.config import settings
|
||||
|
||||
database = Database(settings)
|
||||
|
||||
|
||||
class BaseModelFactory(factory.alchemy.SQLAlchemyModelFactory):
|
||||
class Meta:
|
||||
abstract = True
|
||||
sqlalchemy_session_persistence = "commit"
|
||||
sqlalchemy_session = database.get_sync_db_session()
|
||||
Reference in New Issue
Block a user