Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions backend/infrastructure/database/repositories/render.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class RenderRepository(AbstractRenderRepository):
def __init__(self, session: AsyncSession) -> None:
self.session = session

async def get_render(self, render_id: int) -> Render | None:
async def get_by_id(self, render_id: int) -> Render | None:
stmt = (
select(Render)
.options(joinedload(Render.file))
Expand All @@ -42,7 +42,7 @@ async def create_render(self, create_render_data: RenderCreate) -> Render:
return render

async def add_render_file(self, render_id: int, file_id: int) -> Render:
render = cast(Render, await self.get_render(render_id))
render = cast(Render, await self.get_by_id(render_id))
render.file_id = file_id
await self.session.flush()
logger.debug(
Expand Down
7 changes: 7 additions & 0 deletions backend/tests/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from enum import StrEnum

from _pytest._code import ExceptionInfo
from sqlalchemy.orm import DeclarativeBase
from testcontainers.community.postgres import PostgresContainer


Expand Down Expand Up @@ -39,3 +40,9 @@ def run_migrations(database_container: PostgresContainer) -> None:
env=environment,
check=True,
)


def model_to_dictionary(model: DeclarativeBase) -> dict:
return {
column.name: getattr(model, column.name) for column in model.__table__.columns
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import pytest
from infrastructure.database.repositories import (
FileRepository,
OutboxRepository,
ProjectRepository,
RenderRepository,
TagRepository,
UserRepository,
)
from sqlalchemy.ext.asyncio import AsyncSession


@pytest.fixture(scope="function")
def file_repository(session: AsyncSession) -> FileRepository:
return FileRepository(session)


@pytest.fixture(scope="function")
def outbox_repository(session: AsyncSession) -> OutboxRepository:
return OutboxRepository(session)


@pytest.fixture(scope="function")
def user_repository(session: AsyncSession) -> UserRepository:
return UserRepository(session)


@pytest.fixture(scope="function")
def tag_repository(session: AsyncSession) -> TagRepository:
return TagRepository(session)


@pytest.fixture(scope="function")
def render_repository(session: AsyncSession) -> RenderRepository:
return RenderRepository(session)


@pytest.fixture(scope="function")
def project_repository(session: AsyncSession) -> ProjectRepository:
return ProjectRepository(session)
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
from infrastructure.database.repositories import FileRepository
from schemas.file import FileCreate
from sqlalchemy.ext.asyncio import AsyncSession

from tests.test_infrastructure.test_database.test_models.factories import create_file


class TestFileRepository:
async def test_get_by_id(
self,
session: AsyncSession,
file_repository: FileRepository,
) -> None:
file = await create_file(session)
session.expunge(file)
selected_file = await file_repository.get_by_id(file.id)
assert selected_file.id == file.id
assert selected_file.name == file.name
assert selected_file.size == file.size
assert selected_file.bucket == file.bucket
assert selected_file.key == file.key

async def test_get_by_id_not_exists_file(
self,
file_repository: FileRepository,
) -> None:
selected_file = await file_repository.get_by_id(-1)
assert selected_file is None

async def test_create_file(
self,
session: AsyncSession,
file_repository: FileRepository,
) -> None:
create_file_data = FileCreate(
name="file_name",
size=1024,
bucket="bucket",
key="key",
)
created_file = await file_repository.create_file(create_file_data)
session.expunge(created_file)
selected_file = await file_repository.get_by_id(created_file.id)
assert selected_file is not None
assert selected_file.name == create_file_data.name
assert selected_file.size == create_file_data.size
assert selected_file.bucket == create_file_data.bucket
assert selected_file.key == create_file_data.key

async def test_delete_by_id(
self,
session: AsyncSession,
file_repository: FileRepository,
) -> None:
file = await create_file(session)
await file_repository.delete_by_id(file.id)
session.expunge(file)
deleted_file = await file_repository.get_by_id(file.id)
assert deleted_file is None
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
from core.constants import EventStatus
from infrastructure.database.repositories import OutboxRepository
from schemas.event import EventCreate
from sqlalchemy.ext.asyncio import AsyncSession

from tests.test_infrastructure.test_database.test_models.factories import create_outbox


class TestOutboxRepository:
async def test_get_by_id(
self,
session: AsyncSession,
outbox_repository: OutboxRepository,
) -> None:
event = await create_outbox(session)
session.expunge(event)
selected_event = await outbox_repository.get_by_id(event.id)
assert selected_event.id == event.id
assert selected_event.topic == event.topic
assert selected_event.message == event.message
assert selected_event.status == event.status
assert selected_event.event_date == event.event_date

async def test_get_not_exist_event_by_id(
self,
outbox_repository: OutboxRepository,
) -> None:
selected_event = await outbox_repository.get_by_id(-1)
assert selected_event is None

async def test_create_event(
self,
session: AsyncSession,
outbox_repository: OutboxRepository,
) -> None:
create_event_data = EventCreate(
topic="topic",
message={
"field1": "value1",
"field2": "value2",
},
)
created_event = await outbox_repository.create_event(create_event_data)
session.expunge(created_event)
selected_event = await outbox_repository.get_by_id(created_event.id)
assert selected_event is not None
assert selected_event.topic == create_event_data.topic
assert selected_event.message == create_event_data.message
assert selected_event.status == EventStatus.pending
assert selected_event.event_date is not None

async def test_mark_event_as_sent(
self,
session: AsyncSession,
outbox_repository: OutboxRepository,
) -> None:
event = await create_outbox(session)
await outbox_repository.mark_event_as_sent(event.id)
selected_event = await outbox_repository.get_by_id(event.id)
assert selected_event is not None
assert selected_event.topic == event.topic
assert selected_event.message == event.message
assert selected_event.status == EventStatus.sent
assert selected_event.event_date is not None

async def test_get_pending_event(
self,
session: AsyncSession,
outbox_repository: OutboxRepository,
) -> None:
event = await create_outbox(session)
selected_event = await outbox_repository.get_pending_event()
assert selected_event is not None
assert selected_event.topic == event.topic
assert selected_event.message == event.message
assert selected_event.status == EventStatus.pending
assert selected_event.event_date is not None

async def test_get_pending_not_exist_event(
self,
outbox_repository: OutboxRepository,
) -> None:
selected_event = await outbox_repository.get_pending_event()
assert selected_event is None
Loading
Loading