#!/bin/bash # Integration Tests - Verifica integración entre componentes set -e ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" cd "$ROOT_DIR" GREEN='\033[0;32m' RED='\033[0;31m' NC='\033[0m' echo "==========================================" echo "🔗 Integration Tests" echo "==========================================" echo "" TEST_DIR="./test-integration" mkdir -p "$TEST_DIR" PASSED=0 FAILED=0 test_result() { if [ $? -eq 0 ]; then echo -e "${GREEN}✓${NC} $1" ((PASSED++)) else echo -e "${RED}✗${NC} $1" ((FAILED++)) fi } # Test 1: Compartir perfil entre binarios echo "Test: Compartir perfil entre screenshot y navegar" SHARED_PROFILE="shared-test-$$" # Crear sesión con navegar timeout 30 ./navegar -url https://example.com \ -profile "$SHARED_PROFILE" \ -duration 2 \ -headless=true &>/dev/null # Usar mismo perfil con screenshot timeout 30 ./screenshot -url https://example.com \ -profile "$SHARED_PROFILE" \ -o "$TEST_DIR/shared.png" \ -headless=true &>/dev/null # Verificar que ambos usaron mismo perfil PROFILE_PATH="$HOME/.navegator/profiles/$SHARED_PROFILE" [ -d "$PROFILE_PATH" ] test_result "Perfil compartido entre binarios" # Test 2: Recording captura múltiples acciones echo "Test: Recording de múltiples acciones" RECORD_PROFILE="record-test-$$" timeout 30 ./navegar -url https://example.com \ -profile "$RECORD_PROFILE" \ -duration 3 \ -headless=true &>/dev/null RECORD_FILE="recording_$RECORD_PROFILE.log" if [ -f "$RECORD_FILE" ]; then # Verificar que tiene contenido JSON grep -q "Navigate" "$RECORD_FILE" && \ grep -q "timestamp" "$RECORD_FILE" test_result "Recording JSON válido" rm -f "$RECORD_FILE" else false test_result "Recording JSON válido" fi # Test 3: Screenshot después de navegación echo "Test: Screenshot refleja navegación" NAV_PROFILE="nav-screenshot-$$" timeout 30 ./navegar -url https://example.com \ -profile "$NAV_PROFILE" \ -duration 2 \ -headless=true &>/dev/null timeout 30 ./screenshot -url https://example.com \ -profile "$NAV_PROFILE" \ -o "$TEST_DIR/after-nav.png" \ -headless=true &>/dev/null [ -f "$TEST_DIR/after-nav.png" ] && [ -s "$TEST_DIR/after-nav.png" ] test_result "Screenshot después de navegación" # Test 4: Perfiles en paralelo (clonados) echo "Test: Perfiles clonados en paralelo" BASE_PROFILE="parallel-base-$$" # Crear perfil base mkdir -p "$HOME/.navegator/profiles/$BASE_PROFILE" # Clonar CLONE1="$BASE_PROFILE-clone1" CLONE2="$BASE_PROFILE-clone2" cp -r "$HOME/.navegator/profiles/$BASE_PROFILE" "$HOME/.navegator/profiles/$CLONE1" cp -r "$HOME/.navegator/profiles/$BASE_PROFILE" "$HOME/.navegator/profiles/$CLONE2" # Ejecutar en paralelo timeout 30 ./screenshot -url https://example.com \ -profile "$CLONE1" \ -o "$TEST_DIR/clone1.png" \ -headless=true &>/dev/null & PID1=$! timeout 30 ./screenshot -url https://example.com \ -profile "$CLONE2" \ -o "$TEST_DIR/clone2.png" \ -headless=true &>/dev/null & PID2=$! wait $PID1 $PID2 [ -f "$TEST_DIR/clone1.png" ] && [ -f "$TEST_DIR/clone2.png" ] test_result "Perfiles clonados en paralelo" # Test 5: Output JSON válido echo "Test: Búsqueda genera JSON válido" # Este puede fallar por timeout, pero verificar estructura timeout 45 ./buscar -q "test" -n 1 \ -profile "json-test-$$" \ -output "$TEST_DIR/search.json" \ -headless=true &>/dev/null || true if [ -f "$TEST_DIR/search.json" ]; then # Verificar que es JSON válido python3 -m json.tool "$TEST_DIR/search.json" > /dev/null 2>&1 test_result "JSON de búsqueda válido" else echo -e "${RED}✗${NC} JSON de búsqueda válido (timeout esperado)" ((FAILED++)) fi echo "" echo "==========================================" echo "Resultados Integration Tests" echo "==========================================" echo -e "${GREEN}Passed:${NC} $PASSED" echo -e "${RED}Failed:${NC} $FAILED" echo "" # Cleanup rm -rf "$TEST_DIR" rm -rf "$HOME/.navegator/profiles/shared-test-"* rm -rf "$HOME/.navegator/profiles/record-test-"* rm -rf "$HOME/.navegator/profiles/nav-screenshot-"* rm -rf "$HOME/.navegator/profiles/parallel-base-"* rm -rf "$HOME/.navegator/profiles/json-test-"* if [ $FAILED -gt 0 ]; then exit 1 else exit 0 fi