test_video_risk.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. """Unit tests for module B landing-video risk evaluation.
  2. The production module imports `config` from auto_put_ad_mini, which pulls the
  3. full agent runtime. These tests inject a minimal config module so the pure risk
  4. mapping logic can be tested without external services or optional dependencies.
  5. """
  6. import importlib
  7. import sys
  8. import types
  9. import unittest
  10. def _load_video_risk_with_fake_config(max_allowed_level: int = 1):
  11. fake_config = types.ModuleType("config")
  12. fake_config.VIDEO_RISK_API_TIMEOUT_SECONDS = 10
  13. fake_config.VIDEO_RISK_API_URL = "https://example.invalid/video-risk"
  14. fake_config.VIDEO_RISK_CHECK_ENABLED = True
  15. fake_config.VIDEO_RISK_MAX_ALLOWED_LEVEL = max_allowed_level
  16. fake_config.VIDEO_RISK_TAG_LEVELS = {
  17. "85856": 1,
  18. "85862": 2,
  19. "85863": 3,
  20. "85864": 4,
  21. "85865": 5,
  22. "85866": 6,
  23. "85867": 7,
  24. "85868": 8,
  25. "85869": 9,
  26. "85870": 10,
  27. }
  28. old_config = sys.modules.get("config")
  29. sys.modules["config"] = fake_config
  30. sys.modules.pop("examples.auto_put_ad_mini.tools.video_risk", None)
  31. try:
  32. return importlib.import_module("examples.auto_put_ad_mini.tools.video_risk")
  33. finally:
  34. if old_config is None:
  35. sys.modules.pop("config", None)
  36. else:
  37. sys.modules["config"] = old_config
  38. class VideoRiskEvaluationTest(unittest.TestCase):
  39. def test_level_one_passes_when_threshold_is_one(self):
  40. video_risk = _load_video_risk_with_fake_config(max_allowed_level=1)
  41. result = video_risk.evaluate_video_risk(123, ["85856"])
  42. self.assertTrue(result.passed)
  43. self.assertEqual(result.max_level, 1)
  44. def test_level_two_is_blocked_when_threshold_is_one(self):
  45. video_risk = _load_video_risk_with_fake_config(max_allowed_level=1)
  46. result = video_risk.evaluate_video_risk(123, ["85862"])
  47. self.assertFalse(result.passed)
  48. self.assertEqual(result.max_level, 2)
  49. def test_sample_level_seven_is_blocked(self):
  50. video_risk = _load_video_risk_with_fake_config(max_allowed_level=1)
  51. result = video_risk.evaluate_video_risk(71187017, ["85867", "85967", "88404"])
  52. self.assertFalse(result.passed)
  53. self.assertEqual(result.max_level, 7)
  54. self.assertEqual(result.risk_tag_ids, ["85867"])
  55. self.assertEqual(result.unknown_tag_ids, ["85967", "88404"])
  56. def test_unknown_tags_do_not_block_by_default(self):
  57. video_risk = _load_video_risk_with_fake_config(max_allowed_level=1)
  58. result = video_risk.evaluate_video_risk(123, ["99999"])
  59. self.assertTrue(result.passed)
  60. self.assertEqual(result.max_level, 0)
  61. self.assertEqual(result.unknown_tag_ids, ["99999"])
  62. if __name__ == "__main__":
  63. unittest.main()