File size: 3,048 Bytes
6aecb2e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | import importlib.util
import logging
import sys
import types
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
EXPORT_SUPPORT_PATH = ROOT / "src" / "landppt" / "web" / "route_modules" / "export_support.py"
WEB_DIR = ROOT / "src" / "landppt" / "web"
ROUTE_MODULES_DIR = WEB_DIR / "route_modules"
def _load_export_support_module():
import landppt
web_pkg = types.ModuleType("landppt.web")
web_pkg.__path__ = [str(WEB_DIR)]
route_modules_pkg = types.ModuleType("landppt.web.route_modules")
route_modules_pkg.__path__ = [str(ROUTE_MODULES_DIR)]
support_module = types.ModuleType("landppt.web.route_modules.support")
support_module.logger = logging.getLogger("test.export_support")
original_web = sys.modules.get("landppt.web")
original_route_modules = sys.modules.get("landppt.web.route_modules")
original_support = sys.modules.get("landppt.web.route_modules.support")
sys.modules["landppt.web"] = web_pkg
sys.modules["landppt.web.route_modules"] = route_modules_pkg
sys.modules["landppt.web.route_modules.support"] = support_module
setattr(landppt, "web", web_pkg)
module_name = "landppt.web.route_modules._export_support_test"
spec = importlib.util.spec_from_file_location(module_name, EXPORT_SUPPORT_PATH)
assert spec is not None and spec.loader is not None
module = importlib.util.module_from_spec(spec)
sys.modules[module_name] = module
try:
spec.loader.exec_module(module)
return module
finally:
sys.modules.pop(module_name, None)
if original_web is not None:
sys.modules["landppt.web"] = original_web
setattr(landppt, "web", original_web)
else:
sys.modules.pop("landppt.web", None)
if hasattr(landppt, "web"):
delattr(landppt, "web")
if original_route_modules is not None:
sys.modules["landppt.web.route_modules"] = original_route_modules
else:
sys.modules.pop("landppt.web.route_modules", None)
if original_support is not None:
sys.modules["landppt.web.route_modules.support"] = original_support
else:
sys.modules.pop("landppt.web.route_modules.support", None)
def test_image_pptx_export_request_validates_after_model_rebuild():
module = _load_export_support_module()
payload = module.ImagePPTXExportRequest.model_validate(
{
"slides": [
{
"index": 1,
"html_content": "<div>slide</div>",
"title": "封面",
}
],
"images": [
{
"index": 1,
"data": "base64-data",
"width": 1280,
"height": 720,
}
],
}
)
assert payload.slides is not None
assert payload.slides[0]["index"] == 1
assert payload.images is not None
assert payload.images[0]["width"] == 1280
|