from apps.admin_console.services.automation_store import AutomationStore from apps.admin_console.services import exploration_evidence from artemis.config.exploration import ExplorationConfig from artemis.exploration.models import CaseDraft from artemis.exploration.store import ExplorationStore def test_archive_links_only_current_run_media_and_keeps_case_provenance(tmp_path, monkeypatch): repository = ExplorationStore(AutomationStore(tmp_path / "history.db")) session = repository.create("探索", ExplorationConfig(), {}, "create") first = repository.reserve_run( session["id"], "first", kind="exploration", goal="探索", task_config={} ) repository.finish_run(first["id"], {"status": "completed"}) second = repository.reserve_run( session["id"], "second", kind="exploration", goal="继续", task_config={} ) repository.finish_run(second["id"], {"status": "completed"}) repository.save_case( session["id"], CaseDraft(name="用例", goal="已保存提示词"), 0, "save", source_run_id=second["id"], ) for run in (first, second): repository.database.put( "exploration_demo", run["id"], { "id": run["id"], "exploration_id": session["id"], "run_id": run["id"], "media": [{"kind": "android", "segments": [{"file": "evidence/demo.mp4"}]}], }, ) monkeypatch.setattr(exploration_evidence, "explorations", repository) monkeypatch.setattr(exploration_evidence, "task_root", lambda _: tmp_path) index = exploration_evidence.exploration_index( second["id"], {(tmp_path / "evidence/demo.mp4").resolve(): "任务录屏/人工示范/demo.mp4"} ) old, current = index["demonstrations"] assert old["media"][0]["segments"][0]["file"] is None assert current["media"][0]["segments"][0]["file"] == "任务录屏/人工示范/demo.mp4" assert current["media"][0]["segments"][0]["trace_file"] == "evidence/demo.mp4" assert index["cases"][0]["source_run_id"] == second["id"] assert ( repository.database.get("exploration_demo", second["id"])["media"][0]["segments"][0]["file"] == "evidence/demo.mp4" )