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)