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:
Dmitry Afanasyev
2023-10-08 04:43:24 +03:00
committed by GitHub
parent 23031b0777
commit beb32fb0b9
25 changed files with 434 additions and 255 deletions

View File

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

View File

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

View 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()