- renombrar openspec/ a _openspec/ (carpeta auxiliar) - mover specs de features a changes/ - crear specs base: arquitectura-limpia, estandares-codigo, nomenclatura - migrar _planificacion/ con design-system y roi-theme-template - agregar especificacion recaptcha anti-spam (proposal, tasks, spec) - corregir rutas y referencias en todas las specs Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.3 KiB
7.3 KiB
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
- Habilitar
javascript_first_modeen settings de adsense-placement - Habilitar
hide_for_logged_inen settings de adsense-placement - Tener cuenta de usuario para pruebas de login
- 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
// 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
// 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
- Orden de ejecucion: Implementar spec primero, luego ejecutar tests
- Rollback: Si falla TC06, revertir cambios (backward compatible)
- 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 |