# -*- coding: utf-8 -*- """Unit tests for the new ODS ingestion tasks.""" import logging import sys from pathlib import Path # Ensure project root is resolvable when running tests in isolation PROJECT_ROOT = Path(__file__).resolve().parents[2] if str(PROJECT_ROOT) not in sys.path: sys.path.insert(0, str(PROJECT_ROOT)) from tasks.ods_tasks import ODS_TASK_CLASSES from .task_test_utils import create_test_config, get_db_operations, FakeAPIClient def _build_config(tmp_path): archive_dir = tmp_path / "archive" temp_dir = tmp_path / "temp" return create_test_config("ONLINE", archive_dir, temp_dir) def test_ods_order_settle_ingest(tmp_path): """Ensure ODS_ORDER_SETTLE task writes raw payload + metadata.""" config = _build_config(tmp_path) sample = [ { "orderSettleId": 701, "orderTradeNo": 8001, "anyField": "value", } ] api = FakeAPIClient({"/order/list": sample}) task_cls = ODS_TASK_CLASSES["ODS_ORDER_SETTLE"] with get_db_operations() as db_ops: task = task_cls(config, db_ops, api, logging.getLogger("test_ods_order")) result = task.execute() assert result["status"] == "SUCCESS" assert result["counts"]["fetched"] == 1 assert db_ops.commits == 1 row = db_ops.upserts[0]["rows"][0] assert row["order_settle_id"] == 701 assert row["order_trade_no"] == 8001 assert row["source_endpoint"] == "/order/list" assert '"orderSettleId": 701' in row["payload"] def test_ods_payment_ingest(tmp_path): """Ensure ODS_PAYMENT task stores relate fields and payload.""" config = _build_config(tmp_path) sample = [ { "payId": 901, "relateType": "ORDER", "relateId": 123, "payAmount": "100.00", } ] api = FakeAPIClient({"/pay/records": sample}) task_cls = ODS_TASK_CLASSES["ODS_PAYMENT"] with get_db_operations() as db_ops: task = task_cls(config, db_ops, api, logging.getLogger("test_ods_payment")) result = task.execute() assert result["status"] == "SUCCESS" assert result["counts"]["fetched"] == 1 assert db_ops.commits == 1 row = db_ops.upserts[0]["rows"][0] assert row["pay_id"] == 901 assert row["relate_type"] == "ORDER" assert row["relate_id"] == 123 assert '"payId": 901' in row["payload"]