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
16 changes: 3 additions & 13 deletions backend/schemas/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ class ProjectResponse(ProjectBase):
visibility: ProjectVisibility
status: RenderStatus
user_id: int
render_id: int | None
render_id: int | None = None
id: int


Expand Down Expand Up @@ -105,12 +105,12 @@ async def get_from_database(
expires_in=settings.minio.presigned_url_ttl_seconds,
client_method="get_object",
)
render.url = render_file_url.replace("minio", "localhost")
render.url = render_file_url.replace(settings.minio.host, "localhost")

return cls(
**project_response.model_dump(),
render=render,
url=source_file_url.replace("minio", "localhost"),
url=source_file_url.replace(settings.minio.host, "localhost"),
)


Expand Down Expand Up @@ -147,13 +147,3 @@ class ProjectResponseList(BaseModel):
project_list: list[ProjectResponse]
size: SizeConstraint
page: PageConstraint


class ProjectWithRenderFileResponseList(BaseModel):
"""
Схема для вывода информации о списке проектов с рендером.
"""

project_list: list[ProjectWithRenderFileResponse]
size: SizeConstraint
page: PageConstraint
74 changes: 74 additions & 0 deletions backend/tests/test_schemas/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,3 +90,77 @@ def file_create_data(file_base_data: dict, file_location_data: dict) -> dict:
def file_response_data(file_base_data: dict) -> dict:
file_base_data["id"] = 1
return file_base_data


@pytest.fixture
def sun_info_data() -> dict:
return {
"direction": [1.0, 1.0, 1.0],
"color": [2.0, 2.0, 2.0],
"exponent": 5,
}


@pytest.fixture
def render_base_data() -> dict:
return {
"width": 1000,
"height": 1000,
"samples": 150,
"denoiser": True,
"gpu": False,
}


@pytest.fixture
def render_create_data(render_base_data: dict) -> dict:
return {
**render_base_data,
}


@pytest.fixture
def render_create_payload_data(render_create_data: dict, sun_info_data: dict) -> dict:
return {
**render_create_data,
"background": [1.0, 1.0, 1.0],
"sun": sun_info_data,
}


@pytest.fixture
def render_response_data(render_base_data: dict) -> dict:
return {
**render_base_data,
"id": 1,
"file_id": 1,
}


@pytest.fixture
def render_full_response_data(render_response_data: dict) -> dict:
return {
**render_response_data,
"url": "http://example.com",
}


@pytest.fixture
def render_with_file_response_data(
render_response_data: dict, file_response_data: dict
) -> dict:
return {
**render_response_data,
"file": file_response_data,
}


@pytest.fixture
def render_with_file_full_response_data(
render_full_response_data: dict,
file_response_data: dict,
) -> dict:
return {
**render_full_response_data,
"file": file_response_data,
}
Empty file.
146 changes: 146 additions & 0 deletions backend/tests/test_schemas/test_project/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
import pytest


@pytest.fixture
def project_base_data() -> dict:
return {
"name": "project_name",
"description": "description",
"source_file_id": 1,
}


@pytest.fixture
def project_create_data(project_base_data: dict) -> dict:
return {
**project_base_data,
"visibility": "public",
}


@pytest.fixture
def project_with_render_create_data(
render_create_payload_data: dict,
project_create_data: dict,
) -> dict:
return {
"render": render_create_payload_data,
"project": project_create_data,
}


@pytest.fixture
def project_partial_update_data() -> dict:
return {
"name": "project_name",
"description": "description",
"visibility": "public",
}


@pytest.fixture
def project_response_data(project_base_data: dict) -> dict:
return {
**project_base_data,
"visibility": "public",
"status": "rendering",
"user_id": 1,
"render_id": 1,
"id": 1,
}


@pytest.fixture
def project_full_response_data(project_response_data: dict) -> dict:
return {
**project_response_data,
"url": "http://example.com",
}


@pytest.fixture
def project_with_render_file_full_response_data(
project_full_response_data: dict,
render_with_file_full_response_data: dict,
) -> dict:
return {
**project_full_response_data,
"render": render_with_file_full_response_data,
}


@pytest.fixture
def project_with_render_response_data(
project_response_data: dict,
render_response_data: dict,
) -> dict:
return {
**project_response_data,
"render": render_response_data,
}


@pytest.fixture
def project_with_render_file_response_data(
project_response_data: dict,
render_with_file_response_data: dict,
) -> dict:
return {
**project_response_data,
"render": render_with_file_response_data,
}


@pytest.fixture
def project_response_list_data() -> dict:
return {
"project_list": [
{
"name": "project_name1",
"description": "description1",
"source_file_id": 1,
"visibility": "public",
"status": "rendering",
"user_id": 1,
"render_id": 1,
"id": 1,
},
{
"name": "project_name2",
"description": "description2",
"source_file_id": 2,
"visibility": "private",
"status": "rendering",
"user_id": 2,
"render_id": 2,
"id": 2,
},
],
"size": 1,
"page": 1,
}


@pytest.fixture
def project_with_render_file_response_list_data() -> dict:
return {
"visibility": "public",
"status": "rendering",
"user_id": 1,
"render_id": 1,
"id": 1,
"render": {
"width": 1000,
"height": 1000,
"samples": 150,
"denoiser": True,
"gpu": False,
"id": 1,
"file_id": 1,
"file": {
"name": "file_name",
"size": 1000,
"id": 1,
},
},
}
65 changes: 65 additions & 0 deletions backend/tests/test_schemas/test_project/test_project_base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import pytest
from pydantic import ValidationError

from core.constants import (
PROJECT_NAME_MIN_LENGTH,
PROJECT_NAME_MAX_LENGTH,
PROJECT_DESCRIPTION_MAX_LENGTH,
PROJECT_DESCRIPTION_MIN_LENGTH,
)
from schemas.project import ProjectBase
from tests.test_schemas.helpers import assert_validation_error


class TestProjectBase:
def test_project_base_valid(self, project_base_data: dict) -> None:
project_base = ProjectBase(**project_base_data)
assert project_base.model_dump() == project_base_data

@pytest.mark.parametrize(
"field, value, expected_error",
[
["name", "a" * (PROJECT_NAME_MIN_LENGTH - 1), "string_too_short"],
["name", "a" * (PROJECT_NAME_MAX_LENGTH + 1), "string_too_long"],
[
"description",
"a" * (PROJECT_DESCRIPTION_MAX_LENGTH + 1),
"string_too_long",
],
],
)
def test_project_base_not_valid_field_value(
self,
project_base_data: dict,
field: str,
value: str,
expected_error: str,
) -> None:
project_base_data[field] = value
with pytest.raises(ValidationError) as exc_info:
ProjectBase(**project_base_data)

assert_validation_error(
exc_info,
expected_error,
field,
)

@pytest.mark.parametrize(
"field, value",
[
["name", "a" * PROJECT_NAME_MIN_LENGTH],
["name", "a" * PROJECT_NAME_MAX_LENGTH],
["description", "a" * PROJECT_DESCRIPTION_MIN_LENGTH],
["description", "a" * PROJECT_DESCRIPTION_MAX_LENGTH],
],
)
def test_project_base_boundary_field_value(
self,
project_base_data: dict,
field: str,
value: str,
) -> None:
project_base_data[field] = value
project_base = ProjectBase(**project_base_data)
assert project_base.model_dump() == project_base_data
Loading
Loading