# -*- coding: utf-8 -*- """RpaVideoSession 路径与 no-op 行为。""" from __future__ import annotations import os import tempfile import unittest from jiangchang_skill_core import config from jiangchang_skill_core.rpa.video_session import RpaVideoSession class TestRpaVideoSession(unittest.TestCase): def setUp(self) -> None: config.reset_cache() def test_disabled_is_noop(self) -> None: old = os.environ.pop("OPENCLAW_RECORD_VIDEO", None) try: with tempfile.TemporaryDirectory() as tmp: config.reset_cache() session = RpaVideoSession( skill_slug="receive-order", skill_data_dir=tmp, batch_id="batch_test", ) self.assertFalse(session.enabled) self.assertIsNone(session.record_video_dir) self.assertIsNone(session.output_video_path) finally: if old is not None: os.environ["OPENCLAW_RECORD_VIDEO"] = old config.reset_cache() def test_enabled_paths(self) -> None: os.environ["OPENCLAW_RECORD_VIDEO"] = "1" try: with tempfile.TemporaryDirectory() as tmp: config.reset_cache() session = RpaVideoSession( skill_slug="receive-order", skill_data_dir=tmp, batch_id="exmail_20260602_120000", title="接收订单", ) self.assertTrue(session.enabled) self.assertTrue( session.record_video_dir.replace("\\", "/").endswith( "/rpa-artifacts/exmail_20260602_120000/raw-video" ) ) self.assertTrue( session._planned_output.replace("\\", "/").startswith( tmp.replace("\\", "/") + "/videos/" ) ) self.assertNotIn( "rpa-artifacts", session._planned_output.replace("\\", "/").split("/videos/")[-1], ) finally: os.environ.pop("OPENCLAW_RECORD_VIDEO", None) config.reset_cache() def test_finalize_missing_webm_only_warning(self) -> None: os.environ["OPENCLAW_RECORD_VIDEO"] = "1" try: with tempfile.TemporaryDirectory() as tmp: config.reset_cache() session = RpaVideoSession( skill_slug="receive-order", skill_data_dir=tmp, batch_id="batch_warn", ) import asyncio asyncio.run(session.finalize()) self.assertIn("no_playwright_raw_video", session.warnings) self.assertIsNone(session.output_video_path) finally: os.environ.pop("OPENCLAW_RECORD_VIDEO", None) config.reset_cache() if __name__ == "__main__": unittest.main()