Files
lms-sb/scripts/verify_biz_brain_grant.sh
T
admins 47e301a5b8 feat(ws6): SQL-скрипт создания курсов-носителей biz-brain + verify-скрипт
- 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>
2026-06-27 19:27:22 +05:00

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"