MicroFish/backend/tests/test_project_task_recovery.py

57 lines
2.1 KiB
Python

# backend/tests/test_project_task_recovery.py
"""
Tests per a la garantia que active_task_id es persisteix i es recupera.
Equivalent als tests originals sobre Project.to_dict/from_dict,
ara adaptats a ProjectManager + BD SQLAlchemy.
"""
import pytest
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from backend.app.db import Base
import backend.app.db as db_module
import backend.app.models.db_models # registra tots els models ORM
@pytest.fixture(autouse=True)
def isolated_db():
"""BD SQLite en memòria per a cada test."""
db_module._engine = create_engine("sqlite:///:memory:", connect_args={"check_same_thread": False})
db_module._SessionLocal = sessionmaker(bind=db_module._engine, autocommit=False, autoflush=False)
Base.metadata.create_all(db_module._engine)
yield
Base.metadata.drop_all(db_module._engine)
db_module._engine = None
db_module._SessionLocal = None
def test_project_serializes_active_task_id():
"""active_task_id es pot desar i recuperar del ProjectManager."""
from backend.app.models.project import ProjectManager
proj = ProjectManager.create_project("Test")
ProjectManager.save_project({
"id": proj["id"],
"active_task_id": "task-abc-123",
})
fetched = ProjectManager.get_project(proj["id"])
assert fetched["active_task_id"] == "task-abc-123"
def test_project_deserializes_active_task_id():
"""active_task_id es restaura correctament des de la BD."""
from backend.app.models.project import ProjectManager
proj = ProjectManager.create_project("Test")
ProjectManager.save_project({
"id": proj["id"],
"active_task_id": "task-abc-456",
})
# Simulem que es torna a llegir (com si el servidor hagués reiniciat)
fetched = ProjectManager.get_project(proj["id"])
assert fetched["active_task_id"] == "task-abc-456"
def test_project_active_task_id_defaults_none():
"""active_task_id és None per a projectes creats sense task (compatibilitat enrere)."""
from backend.app.models.project import ProjectManager
proj = ProjectManager.create_project("Test")
assert proj["active_task_id"] is None