81 lines
2.9 KiB
Python
81 lines
2.9 KiB
Python
# backend/tests/test_project_manager_db.py
|
|
import io
|
|
import pytest
|
|
import tempfile
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import sessionmaker
|
|
from backend.app.db import Base
|
|
import backend.app.db as db_module
|
|
from backend.app.storage.local import LocalFSStorage
|
|
import backend.app.models.db_models # ensure all ORM models are registered with Base.metadata
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def isolated_db(tmp_path):
|
|
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
|
|
|
|
|
|
@pytest.fixture
|
|
def storage(tmp_path):
|
|
return LocalFSStorage(str(tmp_path))
|
|
|
|
|
|
def test_create_project(storage):
|
|
from backend.app.models.project import ProjectManager
|
|
proj = ProjectManager.create_project("Test Project", storage=storage)
|
|
assert proj["name"] == "Test Project"
|
|
assert proj["status"] == "created"
|
|
assert "id" in proj
|
|
|
|
|
|
def test_get_project(storage):
|
|
from backend.app.models.project import ProjectManager
|
|
created = ProjectManager.create_project("My Project", storage=storage)
|
|
fetched = ProjectManager.get_project(created["id"])
|
|
assert fetched is not None
|
|
assert fetched["name"] == "My Project"
|
|
|
|
|
|
def test_project_not_found(storage):
|
|
from backend.app.models.project import ProjectManager
|
|
result = ProjectManager.get_project("nonexistent-id")
|
|
assert result is None
|
|
|
|
|
|
def test_save_and_get_extracted_text(storage):
|
|
from backend.app.models.project import ProjectManager
|
|
proj = ProjectManager.create_project("Text Project", storage=storage)
|
|
ProjectManager.save_extracted_text(proj["id"], "hello extracted", storage=storage)
|
|
text = ProjectManager.get_extracted_text(proj["id"], storage=storage)
|
|
assert text == "hello extracted"
|
|
|
|
|
|
def test_project_survives_manager_reset(storage):
|
|
"""Les dades han d'estar a la BD, no a la memòria."""
|
|
from backend.app.models.project import ProjectManager
|
|
created = ProjectManager.create_project("Persist Me", storage=storage)
|
|
fetched = ProjectManager.get_project(created["id"])
|
|
assert fetched is not None
|
|
|
|
|
|
def test_list_projects(storage):
|
|
from backend.app.models.project import ProjectManager
|
|
ProjectManager.create_project("P1", storage=storage)
|
|
ProjectManager.create_project("P2", storage=storage)
|
|
projects = ProjectManager.list_projects()
|
|
assert len(projects) == 2
|
|
|
|
|
|
def test_delete_project(storage):
|
|
from backend.app.models.project import ProjectManager
|
|
proj = ProjectManager.create_project("Del Me", storage=storage)
|
|
result = ProjectManager.delete_project(proj["id"], storage=storage)
|
|
assert result is True
|
|
assert ProjectManager.get_project(proj["id"]) is None
|