Files
gitlab-instance-0a899031_sh/d2ypp2/tests/test_youtube_pro_runtime.py
eric b617555360 s
2026-05-19 09:19:52 +00:00

109 lines
4.5 KiB
Python

from __future__ import annotations
import tempfile
import unittest
from pathlib import Path
from src.youtube_pro_runtime import (
ensure_youtube_pro_channel_runtime_files,
managed_url_config_relpath_for_pm2,
managed_youtube_ini_relpath_for_pm2,
normalize_youtube_pro_channels,
validate_youtube_runtime_files,
)
class YoutubeProRuntimeTests(unittest.TestCase):
def test_normalize_channels_assigns_default_pm2_and_rejects_duplicate_names(self) -> None:
rows = normalize_youtube_pro_channels([{"id": "lane2", "name": "Lane 2"}])
self.assertEqual(rows[0]["pm2Name"], "youtube2__lane2")
rows = normalize_youtube_pro_channels([{"id": "lane1", "pm2Name": "youtube"}])
self.assertEqual(rows[0]["pm2Name"], "youtube2__lane1")
rows = normalize_youtube_pro_channels([{"id": "lane3", "pm2Name": "custom"}])
self.assertEqual(rows[0]["pm2Name"], "youtube2__custom")
with self.assertRaises(ValueError):
normalize_youtube_pro_channels(
[
{"id": "lane1", "pm2Name": "custom"},
{"id": "lane2", "pm2Name": "custom"},
]
)
def test_materialize_runtime_files_from_saved_channel_payload(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
config_dir = Path(tmp)
handled, errors = ensure_youtube_pro_channel_runtime_files(
config_dir,
"youtube2__lane2",
[
{
"id": "lane2",
"name": "Lane 2",
"pm2Name": "youtube2__lane2",
"streamKey": "abcd-efgh-ijkl-mnop",
"urlLines": "https://live.douyin.com/123456789\n",
}
],
)
self.assertTrue(handled)
self.assertEqual(errors, [])
youtube_ini = (config_dir / managed_youtube_ini_relpath_for_pm2("youtube2__lane2")).read_text(
encoding="utf-8"
)
url_ini = (config_dir / managed_url_config_relpath_for_pm2("youtube2__lane2")).read_text(
encoding="utf-8"
)
self.assertIn("key = abcd-efgh-ijkl-mnop", youtube_ini)
self.assertIn("https://live.douyin.com/123456789", url_ini)
def test_materialize_runtime_files_uses_existing_seed_when_channel_fields_blank(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
config_dir = Path(tmp)
(config_dir / "youtube.ini").write_text("[youtube]\nkey = legacy-key\nrtmps = 是\n", encoding="utf-8")
(config_dir / "URL_config.ini").write_text("https://live.douyin.com/88888888\n", encoding="utf-8")
handled, errors = ensure_youtube_pro_channel_runtime_files(
config_dir,
"youtube2__lane3",
[{"id": "lane3", "pm2Name": "youtube2__lane3"}],
)
self.assertTrue(handled)
self.assertEqual(errors, [])
youtube_ini = (config_dir / managed_youtube_ini_relpath_for_pm2("youtube2__lane3")).read_text(
encoding="utf-8"
)
url_ini = (config_dir / managed_url_config_relpath_for_pm2("youtube2__lane3")).read_text(
encoding="utf-8"
)
self.assertIn("legacy-key", youtube_ini)
self.assertIn("https://live.douyin.com/88888888", url_ini)
def test_validate_runtime_files_reports_missing_single_lane_inputs(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
config_dir = root / "config"
config_dir.mkdir(parents=True, exist_ok=True)
errors = validate_youtube_runtime_files(root, config_dir, "youtube", [])
self.assertEqual(errors, ["youtube: stream key missing", "youtube: source URL missing"])
def test_validate_runtime_files_accepts_legacy_single_lane_pair(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
config_dir = root / "config"
config_dir.mkdir(parents=True, exist_ok=True)
(config_dir / "youtube.ini").write_text("[youtube]\nkey = legacy-key\nrtmps = 是\n", encoding="utf-8")
(config_dir / "URL_config.ini").write_text("https://live.douyin.com/123456\n", encoding="utf-8")
errors = validate_youtube_runtime_files(root, config_dir, "youtube", [])
self.assertEqual(errors, [])
if __name__ == "__main__":
unittest.main()