123 lines
5.0 KiB
Python
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
|