From 2b00f83a2e3f6458aa2b0964096a4ddc5130b7ba Mon Sep 17 00:00:00 2001 From: AdrianoDev Date: Mon, 21 Sep 2026 23:25:17 +0200 Subject: [PATCH] test(tasks): copre recipe_id nel copy-on-write di create_task (#4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sospetto MissingGreenlet su TaskResponse.recipe_id (via RecipeTask.version) quando create_task passa per il copy-on-write - il task appena creato non ha .version precaricato. Test aggiunto: verde, non riproducibile. La lazy load risolve via identity map (new_version è già nella sessione, FK semplice → use_get), senza toccare il DB. Test tenuto come guardia di regressione. Co-Authored-By: Claude Sonnet 5 --- src/backend/tests/test_tasks.py | 39 +++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/backend/tests/test_tasks.py b/src/backend/tests/test_tasks.py index e72b4c5..d29fad3 100644 --- a/src/backend/tests/test_tasks.py +++ b/src/backend/tests/test_tasks.py @@ -73,6 +73,45 @@ class TestCreateTask: assert len(data["subtasks"]) == 1 assert data["subtasks"][0]["description"] == "Surface roughness" + async def test_create_task_on_version_with_measurements_has_recipe_id( + self, + client: AsyncClient, + maker_user: User, + measurement_tec_user: User, + db_session: AsyncSession, + ): + """Copy-on-write branch (gitea#4): TaskResponse.recipe_id must not crash.""" + recipe = await create_test_recipe(db_session, maker_user.id, code="COW-CT") + task = (await client.get( + f"/api/recipes/{recipe.id}/tasks", headers=auth_headers(maker_user), + )).json()[0] + subtask_id = task["subtasks"][0]["id"] + assert (await _measure( + client, measurement_tec_user, subtask_id, task["version_id"] + )).status_code == 200 + + resp = await client.post( + f"/api/recipes/{recipe.id}/tasks", + headers=auth_headers(maker_user), + json={ + "title": "New Task After Measurement", + "subtasks": [ + { + "marker_number": 1, + "description": "Surface roughness", + "nominal": 5.0, + "utl": 5.5, + "ltl": 4.5, + "unit": "um", + } + ], + }, + ) + assert resp.status_code == 201, resp.text + data = resp.json() + assert data["recipe_id"] == recipe.id + assert data["version_id"] != task["version_id"] + class TestUpdateTask: """PUT /api/tasks/{task_id} tests."""