57 lines
2.1 KiB
Python
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
|