2026-05-08 13:49:12 +08:00
|
|
|
|
#!/bin/bash
|
2026-05-13 15:08:37 +08:00
|
|
|
|
# verify_t34.sh — 验收 T-3.4:前端 fixture JSON 接入与回退层
|
2026-05-08 13:49:12 +08:00
|
|
|
|
set -e
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
|
|
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
2026-05-13 15:08:37 +08:00
|
|
|
|
FILE="$PROJECT_ROOT/frontend/src/lib/models.ts"
|
2026-05-08 13:49:12 +08:00
|
|
|
|
JSON="$PROJECT_ROOT/frontend/src/data/models.json"
|
|
|
|
|
|
|
|
|
|
|
|
echo "=== T-3.4 验收检查 ==="
|
|
|
|
|
|
|
|
|
|
|
|
# T-3.4.1: JSON schema 验证
|
|
|
|
|
|
python3 -c "
|
|
|
|
|
|
import json
|
|
|
|
|
|
d=json.load(open('$JSON'))
|
|
|
|
|
|
assert all(k in d for k in ['generated_at','total','free','paid','models']), 'missing top keys'
|
|
|
|
|
|
assert all('pricing' in m and 'input' in m['pricing'] and 'output' in m['pricing'] for m in d['models']), 'missing pricing fields'
|
|
|
|
|
|
print('json-schema OK')
|
|
|
|
|
|
" && echo "json-schema PASS — JSON 含 generated_at/total/free/paid/models,且 models 含 pricing.input/output" \
|
|
|
|
|
|
|| { echo "json-schema FAIL"; exit 1; }
|
|
|
|
|
|
|
2026-05-13 15:08:37 +08:00
|
|
|
|
# T-3.4.2: 前端具备 normalizeModel 映射函数
|
|
|
|
|
|
if grep -q 'normalizeModel' "$FILE"; then
|
|
|
|
|
|
echo "mapping PASS — normalizeModel 映射函数存在"
|
2026-05-08 13:49:12 +08:00
|
|
|
|
else
|
|
|
|
|
|
echo "mapping FAIL"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
2026-05-13 15:08:37 +08:00
|
|
|
|
# T-3.4.3: fixture fallback 从 models.json 加载,而不是页面内硬编码 mock 数据
|
2026-05-08 13:49:12 +08:00
|
|
|
|
if grep -q "models.json" "$FILE" && \
|
|
|
|
|
|
! grep -q "provider.*OpenAI\|provider.*Anthropic\|provider.*DeepSeek" "$FILE"; then
|
2026-05-13 15:08:37 +08:00
|
|
|
|
echo "import PASS — 回退层引用 models.json,无页面内硬编码 mock 数据"
|
2026-05-08 13:49:12 +08:00
|
|
|
|
else
|
|
|
|
|
|
echo "import FAIL — 仍有硬编码 mock 数据"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
|
echo "all PASS"
|
|
|
|
|
|
exit 0
|