From 0a99aeed0cbbcfb3ccf8aa9214b35be3fc71e774 Mon Sep 17 00:00:00 2001 From: tsygankoviva Date: Fri, 3 Jul 2026 15:35:20 +0300 Subject: [PATCH] =?UTF-8?q?project-sheets:=20=D0=B3=D0=BE=D0=B4=20=D0=BE?= =?UTF-8?q?=D0=BF=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D1=81=20null?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/src/domain/schemas.py | 4 +++ .../integration/test_projects_api_smoke.py | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/api/src/domain/schemas.py b/api/src/domain/schemas.py index b11133e..47ae594 100644 --- a/api/src/domain/schemas.py +++ b/api/src/domain/schemas.py @@ -374,6 +374,10 @@ class AddProjectBody(BaseModel): staff_count: Optional[int] = None total_area: Optional[float] = None + @field_validator("year", mode="before") + @classmethod + def optional_year(cls, v: Any) -> Any: + return v or datetime.now().year class AddLineSchema(BaseModel): expense_item_id: Optional[int] = None diff --git a/api/tests/integration/test_projects_api_smoke.py b/api/tests/integration/test_projects_api_smoke.py index dc21b78..b480698 100644 --- a/api/tests/integration/test_projects_api_smoke.py +++ b/api/tests/integration/test_projects_api_smoke.py @@ -48,6 +48,31 @@ def _add_line(client, admin_tokens, auth_headers, project_id: int) -> int: pytest.skip("Не удалось подобрать expense_item_id для add_form3_line в текущей БД") +def test_create_project_smoke(client, admin_tokens, auth_headers): + name = f"PT_{uuid.uuid4().hex[:10]}" + response = client.post( + "/api/v1/projects", + json={"name": name, "year": None, "branch_id": 1}, + headers=auth_headers(admin_tokens), + ) + assert response.status_code == 200 + payload = response.json() + assert "project_id" in payload + assert (project_id := payload["project_id"]) is not None + response = client.get( + f"/api/v1/projects/{project_id}", + headers=auth_headers(admin_tokens), + ) + assert response.status_code == 200 + payload = response.json() + assert "result" in payload + assert "id" in payload["result"] + assert payload["result"]["id"] == project_id + assert "years" in payload["result"] + assert isinstance(payload["result"]["years"], list) + assert len(payload["result"]["years"]) == 1 + + def test_projects_write_smoke(client, admin_tokens, auth_headers): project_id, name = _create_project(client, admin_tokens, auth_headers)