from __future__ import annotations from pathlib import Path import sys REPO_ROOT = Path(__file__).resolve().parents[1] sys.path.insert(0, str(REPO_ROOT)) def test_tidbcloud_trigger_serializes_command_payload() -> None: import pytest pytest.importorskip("airflow.sdk") from orchestration.airflow.engine.extract_assets import ExtractAssetCommand from orchestration.airflow.engine.tidb_extract_operator import TiDBCloudExportTrigger command = ExtractAssetCommand( executable_path=Path("/opt/datalake/orchestration/airflow/bin/extract-runner"), extractor_module="ingestion.extract.tidbcloud.engine.cli", source_path=Path("ingestion/extract/tidbcloud/sources/data_foundation_finance/source.yaml"), mode="tidbcloud_deferrable", tables=(), env={"DATALAKE_AIRFLOW_REPO_ROOT": "/opt/datalake"}, cwd=Path("/opt/datalake"), ) trigger = TiDBCloudExportTrigger( command=command.to_trigger_kwargs(), export_id="exp-1", poll_interval_seconds=300, timeout_seconds=14400, ) classpath, payload = trigger.serialize() assert classpath == "orchestration.airflow.engine.tidb_extract_operator.TiDBCloudExportTrigger" assert payload["export_id"] == "exp-1" assert payload["command"]["source_path"] == ( "ingestion/extract/tidbcloud/sources/data_foundation_finance/source.yaml" )