# -*- coding: utf-8 -*- """HTML 报告页薄写入 helper。""" from __future__ import annotations import os import unittest from _support import IsolatedDataRoot from service.html_page_service import ( HOST_HTML_RENDER_ACTION_ID, load_html_template, render_html_placeholders, write_html_page, ) class TestHtmlPageService(unittest.TestCase): def test_host_action_id_is_stable(self) -> None: self.assertEqual(HOST_HTML_RENDER_ACTION_ID, "render-html") def test_write_html_page_atomic_under_html_dir(self) -> None: with IsolatedDataRoot() as tmp: path = write_html_page( "example-report.html", "示例ok", ) self.assertTrue(os.path.isfile(path)) norm = path.replace("\\", "/") self.assertIn("/html/example-report.html", norm) self.assertTrue(os.path.normcase(os.path.normpath(path)).startswith( os.path.normcase(os.path.normpath(tmp)), )) self.assertFalse(os.path.isfile(path + ".tmp")) with open(path, encoding="utf-8") as f: self.assertIn("示例", f.read()) def test_load_and_fill_example_template(self) -> None: with IsolatedDataRoot(): template = load_html_template("assets/html/example-report.html") page = render_html_placeholders( template, { "TITLE": "示例报告", "GENERATED_AT": "2026-08-14 15:49:00", "BODY": "

hello

", }, ) self.assertIn("示例报告", page) self.assertIn("报告生成于 · 2026-08-14 15:49:00", page) self.assertIn("

hello

", page) self.assertNotIn("{{TITLE}}", page) dest = write_html_page("example-report.html", page) self.assertTrue(os.path.isfile(dest)) def test_rejects_unsafe_filename(self) -> None: with IsolatedDataRoot(): with self.assertRaises(ValueError): write_html_page("../x.html", "") with self.assertRaises(ValueError): write_html_page("note.txt", "") def test_example_report_shell_embedded_preview_layout(self) -> None: """守护 example-report.html:数据管理 iframe 预览布局基线不退化。""" template = load_html_template("assets/html/example-report.html") self.assertIn("overflow-x: hidden", template) self.assertIn("min-width: 0", template) self.assertIn("table-layout: fixed", template) self.assertIn("overflow-wrap: anywhere", template) self.assertNotIn("max-width:", template) if __name__ == "__main__": unittest.main()