Drone CD/CD PipeLine added
Some checks failed
continuous-integration/drone Build is failing

This commit is contained in:
2025-11-02 06:23:39 +09:00
parent 2e535513b5
commit d5f1809f5a
13 changed files with 3537 additions and 67 deletions

202
scripts/ci/test.sh Executable file
View File

@@ -0,0 +1,202 @@
#!/bin/bash
# scripts/ci/test.sh - Запуск тестов
set -e
echo "🧪 Running CatLink tests..."
# Проверка наличия контейнеров
if ! docker-compose ps | grep -q "Up"; then
echo "📦 Starting containers for testing..."
docker-compose up -d
sleep 30
fi
# Подготовка базы данных для тестов
echo "🗄️ Preparing test database..."
docker-compose exec -T web python manage.py migrate --noinput
docker-compose exec -T web python manage.py collectstatic --noinput
# Создание тестового пользователя
echo "👤 Creating test user..."
docker-compose exec -T web python manage.py shell << 'EOF'
from django.contrib.auth import get_user_model
User = get_user_model()
if not User.objects.filter(username='testuser').exists():
User.objects.create_user(username='testuser', email='test@example.com', password='testpass123')
print("Test user created")
else:
print("Test user already exists")
EOF
# Backend тесты
echo "🔧 Running backend tests..."
echo " • Django unit tests..."
docker-compose exec -T web python manage.py test --verbosity=2 --keepdb || {
echo "❌ Backend tests failed"
docker-compose logs web | tail -50
exit 1
}
# API тесты
echo "🌐 Running API tests..."
echo " • Testing API endpoints..."
# Проверка основных API эндпоинтов
api_base="http://localhost:8000/api"
# Тест API root
api_root=$(curl -s -o /dev/null -w "%{http_code}" "$api_base/")
echo " - API root: $api_root"
# Тест регистрации
echo " - Testing user registration..."
register_response=$(curl -s -X POST "$api_base/auth/register/" \
-H "Content-Type: application/json" \
-d '{
"username": "testuser2",
"email": "testuser2@example.com",
"password": "testpass123",
"password2": "testpass123"
}' \
-w "%{http_code}")
if echo "$register_response" | grep -q "200\|201"; then
echo " ✅ Registration test passed"
else
echo " ⚠️ Registration test failed: $register_response"
fi
# Тест логина
echo " - Testing user login..."
login_response=$(curl -s -X POST "$api_base/auth/login/" \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "testpass123"
}')
if echo "$login_response" | grep -q "access"; then
echo " ✅ Login test passed"
# Извлечение токена для дальнейших тестов
token=$(echo "$login_response" | grep -o '"access":"[^"]*"' | cut -d'"' -f4)
else
echo " ⚠️ Login test failed: $login_response"
token=""
fi
# Тесты авторизованных эндпоинтов
if [ -n "$token" ]; then
echo " - Testing authorized endpoints..."
# Тест создания группы
group_response=$(curl -s -X POST "$api_base/groups/" \
-H "Authorization: Bearer $token" \
-H "Content-Type: application/json" \
-d '{
"name": "Test Group",
"description": "Test group for CI"
}' \
-w "%{http_code}")
if echo "$group_response" | grep -q "200\|201"; then
echo " ✅ Group creation test passed"
else
echo " ⚠️ Group creation test failed: $group_response"
fi
# Тест получения групп
groups_response=$(curl -s -H "Authorization: Bearer $token" "$api_base/groups/" -w "%{http_code}")
if echo "$groups_response" | grep -q "200"; then
echo " ✅ Groups list test passed"
else
echo " ⚠️ Groups list test failed: $groups_response"
fi
fi
# Frontend тесты
echo "💻 Running frontend tests..."
echo " • NextJS build test..."
docker-compose exec -T frontend npm run build || {
echo "❌ Frontend build test failed"
docker-compose logs frontend | tail -50
exit 1
}
echo " • Frontend unit tests..."
docker-compose exec -T frontend npm test -- --passWithNoTests --watchAll=false || {
echo "⚠️ Frontend unit tests failed or no tests found"
}
# E2E тесты (если доступны)
echo "🌍 Running E2E tests..."
if [ -f "frontend/linktree-frontend/package.json" ] && grep -q "cypress\|playwright" "frontend/linktree-frontend/package.json"; then
echo " • Running end-to-end tests..."
docker-compose exec -T frontend npm run test:e2e || {
echo "⚠️ E2E tests failed"
}
else
echo " • No E2E tests configured, skipping..."
fi
# Интеграционные тесты
echo "🔗 Running integration tests..."
echo " • Testing frontend-backend integration..."
# Проверка что фронтенд может загрузиться
frontend_status=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000)
echo " - Frontend accessibility: $frontend_status"
# Проверка что фронтенд может обращаться к API
api_from_frontend=$(docker-compose exec -T frontend sh -c "
curl -s -o /dev/null -w '%{http_code}' http://web:8000/api/
") || echo "000"
echo " - API accessibility from frontend: $api_from_frontend"
# Производительные тесты (базовые)
echo "⚡ Running basic performance tests..."
echo " • API response time test..."
api_time=$(curl -s -o /dev/null -w "%{time_total}" "$api_base/")
echo " - API response time: ${api_time}s"
if (( $(echo "$api_time < 2.0" | bc -l) )); then
echo " ✅ API response time is acceptable"
else
echo " ⚠️ API response time is slow"
fi
# Проверка использования памяти
echo " • Memory usage check..."
docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}" | grep -E "(web|frontend)"
# Генерация отчета о тестах
echo "📊 Generating test report..."
mkdir -p /tmp/test-reports
cat > /tmp/test-reports/test-summary.txt << EOF
CatLink Test Summary
==================
Date: $(date)
Commit: ${DRONE_COMMIT_SHA:-"local"}
Branch: ${DRONE_BRANCH:-"local"}
API Tests:
- Root endpoint: $api_root
- Registration: $(echo "$register_response" | grep -q "200\|201" && echo "PASS" || echo "FAIL")
- Login: $([ -n "$token" ] && echo "PASS" || echo "FAIL")
- Groups CRUD: $(echo "$group_response" | grep -q "200\|201" && echo "PASS" || echo "FAIL")
Frontend Tests:
- Build: PASS
- Accessibility: $frontend_status
Integration Tests:
- Frontend-Backend: $([ "$api_from_frontend" = "200" ] && echo "PASS" || echo "FAIL")
Performance:
- API Response Time: ${api_time}s
EOF
echo "✅ All tests completed!"
echo "📁 Test reports saved to /tmp/test-reports/"
cat /tmp/test-reports/test-summary.txt