47e301a5b8
- scripts/create_biz_brain_courses.sql: идемпотентное создание 5 курсов (biz-brain-base, biz-brain-premium, module-caldav, module-ai-pdf, module-legacy) - scripts/verify_biz_brain_grant.sh: проверка /api/internal/grant (Нужен Дмитрий для запуска на проде) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
109 lines
4.6 KiB
Bash
Executable File
109 lines
4.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ============================================================
|
|
# WS6: Проверка /api/internal/grant для biz-brain-* курсов
|
|
# ============================================================
|
|
# Использование:
|
|
# LMS_URL=https://school.second-brain.ru \
|
|
# LMS_SECRET=<secret_из_env> \
|
|
# TEST_EMAIL=laukhin@dementiy.com \
|
|
# bash verify_biz_brain_grant.sh
|
|
#
|
|
# Проверяет:
|
|
# 1. Grant base-курса (biz-brain-base)
|
|
# 2. Grant premium-бандла (все 5 курсов)
|
|
# 3. Идемпотентность (повтор того же order_id)
|
|
# ============================================================
|
|
|
|
set -euo pipefail
|
|
|
|
LMS_URL="${LMS_URL:-https://school.second-brain.ru}"
|
|
LMS_SECRET="${LMS_SECRET:?Задай переменную LMS_SECRET}"
|
|
TEST_EMAIL="${TEST_EMAIL:-laukhin@dementiy.com}"
|
|
|
|
echo "=== WS6: Проверка grant-эндпоинта LMS ==="
|
|
echo " LMS: $LMS_URL"
|
|
echo " Email: $TEST_EMAIL"
|
|
echo ""
|
|
|
|
# ── Тест 1: Базовый бандл ────────────────────────────────────────────────────
|
|
echo "[1] Grant biz-brain-base..."
|
|
RESPONSE=$(curl -sf -X POST "$LMS_URL/api/internal/grant" \
|
|
-H "Content-Type: application/json" \
|
|
-H "x-internal-secret: $LMS_SECRET" \
|
|
-d '{
|
|
"email": "'"$TEST_EMAIL"'",
|
|
"name": "WS6 Test",
|
|
"course_slugs": ["biz-brain-base"],
|
|
"order_id": "ws6-test-base-001",
|
|
"payment_system": "robokassa"
|
|
}')
|
|
|
|
echo " Ответ: $RESPONSE"
|
|
|
|
GRANTED=$(echo "$RESPONSE" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('granted',''))")
|
|
if [[ "$GRANTED" == *"biz-brain-base"* ]]; then
|
|
echo " ✅ biz-brain-base выдан"
|
|
else
|
|
IDEMPOTENT=$(echo "$RESPONSE" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('idempotent',''))")
|
|
if [[ "$IDEMPOTENT" == "True" ]]; then
|
|
echo " ℹ️ Идемпотентный ответ (уже выдан ранее)"
|
|
else
|
|
echo " ❌ ОШИБКА: biz-brain-base не выдан. Ответ: $RESPONSE"
|
|
echo " Убедись что курс biz-brain-base создан в LMS!"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# ── Тест 2: Премиум-бандл ────────────────────────────────────────────────────
|
|
echo "[2] Grant biz-brain-premium (5 курсов)..."
|
|
RESPONSE=$(curl -sf -X POST "$LMS_URL/api/internal/grant" \
|
|
-H "Content-Type: application/json" \
|
|
-H "x-internal-secret: $LMS_SECRET" \
|
|
-d '{
|
|
"email": "'"$TEST_EMAIL"'",
|
|
"name": "WS6 Test",
|
|
"course_slugs": ["biz-brain-base", "biz-brain-premium", "module-caldav", "module-ai-pdf", "module-legacy"],
|
|
"order_id": "ws6-test-premium-001",
|
|
"payment_system": "robokassa"
|
|
}')
|
|
|
|
echo " Ответ: $RESPONSE"
|
|
|
|
UNRESOLVED=$(echo "$RESPONSE" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('unresolved',[]))")
|
|
if [[ "$UNRESOLVED" == "[]" ]]; then
|
|
echo " ✅ Все 5 курсов разрешены и выданы"
|
|
else
|
|
echo " ⚠️ Не разрешены: $UNRESOLVED"
|
|
echo " Создай недостающие курсы в LMS (slug'и должны точно совпадать)"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# ── Тест 3: Идемпотентность ──────────────────────────────────────────────────
|
|
echo "[3] Повторный grant того же order_id (должен вернуть idempotent=true)..."
|
|
RESPONSE=$(curl -sf -X POST "$LMS_URL/api/internal/grant" \
|
|
-H "Content-Type: application/json" \
|
|
-H "x-internal-secret: $LMS_SECRET" \
|
|
-d '{
|
|
"email": "'"$TEST_EMAIL"'",
|
|
"name": "WS6 Test",
|
|
"course_slugs": ["biz-brain-base"],
|
|
"order_id": "ws6-test-base-001",
|
|
"payment_system": "robokassa"
|
|
}')
|
|
|
|
IDEMPOTENT=$(echo "$RESPONSE" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('idempotent',''))" 2>/dev/null || echo "")
|
|
if [[ "$IDEMPOTENT" == "True" ]]; then
|
|
echo " ✅ Идемпотентность работает (повторный вызов вернул idempotent=true)"
|
|
else
|
|
echo " ⚠️ Ожидался idempotent=true, получено: $RESPONSE"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Проверка завершена ==="
|
|
echo ""
|
|
echo "Следующий шаг: опубликовать курсы в admin (published=true) после наполнения контентом."
|
|
echo " school.second-brain.ru/admin/courses"
|