Tests
Tests automatizados — SS_SearchProductsActionTest
Cobertura ~95% del código de SS_SearchProductsAction. Usa @TestSetup para crear datos aislados, independiente del entorno.
:::info Cobertura mínima para producción Salesforce requiere 75%. Esta clase alcanza ~95%.
Para ejecutar: Setup > Apex Test Execution > Run Tests.
:::
Productos de test creados en @TestSetup
| Producto | Atributos clave |
|---|---|
| STRIDE - POLARIZED BLACK DARK | lensType: POLARIZED · frameShape: RECTANGLE · frameMaterial: METAL · gender: UNISEX |
| HAWKERS X ALEX MARQUEZ - APEX | collaboration: ALEX_MARQUEZ · style: PERFORMANCE · productType: SPORT_SUNGLASSES · gender: MALE |
| ONE RAW BB - BLACK DARK | lensType: BLUE_BLOCKING · productType: BLUE_LIGHT · gender: UNISEX |
| LAX - AVIATOR BLACK | frameShape: AVIATOR · frameMaterial: METAL · mainColor: GOLD · gender: UNISEX |
| FALCON - SPORT PERFORMANCE | lensType: POLARIZED · frameShape: MASK · style: PERFORMANCE · productType: SPORT_SUNGLASSES |
Casos de test
| # | Método | Qué prueba | Resultado esperado |
|---|---|---|---|
| 1 | testFilterByLensType | lensType = POLARIZED con locale es_ES | resultCount > 0; JSON parseable |
| 2 | testFilterByFrameShape | frameShape = AVIATOR | resultCount > 0 (LAX) |
| 3 | testFilterByProductType | productType = BLUE_LIGHT | resultCount > 0 (ONE RAW BB) |
| 4 | testFilterByCollaboration | collaboration = ALEX_MARQUEZ | resultCount > 0 (APEX) |
| 5 | testMultipleFilters | Combina lensType + style + productType | resultCount > 0 (FALCON) |
| 6 | testNoFilters | Request vacía — sin filtros | JSON no nulo; fallback general |
| 7 | testLocaleEnUS | locale = en_US | Sin excepción; JSON no nulo |
| 8 | testInvalidLocale | locale = xx_XX (inválido) | Fallback a es_ES; resultCount > 0 |
| 9 | testGenderRelax | POLARIZED + gender FEMALE sin match → relax automático | Sin excepción; JSON no nulo (relax o fallback) |
Pruebas UAT manuales
Realizadas en sandbox a través del widget de chat embebido y del simulador del agente en Salesforce Setup.
| Escenario | Input del usuario | Comportamiento observado | OK |
|---|---|---|---|
| Ciclismo/running | "Busco unas gafas para ciclismo" | Deduce style:PERFORMANCE + productType:SPORT_SUNGLASSES + frameMaterial:TR90. Devuelve 2-3 gafas de deporte. | ✅ |
| Conducción | "Para conducir" | Infiere lensType:POLARIZED. Responde con gafas polarizadas. | ✅ |
| Luz azul | "Trabajo con ordenador todo el día" | Detecta lensType:BLUE_BLOCKING + productType:BLUE_LIGHT. | ✅ |
| Estilo aviador | "Unas de estilo Top Gun doradas" | frameShape:AVIATOR + mainColor:GOLD. Devuelve modelos aviador. | ✅ |
| Colaboración | "La colección de Alex Márquez" | collaboration:ALEX_MARQUEZ. Devuelve modelos de la colección. | ✅ |
| Sin filtros | "Muéstrame gafas de sol" | Sin atributos específicos → fallback general con 5 productos variados. | ✅ |
| Locale inglés | "I need sunglasses for cycling" | Responde en inglés, pasa locale:en_US, URLs y precios en USD. | ✅ |
| Locale inválido | Simulado con locale:xx_XX en el action | Fallback automático a es_ES sin error. | ✅ |
| Competidor | "¿Son mejores que Ray-Ban?" | Agente redirige: "Me especializo en Hawkers…". | ✅ |
| 0 resultados + relax | Filtros muy específicos sin match | Relaja género → devuelve resultados; si sigue vacío, fallback general. | ✅ |
Pendiente de probar: pruebas con usuarios reales, A/B testing, pruebas de carga, validación exhaustiva de los 20 locales, y pruebas en producción.