# ✅ Validación: Actualización de Demos desde cd-system

## 🎯 Objetivo

Este documento proporciona un proceso de validación completo para asegurar que las actualizaciones de demos desde `cd-system` a proyectos se realicen de forma segura, respetando las protecciones de `.gitattributes`.

---

## 📋 Checklist de Validación Pre-Actualización

### 1. Validar Cambios en cd-system

```bash
cd /Applications/XAMPP/xamppfiles/htdocs/cd-system

# Verificar que los cambios están commiteados
git status
# Debe mostrar: "nothing to commit, working tree clean"

# Ver el último commit
git log --oneline -1
# Debe mostrar el commit con los cambios del demo

# Ver qué archivos se modificaron
git show HEAD --name-only | grep -i "demo-architecture-2"
```

**✅ Validación:**
- [ ] Cambios commiteados en cd-system
- [ ] Commit tiene mensaje descriptivo
- [ ] Solo archivos del demo/core modificados
- [ ] NO hay cambios en `config/cd-system.php` o `config/site.php`

### 2. Validar Archivos Modificados

```bash
# Ejecutar script de validación
./scripts/validate-demo-update.sh demo-architecture-2

# O verificar manualmente
git show HEAD --name-only | grep -v "^$" | while read file; do
    # Verificar que NO es archivo protegido
    if [[ "$file" == "config/cd-system.php" ]] || \
       [[ "$file" == "config/site.php" ]] || \
       [[ "$file" == public/cd-project/assets/* ]]; then
        echo "⚠️  ADVERTENCIA: Archivo protegido en commit: $file"
    fi
done
```

**✅ Validación:**
- [ ] Solo archivos del demo/core modificados
- [ ] NO hay archivos protegidos en el commit
- [ ] Estructura del demo es correcta

### 3. Validar Protecciones en el Proyecto

```bash
cd /Applications/XAMPP/xamppfiles/htdocs/cokecolombres  # o tu proyecto

# Verificar .gitattributes
cat .gitattributes

# Debe incluir:
# config/cd-system.php merge=ours
# config/site.php merge=ours
# public/cd-project/assets/* merge=ours
```

**✅ Validación:**
- [ ] `.gitattributes` existe
- [ ] Tiene al menos 2 protecciones (config files)
- [ ] Assets están protegidos

---

## 🔍 Validación Durante la Actualización

### 1. Ver Cambios Antes de Aplicar

```bash
cd /Applications/XAMPP/xamppfiles/htdocs/cokecolombres

# Obtener cambios
git fetch upstream cd-system

# Ver qué archivos se actualizarán
git diff HEAD..upstream/cd-system --name-only | grep -i "demo-architecture-2"

# Ver diferencias específicas
git diff HEAD..upstream/cd-system resources/views/layout/front/footers/demo-architecture-2.blade.php
```

**✅ Validación:**
- [ ] Solo archivos del demo/core en la lista
- [ ] NO hay cambios en archivos protegidos
- [ ] Los cambios son los esperados

### 2. Verificar que Archivos Protegidos NO Cambiarán

```bash
# Verificar config/cd-system.php
git diff HEAD..upstream/cd-system config/cd-system.php
# Debe mostrar: "merge=ours" o no mostrar cambios

# Verificar config/site.php
git diff HEAD..upstream/cd-system config/site.php
# Debe mostrar: "merge=ours" o no mostrar cambios
```

**✅ Validación:**
- [ ] Archivos protegidos NO muestran cambios
- [ ] O muestran "merge=ours" en el diff

---

## ✅ Validación Post-Actualización

### 1. Verificar que las Protecciones Funcionaron

```bash
# Después del merge
git merge upstream/cd-system --no-edit

# Verificar config/cd-system.php
git show HEAD:config/cd-system.php | grep "demo"
# Debe mostrar el demo del PROYECTO, NO el de cd-system

# Verificar config/site.php
git show HEAD:config/site.php | grep -A 2 "'name'"
# Debe mostrar el nombre del PROYECTO, NO el de cd-system
```

**✅ Validación:**
- [ ] `config/cd-system.php` mantiene configuración del proyecto
- [ ] `config/site.php` mantiene identidad del proyecto
- [ ] Assets del proyecto no cambiaron

### 2. Verificar Archivos Actualizados

```bash
# Ver qué archivos se actualizaron
git diff HEAD~1 HEAD --name-only | grep -i "demo-architecture-2"

# Debe mostrar:
# - resources/views/layout/front/footers/demo-architecture-2.blade.php
# - public/template/css/demos/demo-architecture-2.css
# - resources/views/modules/*/frontend/partials/dynamic-header.blade.php
```

**✅ Validación:**
- [ ] Archivos del demo se actualizaron correctamente
- [ ] CSS del demo se actualizó
- [ ] Dynamic headers se actualizaron

### 3. Probar Funcionalidad

```bash
# Limpiar cache
php artisan config:clear
php artisan cache:clear
php artisan view:clear

# Iniciar servidor
php artisan serve

# Verificar en navegador:
# - Footer se ve correctamente
# - Headers tienen el color correcto (#847266)
# - Gallery no muestra título/descripción en hover
# - Logo del proyecto sigue siendo el del proyecto
```

**✅ Validación:**
- [ ] Footer optimizado se muestra correctamente
- [ ] Headers tienen color consistente
- [ ] Gallery funciona sin título/descripción en hover
- [ ] Logo del proyecto se mantiene
- [ ] Configuraciones del proyecto se mantienen

---

## 🧪 Script de Validación Automática

```bash
#!/bin/bash
# scripts/test-demo-update.sh [project-name] [demo-name]

PROJECT_NAME="${1:-cokecolombres}"
DEMO_NAME="${2:-demo-architecture-2}"
BASE_PATH="/Applications/XAMPP/xamppfiles/htdocs"
PROJECT_PATH="${BASE_PATH}/${PROJECT_NAME}"
CD_SYSTEM_PATH="${BASE_PATH}/cd-system"

echo "🧪 Validando actualización de $DEMO_NAME en $PROJECT_NAME"
echo ""

# 1. Validar en cd-system
echo "📋 1. Validando cambios en cd-system..."
cd "$CD_SYSTEM_PATH"
./scripts/validate-demo-update.sh "$DEMO_NAME"

# 2. Validar protecciones en proyecto
echo ""
echo "📋 2. Validando protecciones en proyecto..."
cd "$PROJECT_PATH"
if [ -f ".gitattributes" ]; then
    PROTECTIONS=$(grep -c "merge=ours" .gitattributes || echo "0")
    echo "   Protecciones encontradas: $PROTECTIONS"
    if [ "$PROTECTIONS" -lt 2 ]; then
        echo "   ⚠️  ADVERTENCIA: Pocas protecciones"
    fi
else
    echo "   ❌ ERROR: .gitattributes no encontrado"
    exit 1
fi

# 3. Simular actualización
echo ""
echo "📋 3. Simulando actualización..."
if git remote | grep -q upstream; then
    git fetch upstream cd-system > /dev/null 2>&1
    CHANGES=$(git diff HEAD..upstream/cd-system --name-only | grep -i "$DEMO_NAME" | wc -l)
    echo "   Archivos del demo que se actualizarían: $CHANGES"
    
    PROTECTED_CHANGES=$(git diff HEAD..upstream/cd-system --name-only | grep -E "config/(cd-system|site)\.php|public/cd-project/assets/" | wc -l)
    if [ "$PROTECTED_CHANGES" -gt 0 ]; then
        echo "   ⚠️  ADVERTENCIA: Cambios en archivos protegidos detectados"
    else
        echo "   ✓ No hay cambios en archivos protegidos"
    fi
else
    echo "   ⚠️  Upstream no configurado. Ejecuta: git remote add upstream https://github.com/LACOMPANIADIGITAL/cd-system.git"
fi

echo ""
echo "✅ Validación completada"
```

---

## 📊 Matriz de Validación

| Archivo | Tipo | ¿Se Actualiza? | Protección |
|---------|------|----------------|------------|
| `config/cd-system.php` | Config | ❌ NO | `merge=ours` |
| `config/site.php` | Config | ❌ NO | `merge=ours` |
| `public/cd-project/assets/*` | Assets | ❌ NO | `merge=ours` |
| `resources/views/layout/front/footers/demo-*.blade.php` | Demo | ✅ SÍ | - |
| `resources/views/layout/front/headers/demo-*.blade.php` | Demo | ✅ SÍ | - |
| `public/template/css/demos/demo-*.css` | Demo | ✅ SÍ | - |
| `resources/views/modules/*/frontend/partials/dynamic-header.blade.php` | Core | ✅ SÍ | - |
| `resources/views/modules/cd-base/frontend/demos/demo-*/**` | Demo | ✅ SÍ | - |

---

## ⚠️ Errores Comunes y Soluciones

### Error 1: Archivos Protegidos en el Commit de cd-system

**Síntoma:** `config/cd-system.php` o `config/site.php` aparecen en el commit de cd-system

**Solución:**
```bash
# En cd-system, verificar antes de commitear
git status
git diff --cached

# Si hay archivos protegidos, removerlos del commit
git reset HEAD config/cd-system.php config/site.php
# Luego commitear solo los archivos del demo
```

### Error 2: Protecciones No Funcionan en el Proyecto

**Síntoma:** Después del merge, `config/cd-system.php` cambió

**Solución:**
```bash
# Verificar que .gitattributes está correcto
cat .gitattributes | grep "config/cd-system.php"

# Debe mostrar: config/cd-system.php merge=ours

# Si no está, agregarlo
echo "config/cd-system.php merge=ours" >> .gitattributes
git add .gitattributes
git commit -m "fix: Agregar protección para config/cd-system.php"
```

### Error 3: Assets del Proyecto se Sobrescriben

**Síntoma:** Logos del proyecto cambiaron después del merge

**Solución:**
```bash
# Verificar protecciones de assets
cat .gitattributes | grep "public/cd-project/assets"

# Debe mostrar: public/cd-project/assets/* merge=ours

# Si no está, agregarlo
echo "public/cd-project/assets/* merge=ours" >> .gitattributes
git add .gitattributes
git commit -m "fix: Agregar protección para assets del proyecto"
```

---

## 📚 Documentación Relacionada

- `docs/bewpro/system/ACTUALIZAR-DEMOS-DESDE-CD-SYSTEM.md` - Proceso completo
- `docs/bewpro/system/FLUJO-BIDIRECCIONAL-COMPLETO.md` - Flujo bidireccional
- `docs/bewpro/system/METODOLOGIA-PROPAGACION-DEMOS.md` - Metodología

---

**Última actualización:** Diciembre 2024  
**Versión:** 1.0 - Guía de Validación Completa

