72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
from pathlib import Path
|
|
from sqlalchemy import inspect
|
|
|
|
from hqt.config import Settings
|
|
from hqt.db.engine import ensure_db, get_engine, get_session_factory
|
|
from hqt.db.models import Harness, Project, Session
|
|
|
|
|
|
def _tmp_settings(tmp_path: Path) -> Settings:
|
|
return Settings(db_path=tmp_path / "test.db")
|
|
|
|
|
|
def test_ensure_db_creates_tables(tmp_path):
|
|
settings = _tmp_settings(tmp_path)
|
|
ensure_db(settings)
|
|
engine = get_engine(settings)
|
|
tables = inspect(engine).get_table_names()
|
|
assert "projects" in tables
|
|
assert "sessions" in tables
|
|
assert "harnesses" in tables
|
|
assert "mcp_servers" in tables
|
|
assert "project_mcp_servers" in tables
|
|
assert "project_skills" in tables
|
|
|
|
|
|
def test_project_crud(tmp_path):
|
|
settings = _tmp_settings(tmp_path)
|
|
ensure_db(settings)
|
|
engine = get_engine(settings)
|
|
factory = get_session_factory(engine)
|
|
|
|
with factory() as session:
|
|
p = Project(name="test", path="/tmp/test")
|
|
session.add(p)
|
|
session.commit()
|
|
assert p.id is not None
|
|
|
|
p.name = "updated"
|
|
session.commit()
|
|
|
|
fetched = session.get(Project, p.id)
|
|
assert fetched.name == "updated"
|
|
|
|
session.delete(fetched)
|
|
session.commit()
|
|
assert session.get(Project, p.id) is None
|
|
|
|
|
|
def test_session_with_fk(tmp_path):
|
|
settings = _tmp_settings(tmp_path)
|
|
ensure_db(settings)
|
|
engine = get_engine(settings)
|
|
factory = get_session_factory(engine)
|
|
|
|
with factory() as session:
|
|
p = Project(name="proj", path="/tmp/proj")
|
|
h = Harness(name="claude-code")
|
|
session.add_all([p, h])
|
|
session.commit()
|
|
|
|
s = Session(
|
|
project_id=p.id,
|
|
harness_id=h.id,
|
|
tmux_session_name="hqt-test-1",
|
|
)
|
|
session.add(s)
|
|
session.commit()
|
|
|
|
assert s.project.name == "proj"
|
|
assert s.harness.name == "claude-code"
|
|
assert s in p.sessions
|