# Test Plan: Unificacion de Visibilidad AdSense para Cache
## Test Environment
- **DEV URL**: https://dev.analisisdepreciosunitarios.com
- **PROD URL**: https://analisisdepreciosunitarios.com
- **Browsers**: Chrome, Firefox
- **Tools**: DevTools Console, Network tab, Playwright MCP
---
## Pre-requisitos
1. Habilitar `javascript_first_mode` en settings de adsense-placement
2. Habilitar `hide_for_logged_in` en settings de adsense-placement
3. Tener cuenta de usuario para pruebas de login
4. Limpiar cache del sitio antes de cada prueba
---
## Test Cases
### TC01: HTML se genera para usuarios anonimos (JS-First activo)
**Objetivo**: Verificar que los slots de ads se renderizan en HTML para visitantes anonimos
| Campo | Valor |
|-------|-------|
| Pre-condicion | `javascript_first_mode=true`, `hide_for_logged_in=true`, usuario anonimo |
| Pasos | 1. Limpiar cache del sitio
2. Abrir pagina de post en navegacion privada
3. Inspeccionar HTML |
| Resultado esperado | Elementos `.roi-adsense-placeholder` presentes en DOM |
| Status | PENDING |
| Notas | |
### TC02: HTML se genera para usuarios logueados (JS-First activo)
**Objetivo**: Verificar que los slots de ads se renderizan en HTML incluso para usuarios logueados
| Campo | Valor |
|-------|-------|
| Pre-condicion | `javascript_first_mode=true`, `hide_for_logged_in=true`, usuario logueado |
| Pasos | 1. Limpiar cache del sitio
2. Login como usuario
3. Visitar pagina de post
4. Inspeccionar HTML |
| Resultado esperado | Elementos `.roi-adsense-placeholder` presentes en DOM (mismo HTML que TC01) |
| Status | PENDING |
| Notas | Clave: el HTML debe ser IDENTICO al de TC01 |
### TC03: Endpoint retorna show_ads=false para usuarios logueados
**Objetivo**: Verificar que el endpoint REST evalua correctamente hide_for_logged_in
| Campo | Valor |
|-------|-------|
| Pre-condicion | `javascript_first_mode=true`, `hide_for_logged_in=true`, usuario logueado |
| Pasos | 1. Login como usuario
2. En console ejecutar:
`fetch('/wp-json/roi-theme/v1/adsense-placement/visibility?post_id=1', {credentials:'same-origin'}).then(r=>r.json()).then(console.log)` |
| Resultado esperado | Respuesta: `{show_ads: false, reasons: ['hide_for_logged_in'], ...}` |
| Status | PENDING |
| Notas | |
### TC04: JavaScript oculta ads para usuarios logueados
**Objetivo**: Verificar que el JavaScript aplica correctamente la decision del endpoint
| Campo | Valor |
|-------|-------|
| Pre-condicion | `javascript_first_mode=true`, `hide_for_logged_in=true`, usuario logueado |
| Pasos | 1. Login como usuario
2. Visitar pagina de post
3. Verificar clases CSS de slots
4. Verificar evento `roiAdsenseDeactivated` |
| Resultado esperado | Slots tienen clase `roi-adsense-hidden` o altura colapsada |
| Status | PENDING |
| Notas | |
### TC05: JavaScript muestra ads para usuarios anonimos
**Objetivo**: Verificar que el JavaScript muestra correctamente los ads
| Campo | Valor |
|-------|-------|
| Pre-condicion | `javascript_first_mode=true`, `hide_for_logged_in=true`, usuario anonimo |
| Pasos | 1. Navegacion privada
2. Visitar pagina de post
3. Verificar clases CSS de slots |
| Resultado esperado | Slots tienen clase `roi-adsense-active` |
| Status | PENDING |
| Notas | |
### TC06: Cache sirve mismo HTML a ambos tipos de usuario
**Objetivo**: Verificar compatibilidad con page cache
| Campo | Valor |
|-------|-------|
| Pre-condicion | `javascript_first_mode=true`, page cache activo |
| Pasos | 1. Limpiar cache
2. Usuario anonimo visita pagina (genera cache)
3. Usuario logueado visita misma pagina
4. Comparar HTML de `.roi-adsense-placeholder` |
| Resultado esperado | HTML identico, diferencia solo en comportamiento JS |
| Status | PENDING |
| Notas | Este es el test critico de la spec |
### TC07: Modo legacy funciona sin cambios (JS-First deshabilitado)
**Objetivo**: Verificar backward compatibility
| Campo | Valor |
|-------|-------|
| Pre-condicion | `javascript_first_mode=false`, `hide_for_logged_in=true`, usuario logueado |
| Pasos | 1. Deshabilitar JS-First en settings
2. Login como usuario
3. Visitar pagina de post
4. Inspeccionar HTML |
| Resultado esperado | Elementos `.roi-adsense-placeholder` NO presentes (comportamiento legacy) |
| Status | PENDING |
| Notas | Comportamiento identico al actual |
### TC08: Exclusiones por tipo de pagina funcionan en ambos modos
**Objetivo**: Verificar que exclusiones no relacionadas con login siguen funcionando
| Campo | Valor |
|-------|-------|
| Pre-condicion | `show_on_archives=false` configurado |
| Pasos | 1. Visitar pagina de archivo (categoria)
2. Verificar que no hay slots de ads |
| Resultado esperado | Sin slots de ads en paginas de archivo |
| Status | PENDING |
| Notas | |
### TC09: Exclusiones por categoria funcionan en ambos modos
**Objetivo**: Verificar que exclusiones por categoria siguen funcionando
| Campo | Valor |
|-------|-------|
| Pre-condicion | Categoria excluida configurada |
| Pasos | 1. Visitar post de categoria excluida
2. Verificar que no hay slots de ads |
| Resultado esperado | Sin slots de ads en posts de categoria excluida |
| Status | PENDING |
| Notas | |
---
## Automated Test Scripts
### Script: Verificar HTML identico para cache
```javascript
// Ejecutar en Playwright o consola
// Compara DOM de slots entre usuario anonimo y logueado
async function verifyCacheCompatibility() {
const anonSlots = document.querySelectorAll('.roi-adsense-placeholder').length;
console.log(`Slots encontrados: ${anonSlots}`);
// El HTML debe existir independientemente del estado de login
// La diferencia esta en las clases CSS aplicadas por JS
const activeSlots = document.querySelectorAll('.roi-adsense-active').length;
const hiddenSlots = document.querySelectorAll('.roi-adsense-hidden').length;
console.log(`Activos: ${activeSlots}, Ocultos: ${hiddenSlots}`);
return {
totalSlots: anonSlots,
active: activeSlots,
hidden: hiddenSlots
};
}
verifyCacheCompatibility();
```
### Script: Verificar respuesta del endpoint
```javascript
// Ejecutar en consola con usuario logueado
async function testEndpoint() {
const postId = document.querySelector('article')?.id?.replace('post-', '') || '1';
const url = `/wp-json/roi-theme/v1/adsense-placement/visibility?post_id=${postId}`;
const response = await fetch(url, { credentials: 'same-origin' });
const data = await response.json();
console.log('Respuesta del endpoint:');
console.log('- show_ads:', data.show_ads);
console.log('- reasons:', data.reasons);
console.log('- cache_seconds:', data.cache_seconds);
return data;
}
testEndpoint();
```
---
## Notas de Implementacion
1. **Orden de ejecucion**: Implementar spec primero, luego ejecutar tests
2. **Rollback**: Si falla TC06, revertir cambios (backward compatible)
3. **Monitoreo**: Despues de deploy, verificar metricas de AdSense por 24h
---
## Results Summary
| Test Case | Status | Date | Tester |
|-----------|--------|------|--------|
| TC01 | PENDING | | |
| TC02 | PENDING | | |
| TC03 | PENDING | | |
| TC04 | PENDING | | |
| TC05 | PENDING | | |
| TC06 | PENDING | | |
| TC07 | PENDING | | |
| TC08 | PENDING | | |
| TC09 | PENDING | | |
---
## Version History
| Version | Date | Changes |
|---------|------|---------|
| 1.0 | 2025-12-11 | Initial test plan |