Files
ImpTune/tests/test_db.py
T
kawaandClaude Opus 4.6 67a1cd66ec chore: complete v1.0 milestone
Archive v1.0 MVP: 7 phases, 13 plans, 27/27 requirements.

- Archive roadmap to milestones/v1.0-ROADMAP.md
- Archive requirements to milestones/v1.0-REQUIREMENTS.md
- Move milestone audit into milestones/
- Create MILESTONES.md with v1.0 entry
- Evolve PROJECT.md: move shipped requirements to Validated,
  update Context with stack/LOC, log Key Decisions with outcomes
- Collapse ROADMAP.md to one-line milestone summary
- Update STATE.md to shipped status
- Back-fill stale requirements-completed frontmatter on
  02-01, 04-01, 05-01, 06-01 SUMMARY.md files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 09:47:37 +02:00

142 lines
3.3 KiB
Python

"""Tests for database initialization and driver storage."""
import hashlib
from pathlib import Path
import pytest
@pytest.fixture
def db_env(tmp_path, monkeypatch):
"""Set up temp DATA_DIR and configure db to use temp paths."""
data_dir = tmp_path / "data"
data_dir.mkdir()
drivers_dir = data_dir / "drivers"
drivers_dir.mkdir()
db_path = str(data_dir / "imptune.db")
monkeypatch.setenv("DATA_DIR", str(data_dir))
import imptune.config as cfg
cfg.DATA_DIR = str(data_dir)
cfg.DB_PATH = db_path
cfg.DRIVERS_DIR = str(drivers_dir)
# Close and re-init the db with the temp path
from imptune.db.database import db
if not db.is_closed():
db.close()
return {
"data_dir": data_dir,
"drivers_dir": drivers_dir,
"db_path": db_path,
}
def test_create_tables(db_env):
"""init_db() creates all 4 tables in a fresh SQLite file."""
from imptune.db.database import db, init_db
if not db.is_closed():
db.close()
init_db()
tables = db.get_tables()
assert "client" in tables
assert "driver" in tables
assert "printer" in tables
assert "icon" in tables
db.close()
def test_wal_mode(db_env):
"""After init_db(), PRAGMA journal_mode returns 'wal'."""
from imptune.db.database import db, init_db
if not db.is_closed():
db.close()
init_db()
cursor = db.execute_sql("PRAGMA journal_mode;")
mode = cursor.fetchone()[0]
assert mode == "wal"
db.close()
def test_foreign_keys(db_env):
"""After init_db(), PRAGMA foreign_keys returns 1."""
from imptune.db.database import db, init_db
if not db.is_closed():
db.close()
init_db()
cursor = db.execute_sql("PRAGMA foreign_keys;")
value = cursor.fetchone()[0]
assert value == 1
db.close()
def test_idempotent(db_env):
"""Calling init_db() twice does not raise an error."""
from imptune.db.database import db, init_db
if not db.is_closed():
db.close()
init_db()
db.close()
init_db() # second call — must not raise
db.close()
def test_driver_store_save(db_env, tmp_path):
"""Saving bytes returns their SHA256 hex digest and creates the file."""
from imptune.storage.driver_store import DriverStore
drivers_dir = db_env["drivers_dir"]
store = DriverStore(str(drivers_dir))
data = b"test driver package content"
expected_sha256 = hashlib.sha256(data).hexdigest()
result = store.save(data)
assert result == expected_sha256
assert (drivers_dir / f"{expected_sha256}.zip").exists()
def test_driver_store_dedup(db_env):
"""Saving the same bytes twice results in one file on disk."""
from imptune.storage.driver_store import DriverStore
drivers_dir = db_env["drivers_dir"]
store = DriverStore(str(drivers_dir))
data = b"duplicate driver data"
store.save(data)
store.save(data)
files = list(drivers_dir.iterdir())
assert len(files) == 1
def test_driver_store_get_path(db_env):
"""get_path(sha256) returns the correct file path."""
from imptune.storage.driver_store import DriverStore
drivers_dir = db_env["drivers_dir"]
store = DriverStore(str(drivers_dir))
sha256 = "abcdef1234567890" * 4 # 64 hex chars
path = store.get_path(sha256)
assert path == Path(str(drivers_dir)) / f"{sha256}.zip"