Files
PlantAI-dev/tests/unit/test_manifest_identity_postflight.py
2026-08-03 18:42:47 +08:00

82 lines
3.0 KiB
Python
Executable File

from __future__ import annotations
from gfa_core.mas.tools.stage_identity import merge_manifest_identity_params, resolve_stage_identity
def test_postflight_manifest_identity_overrides_stale_task_identity(tmp_path):
workspace_root = tmp_path / "workspace"
(workspace_root / "job_manifest" / "final").mkdir(parents=True)
stale_params = {
"prefix": "Si.HDZIP",
"scopeId": "HDZIP.target-Si.target_only",
"scopeMode": "target_only",
"analysisRoute": "single_species",
"memberSetId": "HDZIP.target-Si.target_only:single_species:all_members",
"targetSpecies": ["Si"],
"referenceSpecies": [],
}
manifest = {
"stage": "combo",
"prefix": "Si.HDZIP",
"scope_id": "HDZIP.target-Si.ref-At.target_plus_reference",
"analysis_route": "subfamily_evidence",
"member_set_id": "HDZIP.target-Si.ref-At.target_plus_reference:subfamily_evidence:domain_refined",
"stage_context": {
"scope_mode": "target_plus_reference",
"family": "HDZIP",
"target_species": ["Si"],
"reference_species": ["At"],
"selected_species": ["Si", "At"],
},
}
merged = merge_manifest_identity_params(stale_params, manifest)
identity = resolve_stage_identity(
stage="combo",
prefix="Si.HDZIP",
params=merged,
job_id="job_manifest",
workspace_root=workspace_root,
)
assert identity.scope_id == "HDZIP.target-Si.ref-At.target_plus_reference"
assert identity.scope_mode == "target_plus_reference"
assert identity.analysis_route == "subfamily_evidence"
assert identity.member_set_id == "HDZIP.target-Si.ref-At.target_plus_reference:subfamily_evidence:domain_refined"
assert identity.reference_species == ["At"]
def test_postflight_manifest_identity_preserves_unscoped_regular_combo():
merged = merge_manifest_identity_params(
{
"prefix": "Ft.SPL",
"scopeId": "SPL.target-Ft.target_only",
"analysisRoute": "single_species",
"memberSetId": "SPL.target-Ft.target_only:single_species:all_members",
},
{"stage": "combo", "prefix": "Ft.SPL", "status": "success"},
)
assert merged["prefix"] == "Ft.SPL"
assert "scopeId" not in merged
assert "scope_id" not in merged
assert "analysisRoute" not in merged
assert "analysis_route" not in merged
assert "memberSetId" not in merged
assert "member_set_id" not in merged
def test_postflight_manifest_identity_merges_wgs_index_identity():
manifest = {
"stage": "wgs_index",
"prefix": "Os",
"status": "success",
"wgs_reference_id": "wgs-reference:" + "b" * 64,
"wgs_analysis_id": "wgs-analysis:" + "c" * 64,
}
merged = merge_manifest_identity_params({"prefix": "Os"}, manifest)
assert merged["wgsReferenceId"] == manifest["wgs_reference_id"]
assert merged["wgsAnalysisId"] == manifest["wgs_analysis_id"]