Files
ai-exchange/tests/unit/test_run_shadow_paper_observation_backfill.py
T
2026-05-18 14:11:06 +08:00

76 lines
2.8 KiB
Python

import contextlib
import io
import json
import unittest
from unittest.mock import Mock, patch
from scripts import run_shadow_paper_observation_backfill
class RunShadowPaperObservationBackfillTests(unittest.TestCase):
def test_main_outputs_json_and_defaults_to_dry_run(self) -> None:
service = Mock()
service.build_backfill_audit.return_value = {
"status": "dry_run",
"eligible_backfill_dates": ["2026-05-15"],
"created_observation_count": 0,
"projected_observed_shadow_day_count": 4,
"blocked_backfill_items": ["paper_ticket_backfill_not_allowed_without_executable_candidate"],
}
output = io.StringIO()
with patch("scripts.run_shadow_paper_observation_backfill.ShadowPaperObservationBackfillService", return_value=service):
with contextlib.redirect_stdout(output):
exit_code = run_shadow_paper_observation_backfill.main(
env={
"SHADOW_PAPER_BACKFILL_OUTPUT_JSON": "1",
"SHADOW_PAPER_BACKFILL_INSTRUMENT_ID": "2",
"SHADOW_PAPER_BACKFILL_TIMEFRAME": "5m",
"SHADOW_PAPER_BACKFILL_WINDOW_DAYS": "7",
}
)
self.assertEqual(exit_code, 0)
self.assertEqual(json.loads(output.getvalue())["status"], "dry_run")
service.build_backfill_audit.assert_called_once_with(
instrument_id=2,
timeframe="5m",
window_days=7,
apply=False,
created_by="shadow_paper_backfill_audit",
)
def test_main_honors_apply_flag(self) -> None:
service = Mock()
service.build_backfill_audit.return_value = {
"status": "applied",
"eligible_backfill_dates": ["2026-05-15"],
"created_observation_count": 1,
"projected_observed_shadow_day_count": 5,
"blocked_backfill_items": [],
}
output = io.StringIO()
with patch("scripts.run_shadow_paper_observation_backfill.ShadowPaperObservationBackfillService", return_value=service):
with contextlib.redirect_stdout(output):
exit_code = run_shadow_paper_observation_backfill.main(
env={
"SHADOW_PAPER_BACKFILL_APPLY": "1",
"SHADOW_PAPER_BACKFILL_CREATED_BY": "operator",
}
)
self.assertEqual(exit_code, 0)
self.assertIn("applied", output.getvalue())
service.build_backfill_audit.assert_called_once_with(
instrument_id=1,
timeframe="1m",
window_days=14,
apply=True,
created_by="operator",
)
if __name__ == "__main__":
unittest.main()