from __future__ import annotations import sqlite3 from app.store import RunStore def test_restart_marks_unfinished_runs_interrupted(settings) -> None: store = RunStore(settings.database_path) store.initialize() run, created = store.enqueue( target_kind="task", target_path="checks/status.py", queue_group="checks", ) assert created is True store.mark_interrupted() interrupted = store.get(run.id) assert interrupted is not None assert interrupted.status == "interrupted" assert interrupted.finished_at is not None def test_initialize_migrates_existing_database_with_input_column(settings) -> None: settings.state_root.mkdir() with sqlite3.connect(settings.database_path) as connection: connection.execute( """ CREATE TABLE runs ( id INTEGER PRIMARY KEY, target_kind TEXT NOT NULL, target_path TEXT NOT NULL, queue_group TEXT NOT NULL, trigger TEXT NOT NULL, status TEXT NOT NULL, created_at TEXT NOT NULL, started_at TEXT, finished_at TEXT, exit_code INTEGER, cancel_requested_at TEXT, parent_run_id INTEGER, log_path TEXT, message TEXT ) """ ) store = RunStore(settings.database_path) store.initialize() run, _ = store.enqueue( target_kind="task", target_path="checks/status.py", queue_group="checks", input_data={"attempts": 2}, ) assert run.input_json == '{"attempts":2}'