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