Files
PlantAI-dev/tests/unit/test_multilingual_ppi_scheduler_parity.py

123 lines
5.0 KiB
Python

from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
def _block(source: str, start: str, end: str) -> str:
begin = source.index(start)
finish = source.index(end, begin)
return source[begin:finish]
def test_multilingual_frontend_keeps_critical_ppi_kaks_state_chain_in_sync() -> None:
canonical = (ROOT / "apps/web/vue3/index.html").read_text(encoding="utf-8")
multilingual = (ROOT / "apps/web/vue3/index_ml.html").read_text(encoding="utf-8")
boundaries = (
(
"const resumePpiKaksPausedStages = async",
"const downloadRecommendedPpiReferenceBundle = async",
),
(
"const monitorPpiReferenceBundleDownload =",
"const ppiHasNearReferenceBeforeArabidopsis =",
),
(
"const ensurePpiKaksDependencyOwner = async",
"const submitExecuteRequestWithAutoAnnotation = async",
),
(
"const kaksReferenceChoiceParams =",
"const confirmedStageParamsForExecution =",
),
)
for start, end in boundaries:
assert _block(multilingual, start, end) == _block(canonical, start, end)
def test_multilingual_frontend_uses_stage_shell_for_ppi_reference_prompts() -> None:
multilingual = (ROOT / "apps/web/vue3/index_ml.html").read_text(encoding="utf-8")
nearest = _block(
multilingual,
"const confirmNearestPpiReferenceCandidate = async",
"const ppiReferenceDecisionMessage =",
)
preflight = _block(
multilingual,
"const runPpiSpeciesResolutionPreflight = async",
"const ppiKaksDependencyStages =",
)
assert "showStageConfirmDialog" in nearest
assert "ElMessageBox.confirm" not in nearest
assert "id: 'ppi_kaks_reference_status'" in preflight
assert "ppiNeedsNearReferenceDecision(resolution, requestedStages)" in preflight
assert "confirmParams.stage === 'ppi_string_reference_confirmation'" in multilingual
assert "confirmParams.stage === 'ppi_kaks_reference_status'" in multilingual
assert "Confirm top candidate" in multilingual
assert "Reference status acknowledged" in multilingual
def test_multilingual_frontend_keeps_ppi_kaks_owner_pauses_isolated() -> None:
canonical = (ROOT / "apps/web/vue3/index.html").read_text(encoding="utf-8")
multilingual = (ROOT / "apps/web/vue3/index_ml.html").read_text(encoding="utf-8")
start = "const ppiKaksOwnedOrthologOwners ="
end = "const mergePpiReferenceSpeciesIntoBatch ="
assert _block(multilingual, start, end) == _block(canonical, start, end)
assert "ppiKaksDependencyPauses" in multilingual
assert "ppiKaksDependencyPause:" not in _block(multilingual, start, end)
def test_multilingual_frontend_uses_hidden_ppi_owned_ortholog_producer() -> None:
canonical = (ROOT / "apps/web/vue3/index.html").read_text(encoding="utf-8")
multilingual = (ROOT / "apps/web/vue3/index_ml.html").read_text(encoding="utf-8")
start = "const ensureOrthologStageForPpiKaks ="
end = "const ensurePpiKaksDependencyOwner ="
producer = _block(multilingual, start, end)
assert producer == _block(canonical, start, end)
assert "rememberPpiKaksInternalOrthologProducer('ppi'" in producer
assert "nextStages.splice" not in producer
assert "attachOrthologDependencyToOwners(requestedStages)" not in producer
def test_multilingual_frontend_does_not_abort_batch_on_ppi_preflight_pause() -> None:
multilingual = (ROOT / "apps/web/vue3/index_ml.html").read_text(encoding="utf-8")
start = multilingual.index("const startBatchExecute = async")
end = multilingual.index("const ppiSettledForKaks =", start)
batch_start = multilingual[start:end]
assert "await ensureOrthologProducerForPpiKaks();" in batch_start
assert "const dependencyPreflightOk = await ensureOrthologProducerForPpiKaks();" not in batch_start
def test_multilingual_background_batch_pauses_ppi_kaks_preflight_blocks() -> None:
multilingual = (ROOT / "apps/web/vue3/index_ml.html").read_text(encoding="utf-8")
helper = _block(
multilingual,
"const isPpiKaksBackgroundPause =",
"const startBackgroundBatchExecution = async",
)
background = _block(
multilingual,
"const startBackgroundBatchExecution = async",
"const extractDataPathsFromText =",
)
assert "stageId === 'ppi' || stageId === 'kaks'" in helper
assert "intentStages.includes('ortholog')" in helper
assert "isPpiKaksBackgroundPause(stageId, stageParams, err, intentStages)" in background
assert "localStatus[stageId] = 'paused'" in background
def test_multilingual_frontend_keeps_transient_fetch_recovery_in_sync() -> None:
canonical = (ROOT / "apps/web/vue3/index.html").read_text(encoding="utf-8")
multilingual = (ROOT / "apps/web/vue3/index_ml.html").read_text(encoding="utf-8")
start = "const fetchWithTransientRetry = async"
end = "const ppiKaksOwnedOrthologOwners ="
assert _block(multilingual, start, end) == _block(canonical, start, end)
assert "fetchWithTransientRetry('/api/ppi/species-resolution'" in multilingual