feat(demo): add story 1 — Sorano: Rock and Time
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"id": "grav-api-test-env",
|
||||
"name": "Grav API - Local Test",
|
||||
"values": [
|
||||
{
|
||||
"key": "base_url",
|
||||
"value": "https://localhost/grav-api",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "api_prefix",
|
||||
"value": "/api/v1",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "grav_environment",
|
||||
"value": "localhost",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "username",
|
||||
"value": "admin",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "password",
|
||||
"value": "Password1",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "access_token",
|
||||
"value": "",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "refresh_token",
|
||||
"value": "",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"key": "api_key",
|
||||
"value": "",
|
||||
"enabled": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Newman API Integration Test Runner
|
||||
#
|
||||
# Usage:
|
||||
# ./tests/newman/run.sh [--base-url URL] [--user USER] [--password PASS] [--env ENV]
|
||||
#
|
||||
# Defaults to localhost with admin/Password1
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
# Defaults (reads from env vars set in ~/.zshrc if available)
|
||||
BASE_URL="${GRAV_BASE_URL:-${BASE_URL:-https://localhost/grav-api}}"
|
||||
API_PREFIX="${GRAV_API_PREFIX:-/api/v1}"
|
||||
GRAV_ENV="${GRAV_ENVIRONMENT:-${GRAV_ENV:-localhost}}"
|
||||
USERNAME="${USERNAME:-admin}"
|
||||
PASSWORD="${PASSWORD:-Password1}"
|
||||
STATIC_API_KEY="${GRAV_API_KEY:-}"
|
||||
CURL_OPTS="-sk"
|
||||
|
||||
# Parse args
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--base-url) BASE_URL="$2"; shift 2;;
|
||||
--user) USERNAME="$2"; shift 2;;
|
||||
--password) PASSWORD="$2"; shift 2;;
|
||||
--env) GRAV_ENV="$2"; shift 2;;
|
||||
*) echo "Unknown option: $1"; exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
API_BASE="${BASE_URL}${API_PREFIX}"
|
||||
|
||||
echo "============================================"
|
||||
echo " Grav API — Newman Integration Tests"
|
||||
echo "============================================"
|
||||
echo " Server: ${BASE_URL}"
|
||||
echo " Environment: ${GRAV_ENV}"
|
||||
echo " User: ${USERNAME}"
|
||||
echo ""
|
||||
|
||||
# Step 1: Authenticate and get JWT token
|
||||
echo "→ Authenticating..."
|
||||
AUTH_RESPONSE=$(curl ${CURL_OPTS} "${API_BASE}/auth/token" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "X-Grav-Environment: ${GRAV_ENV}" \
|
||||
-d "{\"username\":\"${USERNAME}\",\"password\":\"${PASSWORD}\"}")
|
||||
|
||||
ACCESS_TOKEN=$(echo "$AUTH_RESPONSE" | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['access_token'])" 2>/dev/null)
|
||||
|
||||
if [ -z "$ACCESS_TOKEN" ]; then
|
||||
echo " ✗ Authentication failed"
|
||||
echo " Response: $AUTH_RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
echo " ✓ Got JWT token"
|
||||
|
||||
# Step 2: Use static API key from env, or create a temporary one
|
||||
CLEANUP_KEY=false
|
||||
if [ -n "$STATIC_API_KEY" ]; then
|
||||
API_KEY="$STATIC_API_KEY"
|
||||
echo "→ Using API key from environment: ${API_KEY:0:20}..."
|
||||
else
|
||||
echo "→ Creating test API key..."
|
||||
KEY_RESPONSE=$(curl ${CURL_OPTS} "${API_BASE}/users/${USERNAME}/api-keys" \
|
||||
-H "X-API-Token: ${ACCESS_TOKEN}" \
|
||||
-H "X-Grav-Environment: ${GRAV_ENV}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name":"Newman Test Key","expires_in_days":1}')
|
||||
|
||||
API_KEY=$(echo "$KEY_RESPONSE" | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['api_key'])" 2>/dev/null)
|
||||
KEY_ID=$(echo "$KEY_RESPONSE" | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['id'])" 2>/dev/null)
|
||||
|
||||
if [ -z "$API_KEY" ]; then
|
||||
echo " ✗ Failed to create API key"
|
||||
echo " Response: $KEY_RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
echo " ✓ Created API key: ${API_KEY:0:20}..."
|
||||
CLEANUP_KEY=true
|
||||
fi
|
||||
|
||||
# Step 3: Generate temporary environment file with real credentials
|
||||
TEMP_ENV=$(mktemp)
|
||||
cat > "$TEMP_ENV" << EOF
|
||||
{
|
||||
"id": "grav-api-newman-test",
|
||||
"name": "Newman Test (auto-generated)",
|
||||
"values": [
|
||||
{"key": "base_url", "value": "${BASE_URL}", "enabled": true},
|
||||
{"key": "api_prefix", "value": "${API_PREFIX}", "enabled": true},
|
||||
{"key": "grav_environment", "value": "${GRAV_ENV}", "enabled": true},
|
||||
{"key": "username", "value": "${USERNAME}", "enabled": true},
|
||||
{"key": "password", "value": "${PASSWORD}", "enabled": true},
|
||||
{"key": "api_key", "value": "${API_KEY}", "enabled": true},
|
||||
{"key": "access_token", "value": "", "enabled": true},
|
||||
{"key": "refresh_token", "value": "", "enabled": true},
|
||||
{"key": "test_username", "value": "testuser", "enabled": true},
|
||||
{"key": "test_api_key_id", "value": "", "enabled": true},
|
||||
{"key": "page_route", "value": "blog", "enabled": true},
|
||||
{"key": "lang", "value": "en", "enabled": true},
|
||||
{"key": "package_slug", "value": "", "enabled": true},
|
||||
{"key": "webhook_id", "value": "", "enabled": true},
|
||||
{"key": "notification_id", "value": "", "enabled": true}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
# Step 4: Run Newman
|
||||
echo ""
|
||||
echo "→ Running Newman tests..."
|
||||
echo ""
|
||||
|
||||
NEWMAN_BIN="${PROJECT_DIR}/node_modules/.bin/newman"
|
||||
|
||||
${NEWMAN_BIN} run "${PROJECT_DIR}/grav-api.postman_collection.json" \
|
||||
--environment "$TEMP_ENV" \
|
||||
--env-var "api_key=${API_KEY}" \
|
||||
--env-var "base_url=${BASE_URL}" \
|
||||
--env-var "api_prefix=${API_PREFIX}" \
|
||||
--env-var "grav_environment=${GRAV_ENV}" \
|
||||
--env-var "username=${USERNAME}" \
|
||||
--env-var "password=${PASSWORD}" \
|
||||
--env-var "test_username=${GRAV_TEST_USERNAME:-test_username}" \
|
||||
--env-var "page_route=${GRAV_PAGE_ROUTE:-typography}" \
|
||||
--env-var "lang=${GRAV_LANG:-en}" \
|
||||
--env-var "package_slug=${GRAV_PACKAGE_SLUG:-form}" \
|
||||
--insecure \
|
||||
--reporters cli \
|
||||
--color on \
|
||||
--timeout-request 10000 \
|
||||
"$@"
|
||||
|
||||
NEWMAN_EXIT=$?
|
||||
|
||||
# Step 5: Cleanup — revoke the test API key (only if we created one)
|
||||
if [ "$CLEANUP_KEY" = true ] && [ -n "$KEY_ID" ]; then
|
||||
echo ""
|
||||
echo "→ Cleaning up test API key..."
|
||||
curl ${CURL_OPTS} -X DELETE "${API_BASE}/users/${USERNAME}/api-keys/${KEY_ID}" \
|
||||
-H "X-API-Token: ${ACCESS_TOKEN}" \
|
||||
-H "X-Grav-Environment: ${GRAV_ENV}" \
|
||||
-o /dev/null -w " ✓ Revoked test key (HTTP %{http_code})\n"
|
||||
fi
|
||||
|
||||
rm -f "$TEMP_ENV"
|
||||
|
||||
echo ""
|
||||
if [ $NEWMAN_EXIT -eq 0 ]; then
|
||||
echo "============================================"
|
||||
echo " ✓ All tests passed!"
|
||||
echo "============================================"
|
||||
else
|
||||
echo "============================================"
|
||||
echo " ✗ Some tests failed (exit code: $NEWMAN_EXIT)"
|
||||
echo "============================================"
|
||||
fi
|
||||
|
||||
exit $NEWMAN_EXIT
|
||||
Reference in New Issue
Block a user