test_im_approval_creation.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import importlib
  2. import os
  3. import sys
  4. import unittest
  5. from pathlib import Path
  6. from tempfile import TemporaryDirectory
  7. from unittest.mock import patch
  8. from openpyxl import load_workbook
  9. ROOT = Path(__file__).resolve().parent
  10. sys.path.insert(0, str(ROOT))
  11. from tools.im_approval_creation import ( # noqa: E402
  12. DECISION_COL_LETTER,
  13. generate_approval_xlsx,
  14. )
  15. import tools.im_approval_creation as approval_module # noqa: E402
  16. def _sample_record() -> dict:
  17. return {
  18. "approval_date": "2026-07-08",
  19. "account_id": 86197363,
  20. "audience_tier": "回流330以上人群",
  21. "adgroup_id": 115273005955,
  22. "adgroup_name": "回流330以上人群-20260708-关键页面-targeted",
  23. "bid_amount_yuan": "0.40",
  24. "site_set": "微信公众号,朋友圈",
  25. "age_range": "45-66",
  26. "landing_video_id": 63747053,
  27. "landing_video_url": "https://example.com/video.mp4",
  28. "landing_title": "测试落地视频",
  29. "landing_risk_level": 1,
  30. "landing_risk_tag_ids": "85856",
  31. "landing_risk_reason": "risk level 1 <= allowed 5",
  32. "material_source": "ai_generated",
  33. "material_cover_url": "https://rescdn.yishihui.com/auto_put_tencent/image/test.jpg",
  34. "creative_name": "touliu_tencent_20260708_63747053_test",
  35. "_description_contents": ["打开看看"],
  36. }
  37. class CreativeApprovalSheetTest(unittest.TestCase):
  38. def test_embeds_material_preview_images_by_default(self):
  39. with patch.dict(os.environ, {}, clear=False):
  40. os.environ.pop("CREATION_APPROVAL_EMBED_IMAGES", None)
  41. reloaded = importlib.reload(approval_module)
  42. self.assertTrue(reloaded.EMBED_MATERIAL_PREVIEW_IMAGES)
  43. def test_keeps_dedicated_material_link_column(self):
  44. with TemporaryDirectory() as tmp:
  45. output = Path(tmp) / "approval.xlsx"
  46. generate_approval_xlsx([_sample_record()], output)
  47. wb = load_workbook(output, data_only=False)
  48. ws = wb.active
  49. headers = [ws.cell(1, col).value for col in range(1, ws.max_column + 1)]
  50. self.assertIn("素材预览", headers)
  51. self.assertIn("素材链接", headers)
  52. self.assertEqual("决策", headers[-1])
  53. self.assertEqual("AB", DECISION_COL_LETTER)
  54. material_link_col = headers.index("素材链接") + 1
  55. self.assertEqual(
  56. '=HYPERLINK("https://rescdn.yishihui.com/auto_put_tencent/image/test.jpg","打开素材")',
  57. ws.cell(2, material_link_col).value,
  58. )
  59. if __name__ == "__main__":
  60. unittest.main()