#!/usr/bin/env bash # ============================================================ # WS6: Проверка /api/internal/grant для biz-brain-* курсов # ============================================================ # Использование: # LMS_URL=https://school.second-brain.ru \ # LMS_SECRET= \ # 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"