skills/ppt-station-skill/tests/test_run_job.sh

69 lines
1.6 KiB
Bash
Raw Normal View History

#!/bin/bash
# 测试 run_job.py - PptEngine CLI
set -e
PYTHON=$(which python3 || which python)
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJ_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
SCRIPT="$SCRIPT_DIR/../scripts/run_job.py"
TMPDIR=$(mktemp -d)
trap "rm -rf $TMPDIR" EXIT
echo "=== 测试 run_job.py ==="
# Step 1: 创建最小 job.json
echo "Step 1: 创建最小 job.json"
cat > "$TMPDIR/job.json" << HEREDOC
{
"template": {"path": "$PROJ_DIR/aim/aim03.pptx"},
"datasources": {},
"slides": [
{
"id": "cover",
"texts": [
{"target": "标题", "value": "测试报告"}
]
}
],
"output": {"path": "$TMPDIR/output.pptx", "overwrite": true}
}
HEREDOC
# Step 2: dry-run 验证
echo "Step 2: dry-run 验证 schema"
DRY_OUTPUT=$($PYTHON "$SCRIPT" "$TMPDIR/job.json" --dry-run 2>/dev/null)
echo "$DRY_OUTPUT" | $PYTHON -c "
import sys, json
d = json.load(sys.stdin)
assert d['status'] == 'ok', f'dry-run failed: {d}'
print(f' dry-run: {d[\"message\"]}')
print(f' slides: {d[\"slides\"]}')
" 2>/dev/null
# Step 3: 实际渲染
echo "Step 3: 渲染 PPT"
RENDER_OUTPUT=$($PYTHON "$SCRIPT" "$TMPDIR/job.json" 2>/dev/null)
echo "$RENDER_OUTPUT" | $PYTHON -c "
import sys, json
d = json.load(sys.stdin)
assert d['status'] == 'ok', f'render failed: {d}'
print(f' output: {d[\"output\"]}')
" 2>/dev/null
# Step 4: 验证输出
if [ ! -f "$TMPDIR/output.pptx" ]; then
echo "FAIL: output.pptx 未生成"
exit 1
fi
SIZE=$(wc -c < "$TMPDIR/output.pptx")
echo " output.pptx 大小: ${SIZE} bytes"
if [ "$SIZE" -lt 1000 ]; then
echo "FAIL: output.pptx 太小"
exit 1
fi
echo "PASS: run_job.py 流程正常"