fix(vision): task_id di vision_results/vision_reference_images in CASCADE (#38.6)
Migrazione 014 (batch_alter_table, nome del vincolo esistente letto con sa.inspect invece di indovinato) e stessi ondelete nei modelli ORM. Cancellare un task con esecuzioni o immagini di riferimento non fallisce più su un vincolo FK MySQL. MANCA: i file delle immagini di riferimento su disco non vengono rimossi alla cancellazione del task - tasks.py::delete_task (NON TOCCARE da questo lotto) cancella con `db.delete(task)` diretto, senza un punto unico in vision_service da agganciare. `_copy_tasks_to_version` (recipe_service.py) non copia le immagini di riferimento nel copy-on-write: nemmeno questo si tocca qui. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -4,6 +4,7 @@ from sqlalchemy import select
|
||||
|
||||
from src.backend.models.orm.recipe import RecipeVersion
|
||||
from src.backend.models.orm.task import TASK_TYPES, RecipeSubtask, RecipeTask
|
||||
from src.backend.models.orm.vision import VisionReferenceImage, VisionResult
|
||||
from src.backend.tests.conftest import create_test_recipe
|
||||
|
||||
|
||||
@@ -69,3 +70,11 @@ def test_the_typo_is_gone():
|
||||
"""`xf_compare` era un refuso: si corregge finché nessuna riga lo usa."""
|
||||
assert "dxf_compare" in TASK_TYPES
|
||||
assert "xf_compare" not in TASK_TYPES
|
||||
|
||||
|
||||
@pytest.mark.parametrize("model", [VisionResult, VisionReferenceImage])
|
||||
def test_task_id_cascades_when_the_task_is_deleted(model):
|
||||
"""#38.6: cancellare un task con esecuzioni/immagini non deve fallire su
|
||||
un vincolo FK MySQL - la riga di visione deve seguirlo."""
|
||||
(fk,) = model.__table__.columns["task_id"].foreign_keys
|
||||
assert fk.ondelete == "CASCADE"
|
||||
|
||||
Reference in New Issue
Block a user