EN · DE · RU · FR · ES

#1866 : PropFindRequestHandlerTest.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/PropFindRequestHandlerTest.kt Test unitaire — package org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/PropFindRequestHandlerTest.kt 108 lignes · 83 lignes de code · 22 commentaires · 3 lignes vides
Teste PropFindRequestHandler.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.

Architecture

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.

Imports

Scénarios de test

Scénario 1 : RESOURCETYPE + DISPLAYNAME

Lorsqu'un client PROPFIND pour les propriétés resourcetype et displayname sur /carddav/users/kai/, le gestionnaire doit répondre avec :

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é.

Scénario 2 : CURRENT_USER_PRINCIPAL + PRIVILEGE_SET + PRINCIPAL_URL

Lorsqu'un client interroge les propriétés d'identité de l'utilisateur :

Graphe de dépendances

ClasseRôle
PropRepré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
RequestWrapperEncapsule HttpServletRequest, extrait l'URI de la requête pour la génération du href de réponse
WriterContextRegroupe le wrapper de requête, la réponse, l'utilisateur et les propriétés demandées — le contexte complet nécessaire au gestionnaire
PropFindRequestHandlerMéthode statique generatePropFindResponse(WriterContext): String — fonction pure générant une chaîne XML

Stratégie de simulation

Déclarations d'espaces de noms XML

Toutes 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é.

Le gestionnaire est une fonction pure (produit une chaîne XML à partir du contexte) — aucun effet de bord, aucun accès à la base de données. Cette conception le rend hautement testable et suit le modèle noyau fonctionnel / coquille impérative.

Historique Git

CommitCe qui a changé dans ce fichier
868d6abb7Année de copyright 2025→2026. Aucun changement logique.
63081666fAnnée de copyright 2024→2025. Aucun changement logique.
f86cfa20aSuppression 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.
139f9f316Ajout 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.
5167dab99Changement d'API majeur. (1) Prop.RESOURCETYPEProp(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é.
6c1daac93Introduction 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.
0d7a81f91Ajout 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.
b14376470cr:addressbookcard:addressbook. Préfixe d'espace de noms standardisé de l'obscur cr au conventionnel card.
744d238deCorrection de l'URI d'espace de noms. Préfixe xmlns crcard, correction de la chaîne d'URI d'espace de noms CardDAV.
c4062ed97Ajout 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é.
40e554cbeModification 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.
2ad0cfe66Création initiale. Test PROPFIND de base avec littéraux XML en ligne, simulations HTTP Mockito. Vérification des propriétés RESOURCETYPE + DISPLAYNAME.