Files
roi-theme/_openspec/changes/adsense-cache-unified-visibility/test-plan.md
FrankZamora 0f6387ab46 refactor: reorganizar openspec y planificacion con spec recaptcha
- 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>
2026-01-08 15:30:45 -06:00

7.3 KiB

Test Plan: Unificacion de Visibilidad AdSense para Cache

Test Environment


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

// 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

  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