EN · DE · RU · FR · ES

#1867: PropTest.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/PropTest.kt Test unitaire — package org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/PropTest.kt 71 lignes · 46 code · 22 commentaires · 3 vides
Teste Prop.extractProps() — l'analyseur XML qui extrait les noms de propriétés DAV demandées à partir des corps de requêtes PROPFIND et sync-collection. Vérifie que les éléments de propriété dans les blocs <prop> ou <d:prop> sont correctement identifiés, triés alphabétiquement et mappés à leurs valeurs d'énumération PropType.

Architecture

La classe Prop représente une propriété DAV unique demandée par un client. La méthode statique extractProps(xml: String): List<Prop> analyse les corps de requêtes XML WebDAV pour déterminer quelles propriétés le client souhaite récupérer.

Importations

Valeurs d'énumération PropType couvertes

PropTypeÉlément XMLObjectif DAV/CardDAV
CURRENT_USER_PRINCIPAL<current-user-principal />URL de la ressource principale de l'utilisateur authentifié (RFC 5397)
CURRENT_USER_PRIVILEGE_SET<current-user-privilege-set />Privilèges accordés à l'utilisateur actuel (RFC 3744)
DISPLAYNAME<displayname />Nom lisible de la ressource (RFC 4918)
RESOURCETYPE<resourcetype />Indique si la ressource est une collection (RFC 4918)
GETCTAG<cs:getctag />Balise de collection du serveur de calendrier pour la détection de changements (extension Apple)
GETETAG<d:getetag />Balise d'entité HTTP pour la ressource (RFC 4918)
SYNCTOKEN<sync-token />Jeton pour la synchronisation incrémentielle de collection (RFC 6578)

Scénarios de test

Scénario 1 : PROPFIND standard (espace de noms XML="DAV:")

L'entrée est un corps de requête PROPFIND utilisant un espace de noms XML par défaut (xmlns="DAV:") — les éléments sont sans préfixe. Le test vérifie :

Scénario 2 : Rapport sync-collection

L'entrée simule une requête de rapport sync-collection (partie de l'extension WebDAV Sync RFC 6578). Le XML utilise des préfixes d'espace de noms (d:, cs:). Le test vérifie :

Logique d'analyse (inférée)

La méthode extractProps doit :

  1. Trouver le bloc d'élément <prop> ou <d:prop> dans le XML
  2. Extraire les noms des éléments enfants, en supprimant les préfixes d'espace de noms
  3. Faire correspondre les noms d'éléments aux valeurs de l'énumération PropType
  4. Trier les résultats alphabétiquement par PropType
  5. Retourner une List<Prop>
Le tri alphabétique est important pour un comportement déterministe — les clients reçoivent les propriétés dans un ordre prévisible, indépendamment de l'ordre des éléments XML de la requête.

Le XML du scénario sync-collection est structurellement incorrect pour un PROPFIND (l'élément <prop> est nommé <d:prop> à l'intérieur d'un wrapper externe <propfind>), mais le test le gère correctement — démontrant la robustesse de l'analyseur face à différents types de requêtes DAV.

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes des fichiers sources : 2024 -> 2025.
5167dab99 WIP : Carddav
78a5132bf WIP : Carddav
caee35750 WIP : Carddav
2ad0cfe66 WIP : Carddav