75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
# -*- 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({"/Site/GetAllOrderSettleList": 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"] == "/Site/GetAllOrderSettleList"
|
|
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({"/PayLog/GetPayLogListPage": 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"]
|