|
| 1 | +# OpenGateway Sample Code Testing Suite |
| 2 | +## Introducción |
| 3 | + |
| 4 | +El directorio `test` contiene una suite completa de testing automatizado para todas las APIs de OpenGateway. Incluye: |
| 5 | + |
| 6 | +1. **Extractor de código de muestra**: El script `test_code.sh` procesa archivos que contienen bloques de código fuente en diferentes lenguajes de programación (Java, Node.js, Python), los extrae, formatea y valida automáticamente. |
| 7 | + |
| 8 | +2. **Suite de tests completa**: |
| 9 | + - **Tests de Python** (`python_test.py`): 9 tests unitarios con mocks para todas las APIs |
| 10 | + - **Tests de Node.js** (`nodeSandbox.test.js`): 9 tests de integración con el SDK oficial |
| 11 | + - **Tests de validación HTML** (`htmlForm.test.js`): Validación de configuraciones de formularios |
| 12 | + |
| 13 | +3. **SDK Mock personalizado** (`mock_aggregator_sdk.py`): Implementación mock completa para testing sin dependencias externas. |
| 14 | + |
| 15 | +## APIs Soportadas |
| 16 | + |
| 17 | +El sistema de testing tiene cobertura completa para las siguientes 9 APIs de OpenGateway: |
| 18 | + |
| 19 | +1. **AgeVerification** - Verificación de edad de usuarios |
| 20 | +2. **DeviceLocation** - Verificación de ubicación de dispositivos |
| 21 | +3. **DeviceStatus** - Estado de conectividad y roaming |
| 22 | +4. **DeviceSwap** - Detección de cambios de dispositivo |
| 23 | +5. **KnowYourCustomer** - Verificación de datos de cliente (KYC) |
| 24 | +6. **NumberVerification** - Verificación de números de teléfono |
| 25 | +7. **QualityOnDemand** - Gestión de calidad de servicio (QoD) |
| 26 | +8. **Simswap** - Detección de intercambio de SIM |
| 27 | +9. **Tenure** - Verificación de antigüedad de cliente |
| 28 | + |
| 29 | +## Archivos de Testing |
| 30 | + |
| 31 | +### Archivos principales: |
| 32 | +- `test_code.sh` - Script principal de orquestación |
| 33 | +- `python_test.py` - Suite de tests de Python (9 tests) |
| 34 | +- `nodeSandbox.test.js` - Suite de tests de Node.js (9 tests) |
| 35 | +- `htmlForm.test.js` - Tests de validación HTML (4 tests) |
| 36 | +- `mock_aggregator_sdk.py` - SDK mock para testing Python |
| 37 | +- `package.json` - Configuración de dependencias Node.js |
| 38 | + |
| 39 | +### Configuración: |
| 40 | +- `babel.config.js` - Configuración de Babel para ES6 |
| 41 | +- `eslint.config.mjs` - Configuración de ESLint |
| 42 | +- `.gitignore` - Exclusiones de archivos temporales |
| 43 | + |
| 44 | +## Premisas |
| 45 | +El extractor de código analiza archivos ubicados en el directorio `../catalog`, cuyo nombre coincide con el formato `samplecode_<nombre_api>.md`. |
| 46 | + |
| 47 | +Para que el script funcione correctamente, los archivos `samplecode_*.md` deben seguir el template actual para los bloques de código, es decir, cumplir las siguientes reglas: |
| 48 | +- Los archivos deben estar ubicados en el directorio `../catalog`. |
| 49 | +- Los nombres de los archivos deben tener el formato `samplecode_<nombre_api>.md`. |
| 50 | +- Cada bloque de código debe estar delimitado por marcas de inicio y fin de bloque: |
| 51 | + - La marca de inicio de bloque debe ser ` ``` <lenguaje de programación> <Descripción del caso de uso> `. |
| 52 | + - La marca de fin de bloque debe ser ` ``` `. |
| 53 | +- Los bloques de código deben estar correctamente indentados siguiendo las normas correspondientes para el lenguaje de programación al que corresponde. |
| 54 | + |
| 55 | +## Funcionamiento |
| 56 | + |
| 57 | +### Script Principal (`test_code.sh`) |
| 58 | +El script de orquestación realiza las siguientes tareas: |
| 59 | + |
| 60 | +1. **Extracción de código**: Procesa archivos `samplecode_*.md` y extrae bloques de código por lenguaje |
| 61 | +2. **Corrección automática**: Aplica fixes automáticos para imports y sintaxis de Python |
| 62 | +3. **Generación de SDKs simplificados**: Crea versiones mock para APIs problemáticas |
| 63 | +4. **Ejecución de tests**: Ejecuta la suite completa de Python y Node.js |
| 64 | +5. **Linting**: Valida código con ESLint (JavaScript) y flake8 (Python) |
| 65 | + |
| 66 | +### Tests de Python (`python_test.py`) |
| 67 | +- **Framework**: unittest con mock |
| 68 | +- **Cobertura**: 9 APIs con tests individuales |
| 69 | +- **Mock SDK**: Utiliza `mock_aggregator_sdk.py` para simular respuestas |
| 70 | +- **Validación**: Verifica llamadas correctas y respuestas esperadas |
| 71 | + |
| 72 | +### Tests de Node.js (`nodeSandbox.test.js`) |
| 73 | +- **Framework**: Jest con mocks del SDK oficial |
| 74 | +- **Cobertura**: 9 APIs con configuraciones específicas |
| 75 | +- **SDK**: Utiliza `@telefonica/opengateway-sandbox-sdk` |
| 76 | +- **Validación**: Tests de instanciación y métodos principales |
| 77 | + |
| 78 | +### Tests HTML (`htmlForm.test.js`) |
| 79 | +- **Propósito**: Valida configuraciones de formularios web |
| 80 | +- **Cobertura**: Scope y redirect URLs para todas las APIs |
| 81 | +- **Framework**: Jest con JSDOM para manipulación DOM |
| 82 | + |
| 83 | +## Requisitos |
| 84 | + |
| 85 | +### Sistema base: |
| 86 | +- **Bash**: Shell compatible con Bash (zsh también funciona) |
| 87 | +- **Git**: Para gestión de versiones |
| 88 | + |
| 89 | +### Node.js: |
| 90 | +- **Node.js** (v14+): Runtime de JavaScript |
| 91 | +- **npm**: Gestor de paquetes (incluido con Node.js) |
| 92 | +- **jest**: Framework de testing para JavaScript |
| 93 | +- **eslint**: Linter para JavaScript/TypeScript |
| 94 | + |
| 95 | +### Python: |
| 96 | +- **Python** (v3.7+): Intérprete de Python |
| 97 | +- **pip**: Gestor de paquetes de Python |
| 98 | +- **flake8**: Linter para Python |
| 99 | +- **unittest**: Framework de testing (incluido en Python) |
| 100 | + |
| 101 | +## Instalación |
| 102 | + |
| 103 | +1. **Instalar Node.js y npm**: |
| 104 | + - Puedes descargar e instalar Node.js desde nodejs.org. |
| 105 | + - npm se instala automáticamente con Node.js. |
| 106 | + |
| 107 | +2. **Instalar las dependencias del proyecto**: |
| 108 | + |
| 109 | + - Navega al directorio del proyecto `test`, donde se encuentra el archivo package.json. |
| 110 | + - Ejecuta el siguiente comando para instalar las dependencias: |
| 111 | + ```bash |
| 112 | + npm install |
| 113 | + ``` |
| 114 | + |
| 115 | +3. **Instalar Python**: |
| 116 | + - Puedes descargar e instalar Python desde python.org. |
| 117 | + |
| 118 | +4. **Instalar flake8**: |
| 119 | + - Ejecuta el siguiente comando para instalar `flake8`: |
| 120 | + ```bash |
| 121 | + pip install flake8 |
| 122 | + ``` |
| 123 | + |
| 124 | +## Ejecución |
| 125 | + |
| 126 | +### Ejecución completa (recomendada) |
| 127 | +```bash |
| 128 | +cd test |
| 129 | +chmod +x test_code.sh # Solo la primera vez |
| 130 | +./test_code.sh |
| 131 | +``` |
| 132 | + |
| 133 | +### Ejecución individual de tests |
| 134 | + |
| 135 | +**Solo tests de Python:** |
| 136 | +```bash |
| 137 | +cd test |
| 138 | +python python_test.py |
| 139 | +``` |
| 140 | + |
| 141 | +**Solo tests de Node.js:** |
| 142 | +```bash |
| 143 | +cd test |
| 144 | +npm test |
| 145 | +# O específicamente: |
| 146 | +npx jest nodeSandbox.test.js |
| 147 | +npx jest htmlForm.test.js |
| 148 | +``` |
| 149 | + |
| 150 | +**Solo linting:** |
| 151 | +```bash |
| 152 | +cd test |
| 153 | +# JavaScript/Node.js |
| 154 | +npx eslint tmp/js/**/*.js |
| 155 | +
|
| 156 | +# Python |
| 157 | +flake8 tmp/py/ |
| 158 | +``` |
| 159 | + |
| 160 | +## Resultados Esperados |
| 161 | + |
| 162 | +### ✅ Ejecución Exitosa |
| 163 | +``` |
| 164 | +################### Python test ################################## |
| 165 | +Ran 9 tests in 0.011s |
| 166 | +OK |
| 167 | + |
| 168 | +################### Node & html test ################################## |
| 169 | +Test Suites: 2 passed, 2 total |
| 170 | +Tests: 13 passed, 13 total |
| 171 | +``` |
| 172 | +
|
| 173 | +### ⚠️ Warnings Esperados |
| 174 | +- **ESLint warnings en `/tmp`**: Archivos generados automáticamente pueden tener warnings de estilo |
| 175 | +- **Variables no utilizadas**: Algunas variables se mantienen para claridad educativa |
| 176 | +- **Syntax errors en archivos generados**: Algunos archivos en `/tmp` pueden tener errores de sintaxis menores |
| 177 | +
|
| 178 | +## Estructura de Archivos Generados |
| 179 | +
|
| 180 | +``` |
| 181 | +test/ |
| 182 | +├── tmp/ # Archivos temporales generados |
| 183 | +│ ├── js/ # Código JavaScript extraído |
| 184 | +│ │ ├── devicelocation/ # Por API |
| 185 | +│ │ ├── simswap/ |
| 186 | +│ │ └── ... |
| 187 | +│ ├── py/ # Código Python extraído |
| 188 | +│ └── html/ # Código HTML extraído |
| 189 | +├── python_test.py # Tests principales Python |
| 190 | +├── nodeSandbox.test.js # Tests principales Node.js |
| 191 | +├── htmlForm.test.js # Tests de formularios HTML |
| 192 | +├── mock_aggregator_sdk.py # SDK mock para Python |
| 193 | +└── test_code.sh # Script orquestador |
| 194 | +``` |
| 195 | +
|
| 196 | +## Notas Importantes |
| 197 | +
|
| 198 | +- El directorio `/tmp` se regenera en cada ejecución |
| 199 | +- Los tests utilizan datos mock, no requieren conectividad real |
| 200 | +- Algunos warnings de linting son intencionales para mantener claridad educativa |
| 201 | +- Los archivos en `/tmp` son para validación automática, no para uso directo |
0 commit comments