veza/apps/web/e2e/setup-test-user-role.sh

120 lines
3.9 KiB
Bash
Raw Normal View History

2025-12-22 21:00:50 +00:00
#!/bin/bash
# Script pour promouvoir l'utilisateur de test en "artist"
# Usage: ./setup-test-user-role.sh
set -e
# Configuration par défaut (peut être surchargée par variables d'environnement)
# Valeurs par défaut basées sur docker-compose.yml du projet
DB_HOST="${DB_HOST:-localhost}"
DB_PORT="${DB_PORT:-5432}"
DB_NAME="${DB_NAME:-veza}"
DB_USER="${DB_USER:-veza}"
DB_PASSWORD="${DB_PASSWORD:-password}"
TEST_USER_EMAIL="${TEST_USER_EMAIL:-user@example.com}"
POSTGRES_CONTAINER="${POSTGRES_CONTAINER:-veza_postgres}"
echo "🔧 [SETUP] Promoting test user to 'artist' role..."
echo " User: $TEST_USER_EMAIL"
echo " Database: $DB_NAME@$DB_HOST:$DB_PORT"
# Option 1: Utiliser psql directement
if command -v psql &> /dev/null; then
echo "📝 [SETUP] Using psql..."
PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" <<EOF
-- Ajouter le rôle artist s'il n'existe pas
-- NOTE: display_name est NOT NULL, il faut le fournir
INSERT INTO roles (name, display_name, description)
VALUES ('artist', 'Artist', 'Artist role for content creation')
ON CONFLICT (name) DO NOTHING;
-- Ajouter le rôle à l'utilisateur
-- Ajouter le rôle à l'utilisateur
-- NOTE: La colonne 'role' est aussi requise dans user_roles (pour compatibilité)
INSERT INTO user_roles (user_id, role_id, role)
SELECT
u.id,
r.id,
'artist'
FROM users u
CROSS JOIN roles r
WHERE u.email = '$TEST_USER_EMAIL'
AND r.name = 'artist'
ON CONFLICT (user_id, role) DO NOTHING;
-- Vérifier l'email de l'utilisateur (nécessaire pour certains endpoints)
UPDATE users
SET is_verified = true
WHERE email = '$TEST_USER_EMAIL';
-- Vérification
SELECT
u.email,
r.name as role_name,
u.is_verified
FROM users u
LEFT JOIN user_roles ur ON u.id = ur.user_id
LEFT JOIN roles r ON ur.role_id = r.id
WHERE u.email = '$TEST_USER_EMAIL';
EOF
echo "✅ [SETUP] Test user role updated successfully!"
# Option 2: Utiliser Docker exec si la DB est dans Docker
elif command -v docker &> /dev/null; then
echo "🐳 [SETUP] Using Docker exec..."
# Chercher le conteneur PostgreSQL
if docker ps --format "{{.Names}}" | grep -q "^${POSTGRES_CONTAINER}$"; then
CONTAINER_NAME="$POSTGRES_CONTAINER"
elif docker ps --format "{{.Names}}" | grep -qi postgres; then
CONTAINER_NAME=$(docker ps --format "{{.Names}}" | grep -i postgres | head -n 1)
else
echo "❌ [SETUP] No PostgreSQL container found"
echo " Tried: $POSTGRES_CONTAINER"
echo " Available containers:"
docker ps --format "{{.Names}}" || echo " (none running)"
exit 1
fi
echo " Using container: $CONTAINER_NAME"
docker exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" <<EOF
-- Ajouter le rôle artist s'il n'existe pas
-- NOTE: display_name est NOT NULL, il faut le fournir
INSERT INTO roles (name, display_name, description)
VALUES ('artist', 'Artist', 'Artist role for content creation')
ON CONFLICT (name) DO NOTHING;
-- Ajouter le rôle à l'utilisateur
-- NOTE: La colonne 'role' est aussi requise dans user_roles (pour compatibilité)
INSERT INTO user_roles (user_id, role_id, role)
SELECT
u.id,
r.id,
'artist'
FROM users u
CROSS JOIN roles r
WHERE u.email = '$TEST_USER_EMAIL'
AND r.name = 'artist'
ON CONFLICT (user_id, role) DO NOTHING;
-- Vérifier l'email de l'utilisateur (nécessaire pour certains endpoints)
UPDATE users
SET is_verified = true
WHERE email = '$TEST_USER_EMAIL';
-- Vérification
SELECT u.email, r.name as role_name, u.is_verified
FROM users u
LEFT JOIN user_roles ur ON u.id = ur.user_id
LEFT JOIN roles r ON ur.role_id = r.id
WHERE u.email = '$TEST_USER_EMAIL';
EOF
echo "✅ [SETUP] Test user role updated successfully!"
else
echo "❌ [SETUP] Neither psql nor Docker found. Please run the SQL manually:"
echo ""
cat "$(dirname "$0")/setup-test-user-role.sql"
exit 1
fi