Skip to content

Commit 8dd729e

Browse files
authored
Merge pull request #82 from Telefonica/updated_testing_samplecodes
Updated testing samplecodes
2 parents 7a09522 + d9da850 commit 8dd729e

File tree

12 files changed

+13367
-1
lines changed

12 files changed

+13367
-1
lines changed

.gitignore

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,33 @@
11
**/.DS_Store
22
.DS_Store
3+
node_modules/
4+
tmp/
5+
# Python cache files
6+
__pycache__/
7+
*.pyc
8+
*.pyo
9+
*.pyd
10+
.Python
11+
12+
# Test generated files
13+
tmp/
14+
15+
# Node modules
16+
node_modules/
17+
18+
# Logs
19+
*.log
20+
21+
# OS files
22+
.DS_Store
23+
Thumbs.db
24+
25+
# IDE files
26+
.vscode/
27+
.idea/
28+
*.swp
29+
*.swo
30+
31+
# Environment files
32+
.env
33+
.env.local

test/README.md

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
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

test/babel.config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
presets: ["@babel/preset-env"],
3+
};

test/eslint.config.mjs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import globals from "globals";
2+
import pluginJs from "@eslint/js";
3+
4+
/** @type {import('eslint').Linter.Config[]} */
5+
export default [
6+
{
7+
files: ["**/*.js"],
8+
languageOptions: {
9+
sourceType: "module",
10+
globals: globals.browser
11+
}
12+
},
13+
pluginJs.configs.recommended,
14+
];

0 commit comments

Comments
 (0)