Files
LandPPT/tests/test_export_support_models.py
T
sligter 6153e56441 feat: modularize services and expand platform workflows
Add OAuth, community, credits, startup, export, and narration workflows while splitting oversized route and PPT service modules into dedicated components with broader regression coverage.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 21:04:37 +08:00

88 lines
3.0 KiB
Python

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