PropFindRequestHandlerTest.ktPropFindRequestHandler.generatePropFindResponse() — le générateur central de réponses PROPFIND WebDAV. Vérifie les réponses XML multistatus correctes pour deux scénarios : les requêtes de type de ressource / nom d'affichage et les requêtes de principal / privilège. Utilise des mocks Mockito pour les objets servlet HTTP et une entité PFUserDO réelle.
PropFindRequestHandler est le gestionnaire côté serveur qui répond aux requêtes PROPFIND CardDAV conformément à la RFC 4918 (WebDAV). PROPFIND est le mécanisme principal par lequel les clients CardDAV découvrent les capacités du serveur, les types de ressources et les informations sur le principal utilisateur.
Lorsqu'un client PROPFIND pour les propriétés resourcetype et displayname sur /carddav/users/kai/, le gestionnaire doit répondre avec :
<d:collection /> (indiquant qu'il s'agit d'une ressource de type collection/conteneur)kai (le nom d'utilisateur)
La réponse est un document XML multistatus complet avec les déclarations d'espaces de noms DAV, CardDAV, CalDAV et un espace de noms personnalisé.
Lorsqu'un client interroge les propriétés d'identité de l'utilisateur :
<d:href>/carddav/principals/users/kai/</d:href>read, write, write-properties, write-content<d:href>/carddav/principals/users/kai/</d:href>| Classe | Rôle |
|---|---|
Prop | Représente une propriété DAV unique demandée avec une valeur d'énumération PropType |
PropType | Énumération des propriétés DAV connues : RESOURCETYPE, DISPLAYNAME, CURRENT_USER_PRINCIPAL, CURRENT_USER_PRIVILEGE_SET, PRINCIPAL_URL, GETETAG, GETCTAG, SYNCTOKEN |
RequestWrapper | Encapsule HttpServletRequest, extrait l'URI de la requête pour la génération du href de réponse |
WriterContext | Regroupe le wrapper de requête, la réponse, l'utilisateur et les propriétés demandées — le contexte complet nécessaire au gestionnaire |
PropFindRequestHandler | Méthode statique generatePropFindResponse(WriterContext): String — fonction pure générant une chaîne XML |
/carddav/users/kai/ comme requestURIusername = "kai" — aucune simulation nécessaireToutes les réponses incluent ces déclarations d'espaces de noms XML :
xmlns:d="DAV:" xmlns:card="urn:ietf:params:xml:ns:carddav" xmlns:cs="http://calendarserver.org/ns/" xmlns:me="http://me.com/_namespace/"
Ceux-ci correspondent à : le noyau DAV, CardDAV, les extensions Apple CalendarServer et un espace de noms personnalisé.
| Commit | Ce qui a changé dans ce fichier |
|---|---|
868d6abb7 | Année de copyright 2025→2026. Aucun changement logique. |
63081666f | Année de copyright 2024→2025. Aucun changement logique. |
f86cfa20a | Suppression de <card:addressbook/> du XML attendu. Le type de ressource signale uniquement <d:collection/> — ne revendique plus la capacité de carnet d'adresses CardDAV. Nettoyage final après que l'élément addressbook ait traversé plusieurs cycles d'ajout/suppression. |
139f9f316 | Ajout de <card:addressbook/> au type de ressource. Partie du support photo/avatar — l'élément a été brièvement ajouté pour annoncer la capacité CardDAV, puis supprimé à nouveau dans f86cfa20a. |
5167dab99 | Changement d'API majeur. (1) Prop.RESOURCETYPE→Prop(PropType.RESOURCETYPE) : Prop est devenu basé sur un constructeur. (2) Le nom d'affichage est passé de la clé i18n "address.cardDAV..." au nom d'utilisateur réel "kai". (3) <card:addressbook/> temporairement supprimé. |
6c1daac93 | Introduction de WriterContext. La signature de generatePropFindResponse() est passée de (request, user, props) à un seul objet contexte. Ajout de la simulation HttpServletResponse. Extensibilité plus propre. |
0d7a81f91 | Ajout de l'espace de noms xmlns:me. Ordre des éléments échangé : <collection/> avant <addressbook/>. L'élément requis par DAV vient maintenant en premier. |
b14376470 | cr:addressbook→card:addressbook. Préfixe d'espace de noms standardisé de l'obscur cr au conventionnel card. |
744d238de | Correction de l'URI d'espace de noms. Préfixe xmlns cr→card, correction de la chaîne d'URI d'espace de noms CardDAV. |
c4062ed97 | Ajout de préfixes d'espace de noms XML. Éléments nus (<multistatus>) → qualifiés par espace de noms (<d:multistatus>). Correspond à la sortie du gestionnaire après qu'il a commencé à émettre du XML qualifié. |
40e554cbe | Modification de l'URI de test de générique /carddav à spécifique utilisateur /carddav/users/kai/. Correspond à la structure d'URL réelle par utilisateur. |
2ad0cfe66 | Création initiale. Test PROPFIND de base avec littéraux XML en ligne, simulations HTTP Mockito. Vérification des propriétés RESOURCETYPE + DISPLAYNAME. |