#!/bin/bash # API-тесты: все комбинации (без UI) # Запуск: bash docs/test-api.sh BASE="https://white.nodejsk8s.dev.nubes.ru" PASS=0 FAIL=0 green() { echo -e "\033[32m$1\033[0m"; } red() { echo -e "\033[31m$1\033[0m"; } check() { # check "описание" expected actual if [ "$2" = "$3" ]; then green " ✓ $1" PASS=$((PASS+1)) else red " ✗ $1 (ожидалось: $2, получено: $3)" FAIL=$((FAIL+1)) fi } # ── Получить mock JWT для заданного clientId ─────────────────── get_token() { local CLIENT_ID="$1" # POST /dev-login для получения токена через API # Возвращает access_token из ответа local RESP=$(curl -s -c /tmp/jar-test.txt "$BASE/login" > /dev/null && \ curl -s -b /tmp/jar-test.txt -c /tmp/jar-test.txt \ -X POST "$BASE/login" \ -d "clientId=$CLIENT_ID" \ -D - 2>&1) # Извлечь токен из редиректа (он в сессии, получаем через API) # Используем /dev-login для прямого получения токена local CSRF=$(curl -s -b /tmp/jar-test.txt "$BASE/dev-login" | grep -oP 'name="_csrf" value="\K[^"]+') curl -s -b /tmp/jar-test.txt -c /tmp/jar-test.txt \ -X POST "$BASE/dev-login" \ -d "clientId=$CLIENT_ID&_csrf=$CSRF&email=test@test.local&companyName=TestCo" \ > /dev/null # Получить api-токен через сессию # Пробуем получить через /login page (там токен генерится в сессию) # Возвращаем токен из cookie echo "TODO" } echo "=========================================" echo " API Tests v0.5.4" echo "=========================================" echo "" # ── 1. Без токена → 401 ──────────────────────────────────────── echo "--- 1. No token → 401 ---" CODE=$(curl -s -o /dev/null -w '%{http_code}' "$BASE/api/v1/entries") check "GET /entries без токена" "401" "$CODE" CODE=$(curl -s -o /dev/null -w '%{http_code}' -X POST "$BASE/api/v1/entries" -H 'Content-Type: application/json' -d '{"value":"1.1.1.1/32"}') check "POST /entries без токена" "401" "$CODE" echo "" echo "=========================================" echo " Результат: $PASS/$((PASS+FAIL))" echo "========================================="