Cosmetic only — replace fully-qualified java.util.Optional/Arrays references with imports. No behavior change. Recompiled and retested against the real Visma API using the updated kumare-adapter-spring-visma-time jar; all 7 endpoints still return 200 with the expected data. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
time-server-test-adapter
Test harness mínimo para probar el adapter kumare-adapter-spring-visma-time vía REST, sin base de datos.
Qué hace
Expone 7 endpoints que son passthroughs directos al API de VismaTime (GeoVictoria), usados para ejercitar el adapter durante desarrollo:
| Método | Path | Acción |
|---|---|---|
| GET | /time/api/clientele/clients/employee |
Lista empleados |
| POST | /time/api/clientele/clients/punch/list |
Lista marcaciones |
| POST | /time/api/clientele/clients/punch/page |
Lista marcaciones (paginado) |
| POST | /time/api/clientele/clients/punch/add |
Agrega una marcación |
| POST | /time/api/clientele/clients/punch/delete |
Borra una marcación |
| POST | /time/api/clientele/clients/punch/multiple |
Agrega varias marcaciones |
| POST | /time/api/clientele/clients/attendance/book |
Libro de asistencia (rango de fechas + usuarios) |
La colección Postman está en postman/visma-time.postman_collection.json.
Una traza de ejemplo (credenciales/tokens redactados) está en traces/visma-endpoints-trace.log.
Correr
mvn spring-boot:run
Clase main: io.kumare.iqr.TimeApplication.
No requiere Postgres ni ninguna otra base de datos — el autoconfig de JPA/DataSource está
excluido explícitamente en TimeApplication porque kumare-base-server-spring trae
spring-boot-starter-data-jpa transitivamente aunque no haya entidades locales.
Credenciales de Visma (visma.server, visma.user, visma.password) en
src/main/resources/application.properties, sobreescribibles con las variables de entorno
VISMA_SERVER, VISMA_USER, VISMA_PASSWORD.
Trazas
Con logging.level.io.kumare=DEBUG (ya configurado) se ven en el log:
- Cada request entrante y su respuesta (
RequestTraceInterceptor): método, path, status, duración. - Cada llamada saliente al API de Visma (
LoggingInterceptorde kumare-base-server-spring): URL, headers (sanitizados), body, status, duración.
Estructura
Este proyecto se clonó de otra app IQR y se recortó a lo mínimo: solo queda el módulo visma
(io.kumare.iqr.mod.visma, antes clientele) con las acciones y endpoints de VismaTime, más
el framework base (io.kumare.iqr.app.*). Los módulos de negocio originales (authentication,
biz, loyalty, pocket, taxonomy) y el CRUD local de Client/ClientRelation se eliminaron por no
tener relación con probar el adapter.
io.kumare.iqr.mod.visma/
VismaConstants.java, VismaModule.java, VismaController.java
action/ — GvTime, PunchType, y las 7 acciones Visma*Action/Argument
endpoint/rest/ — AbstractVismaRest, VismaRest
Nota: los paths REST (/clientele/clients/...) se dejaron igual — solo se renombraron las
clases y el paquete Java — para no romper la colección Postman ni la traza ya compartidas.