- Add REST endpoint GET /roi-theme/v1/adsense-placement/visibility - Add Domain layer: UserContext, VisibilityDecision, AdsenseSettings VOs - Add Application layer: CheckAdsenseVisibilityUseCase - Add Infrastructure: AdsenseVisibilityChecker, Controller, Enqueuer - Add JavaScript controller with localStorage caching - Add test plan for production validation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
12 KiB
Plan de Pruebas: AdSense JavaScript-First Architecture
NOTA IMPORTANTE - PROTOCOLO DE PRUEBAS
Las pruebas se ejecutan en el servidor de PRODUCCION. Si hay algo que corregir, se modifica en LOCAL y luego se despliega.
PROHIBIDO: Modificar codigo directamente en produccion. PERMITIDO: Solo ejecutar pruebas y verificaciones en produccion.
Flujo correcto:
- Ejecutar prueba en produccion
- Si falla, corregir en local
- Desplegar cambios a produccion
- Re-ejecutar prueba
Resumen de Pruebas
| ID | Categoria | Descripcion | Criterio de Aceptacion |
|---|---|---|---|
| T01 | Endpoint REST | Endpoint registrado y accesible | HTTP 200 con JSON valido |
| T02 | Endpoint REST | Headers anti-cache presentes | Cache-Control, Pragma, Expires |
| T03 | Endpoint REST | Parametro post_id requerido | HTTP 400 sin post_id |
| T04 | Endpoint REST | post_id=0 valido (archivos/home) | HTTP 200 con post_id=0 |
| T05 | Visibilidad | Componente deshabilitado | show_ads=false, reason=component_disabled |
| T06 | Visibilidad | Usuario anonimo sin exclusiones | show_ads=true, reasons=[] |
| T07 | Visibilidad | Usuario logueado excluido | show_ads=false, reason=logged_in_excluded |
| T08 | Visibilidad | Rol excluido | show_ads=false, reason=role_excluded |
| T09 | Visibilidad | Post excluido | show_ads=false, reason=post_excluded |
| T10 | JavaScript | Script cargado en frontend | roiAdsenseConfig definido |
| T11 | JavaScript | Cache localStorage funciona | Datos guardados correctamente |
| T12 | JavaScript | Fallback cuando error | Ads se muestran en error |
| T13 | Feature Flag | Modo deshabilitado = legacy | No llama endpoint |
| T14 | Feature Flag | Modo habilitado = JS-First | Llama endpoint |
| T15 | Clean Arch | Value Objects inmutables | No WordPress en Domain |
| T16 | Clean Arch | Interface en Domain | AdsenseVisibilityCheckerInterface existe |
Pruebas Detalladas
T01: Endpoint REST Registrado y Accesible
Categoria: Endpoint REST Prioridad: CRITICA Spec Reference: Requirement: Endpoint REST Visibility
Pasos:
- Abrir navegador o usar curl
- Acceder a:
https://analisisdepreciosunitarios.com/wp-json/roi-theme/v1/adsense-placement/visibility?post_id=1
Resultado Esperado:
- HTTP Status: 200
- Content-Type: application/json
- Body contiene:
show_ads,reasons,cache_seconds,timestamp
Comando de Prueba:
curl -i "https://analisisdepreciosunitarios.com/wp-json/roi-theme/v1/adsense-placement/visibility?post_id=1"
Estado: [ ] Pendiente Resultado: Notas:
T02: Headers Anti-Cache Presentes
Categoria: Endpoint REST Prioridad: ALTA Spec Reference: Scenario: Headers anti-cache obligatorios
Pasos:
- Hacer request al endpoint
- Verificar headers de respuesta
Resultado Esperado:
Cache-Control: no-store, no-cache, must-revalidate, max-age=0Pragma: no-cacheExpires: Thu, 01 Jan 1970 00:00:00 GMTo0Vary: Cookie
Comando de Prueba:
curl -I "https://analisisdepreciosunitarios.com/wp-json/roi-theme/v1/adsense-placement/visibility?post_id=1"
Estado: [ ] Pendiente Resultado: Notas:
T03: Parametro post_id Requerido
Categoria: Endpoint REST Prioridad: ALTA Spec Reference: Scenario: Parametros del endpoint
Pasos:
- Hacer request SIN post_id
- Verificar respuesta de error
Resultado Esperado:
- HTTP Status: 400 (Bad Request)
- Body contiene mensaje de error indicando que post_id es requerido
Comando de Prueba:
curl -i "https://analisisdepreciosunitarios.com/wp-json/roi-theme/v1/adsense-placement/visibility"
Estado: [ ] Pendiente Resultado: Notas:
T04: post_id=0 Valido para Paginas de Archivo
Categoria: Endpoint REST Prioridad: ALTA Spec Reference: Scenario: Parametros del endpoint (validate_callback >= 0)
Pasos:
- Hacer request con post_id=0
- Verificar que responde correctamente
Resultado Esperado:
- HTTP Status: 200
- Body contiene decision de visibilidad valida
Comando de Prueba:
curl -i "https://analisisdepreciosunitarios.com/wp-json/roi-theme/v1/adsense-placement/visibility?post_id=0"
Estado: [ ] Pendiente Resultado: Notas:
T05: Componente Deshabilitado Retorna False
Categoria: Visibilidad Prioridad: ALTA Spec Reference: Scenario: Componente deshabilitado
Pre-condicion:
- Deshabilitar componente en admin (is_enabled = false)
Pasos:
- Deshabilitar adsense-placement en admin
- Hacer request al endpoint
- Verificar respuesta
Resultado Esperado:
{
"show_ads": false,
"reasons": ["component_disabled"],
"cache_seconds": 3600
}
Comando de Prueba:
curl "https://analisisdepreciosunitarios.com/wp-json/roi-theme/v1/adsense-placement/visibility?post_id=1"
Estado: [ ] Pendiente Resultado: Notas:
T06: Usuario Anonimo Sin Exclusiones Ve Ads
Categoria: Visibilidad Prioridad: CRITICA Spec Reference: Scenario: Usuario anonimo sin exclusiones
Pre-condicion:
- Componente habilitado
- javascript_first_mode habilitado
- Sin exclusiones configuradas
- No estar logueado
Pasos:
- Abrir navegador en modo incognito
- Acceder a un post del sitio
- Verificar respuesta del endpoint
Resultado Esperado:
{
"show_ads": true,
"reasons": [],
"cache_seconds": 60
}
Comando de Prueba:
curl "https://analisisdepreciosunitarios.com/wp-json/roi-theme/v1/adsense-placement/visibility?post_id=1"
Estado: [ ] Pendiente Resultado: Notas:
T07: Usuario Logueado Excluido
Categoria: Visibilidad Prioridad: ALTA Spec Reference: Scenario: Usuario logueado excluido
Pre-condicion:
- Activar "Ocultar para usuarios logueados" en admin
Pasos:
- Loguearse en WordPress
- Copiar cookies de sesion
- Hacer request con cookies
Resultado Esperado:
{
"show_ads": false,
"reasons": ["logged_in_excluded"],
"cache_seconds": 300
}
Verificacion Manual:
- Loguearse en wp-admin
- Visitar un post en el frontend
- Abrir DevTools > Network
- Buscar request a
/visibility - Verificar respuesta
Estado: [ ] Pendiente Resultado: Notas:
T08: Rol Excluido
Categoria: Visibilidad Prioridad: ALTA Spec Reference: Scenario: Rol de usuario excluido
Pre-condicion:
- Agregar "administrator" a roles excluidos en admin
Pasos:
- Loguearse como administrator
- Visitar un post
- Verificar respuesta del endpoint
Resultado Esperado:
{
"show_ads": false,
"reasons": ["role_excluded"],
"cache_seconds": 300
}
Estado: [ ] Pendiente Resultado: Notas:
T09: Post Excluido por ID
Categoria: Visibilidad Prioridad: ALTA Spec Reference: Scenario: Post excluido por ID
Pre-condicion:
- Agregar un ID de post a "IDs de posts excluidos" en admin
Pasos:
- Anotar el ID del post excluido (ej: 123)
- Hacer request con ese post_id
- Verificar respuesta
Resultado Esperado:
{
"show_ads": false,
"reasons": ["post_excluded"],
"cache_seconds": 60
}
Comando de Prueba:
curl "https://analisisdepreciosunitarios.com/wp-json/roi-theme/v1/adsense-placement/visibility?post_id=123"
Estado: [ ] Pendiente Resultado: Notas:
T10: Script JavaScript Cargado
Categoria: JavaScript Prioridad: CRITICA Spec Reference: Scenario: Configuracion via wp_localize_script
Pre-condicion:
- javascript_first_mode habilitado
Pasos:
- Visitar un post en el frontend
- Abrir DevTools > Console
- Escribir:
window.roiAdsenseConfig
Resultado Esperado:
- Objeto definido con propiedades:
endpoint: URL del endpoint RESTpostId: ID del post actualnonce: String no vaciofeatureEnabled: truedebug: boolean
Verificacion Alternativa:
// En consola del navegador
console.log(window.roiAdsenseConfig);
console.log(typeof window.roiAdsenseVisibility);
Estado: [ ] Pendiente Resultado: Notas:
T11: Cache localStorage Funciona
Categoria: JavaScript Prioridad: ALTA Spec Reference: Scenario: Cache en localStorage
Pasos:
- Visitar un post (primera vez)
- Abrir DevTools > Application > Local Storage
- Buscar key
roi_adsense_visibility - Recargar pagina
- Verificar en Network que NO hay nueva llamada al endpoint
Resultado Esperado:
- localStorage contiene:
{ "show_ads": true, "reasons": [], "timestamp": 1733900000, "cache_seconds": 60 } - Segunda carga NO hace request al endpoint (usa cache)
Verificacion en Consola:
localStorage.getItem('roi_adsense_visibility');
Estado: [ ] Pendiente Resultado: Notas:
T12: Fallback en Error de Red
Categoria: JavaScript Prioridad: ALTA Spec Reference: Scenario: Fallback strategy cached-or-show
Pasos:
- Limpiar localStorage
- Abrir DevTools > Network
- Habilitar "Offline" mode
- Visitar un post
- Verificar comportamiento
Resultado Esperado:
- Los ads se muestran (fallback = show)
- No hay error en consola (error manejado gracefully)
Verificacion Alternativa:
// Limpiar cache
window.roiAdsenseVisibility.clearCache();
// Recargar con network offline
Estado: [ ] Pendiente Resultado: Notas:
T13: Feature Flag Deshabilitado = Modo Legacy
Categoria: Feature Flag Prioridad: ALTA Spec Reference: Scenario: Feature flag deshabilitado
Pre-condicion:
- Deshabilitar javascript_first_mode en admin
Pasos:
- Deshabilitar javascript_first_mode
- Visitar un post
- Verificar en Network que NO hay llamada al endpoint
Resultado Esperado:
roiAdsenseConfig.featureEnabled= false- No hay request a
/visibilityendpoint - Ads se muestran inmediatamente (modo legacy)
Estado: [ ] Pendiente Resultado: Notas:
T14: Feature Flag Habilitado = JS-First
Categoria: Feature Flag Prioridad: ALTA Spec Reference: Scenario: Feature flag habilitado
Pre-condicion:
- Habilitar javascript_first_mode en admin
Pasos:
- Habilitar javascript_first_mode
- Limpiar cache (localStorage y pagina)
- Visitar un post
- Verificar en Network que SI hay llamada al endpoint
Resultado Esperado:
roiAdsenseConfig.featureEnabled= true- Request a
/visibilityendpoint presente - Ads se muestran/ocultan segun respuesta
Estado: [ ] Pendiente Resultado: Notas:
T15: Value Objects Sin Dependencias WordPress
Categoria: Clean Architecture Prioridad: MEDIA Spec Reference: Scenario: Value Object VisibilityDecision en Domain
Verificacion: Revisar que los archivos NO contengan funciones de WordPress:
Archivos a verificar:
Domain/ValueObjects/UserContext.phpDomain/ValueObjects/VisibilityDecision.phpDomain/ValueObjects/AdsenseSettings.phpDomain/Contracts/AdsenseVisibilityCheckerInterface.phpApplication/UseCases/CheckAdsenseVisibilityUseCase.php
Resultado Esperado:
- Sin
get_,wp_,is_user_logged_in,WP_*classes - Solo PHP puro y tipos del proyecto
Estado: [ ] Pendiente Resultado: Notas:
T16: Interface en Domain
Categoria: Clean Architecture Prioridad: MEDIA Spec Reference: Scenario: Interface en Domain
Verificacion:
El archivo Domain/Contracts/AdsenseVisibilityCheckerInterface.php debe:
- Existir en la ruta correcta
- Definir metodo
check(int $postId, UserContext $userContext): VisibilityDecision - NO referenciar WordPress
Estado: [ ] Pendiente Resultado: Notas:
Checklist de Despliegue Pre-Pruebas
Antes de ejecutar las pruebas, verificar:
- Codigo desplegado a produccion via FTP/SSH
- Cache de pagina limpiado
- javascript_first_mode habilitado en admin
- Componente adsense-placement habilitado
- Schema sincronizado en BD (campo javascript_first_mode existe)
Registro de Ejecucion
| Fecha | Tester | Pruebas Ejecutadas | Pasadas | Fallidas | Notas |
|---|---|---|---|---|---|
Defectos Encontrados
| ID | Prueba | Descripcion | Severidad | Estado | Correccion |
|---|---|---|---|---|---|
Historial de Versiones
| Version | Fecha | Cambios |
|---|---|---|
| 1.0 | 2025-12-11 | Plan inicial basado en spec v1.5 |