# Testing

## Tests de Certificados

Ubicación: `test/`

### Generar Certificados de Prueba

```bash
python test/generate_certs.py
```

Genera certificados en `test/certs/`:
- `valid_365days.p12` - Válido 365 días
- `valid_60days.p12` - Válido 60 días
- `expired.p12` - Expirado
- `expiring_soon.p12` - Caduca pronto
- `not_yet_valid.p12` - Aún no válido

### Ejecutar Tests

```bash
python test/run_tests.py
```

Expected output:
```
#   Test                 Expected   Result     Status
------------------------------------------------------------
1   Valid 365 days       PASS       PASS       [PASS]
2   Valid 60 days        PASS       PASS       [PASS]
3   Expired              FAIL       FAIL       [PASS]
4   Expiring soon        PASS       PASS       [PASS]
5   Not yet valid        FAIL       FAIL       [PASS]
------------------------------------------------------------
RESULTS: 5 passed, 0 failed
```

## Test de Facturas

### Factura de Ejemplo

Ubicación: `test/invoice.json`

```bash
python test_invoice.py
```

### Flujo Completo

1. **Iniciar API:**
```bash
go run main.go
```

2. **Registrar certificado:**
Ver `test_personal.py`

3. **Enviar factura:**
```bash
python test_invoice.py
```

Expected (fallback local):
```json
{
  "success": true,
  "csv": "0CE5F940CEA...",
  "estado": "Correcto (local)"
}
```

## Depuración

### Ver Logs

Ejecutar API desde terminal:
```bash
go run main.go
```

### Limpiar Datos

```bash
# Eliminar certificados
Remove-Item -Recurse ./data/certs/*

# Eliminar hashes
Remove-Item -Recurse ./data/*
```

## Certificados Personales

Para usar tu certificado:

1. Copiar a `data/certs/personal.p12`
2. Ejecutar `test_personal.py`
3. Contraseña se envía cifrada con RSA público de la API

## Simulación

`test/simulate.py` contiene herramientas de simulación para testing sin AEAT real.