EN · DE · RU · FR · ES

#1867: PropTest.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/PropTest.kt Prueba unitaria — paquete org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/PropTest.kt 71 líneas · 46 código · 22 comentarios · 3 en blanco
Prueba Prop.extractProps() — el analizador XML que extrae los nombres de propiedades DAV solicitadas de los cuerpos de solicitud PROPFIND y sync-collection. Valida que los elementos de propiedad dentro de los bloques <prop> o <d:prop> se identifiquen correctamente, se ordenen alfabéticamente y se asignen a sus valores enum PropType.

Arquitectura

La clase Prop representa una única propiedad DAV solicitada por un cliente. El método estático extractProps(xml: String): List<Prop> analiza los cuerpos de solicitud XML de WebDAV para determinar qué propiedades desea recuperar el cliente.

Importaciones

Valores Enum de PropType Cubiertos

PropTypeElemento XMLPropósito DAV/CardDAV
CURRENT_USER_PRINCIPAL<current-user-principal />URL del recurso principal del usuario autenticado (RFC 5397)
CURRENT_USER_PRIVILEGE_SET<current-user-privilege-set />Privilegios otorgados al usuario actual (RFC 3744)
DISPLAYNAME<displayname />Nombre legible del recurso (RFC 4918)
RESOURCETYPE<resourcetype />Indica si el recurso es una colección (RFC 4918)
GETCTAG<cs:getctag />Etiqueta de colección del servidor de calendario para detección de cambios (extensión Apple)
GETETAG<d:getetag />Etiqueta de entidad HTTP para el recurso (RFC 4918)
SYNCTOKEN<sync-token />Token para sincronización incremental de colecciones (RFC 6578)

Escenarios de Prueba

Escenario 1: PROPFIND estándar (espacio de nombres XML="DAV:")

La entrada es un cuerpo de solicitud PROPFIND que utiliza un espacio de nombres XML predeterminado (xmlns="DAV:") — los elementos no tienen prefijo. La prueba verifica:

Escenario 2: Informe sync-collection

La entrada simula una solicitud de informe sync-collection (parte de la extensión WebDAV Sync RFC 6578). El XML utiliza prefijos de espacio de nombres (d:, cs:). La prueba verifica:

Lógica de Análisis (Inferida)

El método extractProps debe:

  1. Encontrar el bloque de elemento <prop> o <d:prop> dentro del XML
  2. Extraer los nombres de los elementos hijos, eliminando los prefijos de espacio de nombres
  3. Coincidir los nombres de los elementos con los valores enum de PropType
  4. Ordenar los resultados alfabéticamente por PropType
  5. Devolver una List<Prop>
La ordenación alfabética es importante para un comportamiento determinista: los clientes reciben las propiedades en un orden predecible independientemente del orden de los elementos XML de la solicitud.

El XML del escenario sync-collection es estructuralmente incorrecto para un PROPFIND (el elemento <prop> se llama <d:prop> dentro de un contenedor externo <propfind>), pero la prueba lo maneja correctamente, lo que demuestra la robustez del analizador en diferentes tipos de solicitudes DAV.

Historial Git

868d6abb7 2025 -> 2026
63081666f Encabezados de archivos fuente: 2024 -> 2025.
5167dab99 WIP: Carddav
78a5132bf WIP: Carddav
caee35750 WIP: Carddav
2ad0cfe66 WIP: Carddav