PropFindRequestHandlerTest.ktPropFindRequestHandler.generatePropFindResponse() — el generador central de respuestas PROPFIND de WebDAV. Verifica respuestas XML multistatus correctas para dos escenarios: consultas de tipo de recurso/nombre mostrado y consultas de principal/privilegio. Utiliza mocks de Mockito para objetos servlet HTTP y una entidad PFUserDO real.
PropFindRequestHandler es el manejador del lado del servidor que responde a solicitudes CardDAV PROPFIND según RFC 4918 (WebDAV). PROPFIND es el mecanismo principal mediante el cual los clientes CardDAV descubren capacidades del servidor, tipos de recursos e información del principal del usuario.
Cuando un cliente solicita PROPFIND para las propiedades resourcetype y displayname en /carddav/users/kai/, el manejador debe responder con:
<d:collection /> (indicando que es un recurso de tipo colección/contenedor)kai (el nombre de usuario)La respuesta es un documento XML multistatus completo con declaraciones de espacio de nombres DAV, CardDAV, CalDAV y personalizado.
Cuando un cliente consulta propiedades de identidad de usuario:
<d:href>/carddav/principals/users/kai/</d:href>read, write, write-properties, write-content<d:href>/carddav/principals/users/kai/</d:href>| Clase | Rol |
|---|---|
Prop | Representa una única propiedad DAV solicitada con un valor enum PropType |
PropType | Enum de propiedades DAV conocidas: RESOURCETYPE, DISPLAYNAME, CURRENT_USER_PRINCIPAL, CURRENT_USER_PRIVILEGE_SET, PRINCIPAL_URL, GETETAG, GETCTAG, SYNCTOKEN |
RequestWrapper | Envuelve HttpServletRequest, extrae la URI de solicitud para generar el href de respuesta |
WriterContext | Agrupa el wrapper de solicitud, respuesta, usuario y propiedades solicitadas — el contexto completo que necesita el manejador |
PropFindRequestHandler | Método estático generatePropFindResponse(WriterContext): String — función pura que genera la cadena XML |
/carddav/users/kai/ como requestURIusername = "kai" — no necesita simulaciónTodas las respuestas incluyen estas declaraciones de espacios de nombres XML:
xmlns:d="DAV:" xmlns:card="urn:ietf:params:xml:ns:carddav" xmlns:cs="http://calendarserver.org/ns/" xmlns:me="http://me.com/_namespace/"
Estos corresponden a: núcleo DAV, CardDAV, extensiones de Apple CalendarServer y un espacio de nombres personalizado.
| Commit | Qué cambió en este archivo |
|---|---|
868d6abb7 | Año de copyright 2025→2026. Sin cambio de lógica. |
63081666f | Año de copyright 2024→2025. Sin cambio de lógica. |
f86cfa20a | Eliminado <card:addressbook/> del XML esperado. El tipo de recurso reporta solo <d:collection/> — ya no declara capacidad de libreta de direcciones CardDAV. Limpieza final después de que el elemento addressbook pasara por múltiples ciclos de agregar/eliminar. |
139f9f316 | Agregado <card:addressbook/> al tipo de recurso. Parte del soporte para foto/avatar — el elemento se agregó brevemente para anunciar capacidad CardDAV, luego se eliminó nuevamente en f86cfa20a. |
5167dab99 | Cambio mayor de API. (1) Prop.RESOURCETYPE→Prop(PropType.RESOURCETYPE): Prop pasó a basarse en constructor. (2) El nombre mostrado cambió de clave i18n "address.cardDAV..." al nombre de usuario real "kai". (3) <card:addressbook/> eliminado temporalmente. |
6c1daac93 | Introducido WriterContext. La firma de generatePropFindResponse() cambió de (request, user, props) a un único objeto de contexto. Se agregó mock de HttpServletResponse. Extensibilidad más limpia. |
0d7a81f91 | Agregado espacio de nombres xmlns:me. Se intercambió el orden de elementos: <collection/> antes que <addressbook/>. El elemento requerido por DAV ahora va primero. |
b14376470 | cr:addressbook→card:addressbook. Prefijo de espacio de nombres estandarizado de cr (poco claro) a card (convencional). |
744d238de | Corrección de URI de espacio de nombres. Prefijo xmlns cr→card, corregida la cadena URI del espacio de nombres CardDAV. |
c4062ed97 | Agregados prefijos de espacio de nombres XML. Elementos simples (<multistatus>) → calificados con espacio de nombres (<d:multistatus>). Coincide con la salida del manejador después de que comenzara a emitir XML calificado. |
40e554cbe | Cambiada URI de prueba de /carddav genérico a /carddav/users/kai/ específico de usuario. Coincide con la estructura real de URL por usuario. |
2ad0cfe66 | Creación inicial. Prueba PROPFIND básica con literales XML en línea, mocks HTTP de Mockito. Verificadas propiedades RESOURCETYPE + DISPLAYNAME. |