Files
ipwhitelist-app/docs/test-api.sh
T

62 lines
2.5 KiB
Bash

#!/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 "========================================="