EN · DE · RU · FR · ES

#1867: PropTest.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/PropTest.kt Unit-Test — Paket org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/PropTest.kt 71 Zeilen · 46 Code · 22 Kommentare · 3 leer
Testet Prop.extractProps() — den XML-Parser, der angeforderte DAV-Eigenschaftsnamen aus PROPFIND- und sync-collection-Anforderungstexten extrahiert. Validiert, dass Eigenschaftselemente innerhalb von <prop>- oder <d:prop>-Blöcken korrekt identifiziert, alphabetisch sortiert und ihren PropType-Enum-Werten zugeordnet werden.

Architektur

Die Klasse Prop repräsentiert eine einzelne DAV-Eigenschaft, die von einem Client angefordert wurde. Die statische Methode extractProps(xml: String): List<Prop> parst WebDAV-XML-Anforderungstexte, um zu ermitteln, welche Eigenschaften der Client abrufen möchte.

Importe

Abgedeckte PropType-Enum-Werte

PropTypeXML-ElementDAV/CardDAV-Zweck
CURRENT_USER_PRINCIPAL<current-user-principal />URL der Principal-Ressource des authentifizierten Benutzers (RFC 5397)
CURRENT_USER_PRIVILEGE_SET<current-user-privilege-set />Dem aktuellen Benutzer gewährte Berechtigungen (RFC 3744)
DISPLAYNAME<displayname />Lesbarer Name der Ressource (RFC 4918)
RESOURCETYPE<resourcetype />Gibt an, ob die Ressource eine Sammlung ist (RFC 4918)
GETCTAG<cs:getctag />Calendar-Server-Sammlungs-Tag zur Erkennung von Änderungen (Apple-Erweiterung)
GETETAG<d:getetag />HTTP-Entity-Tag für die Ressource (RFC 4918)
SYNCTOKEN<sync-token />Token für die inkrementelle Sammlungssynchronisation (RFC 6578)

Testszenarien

Szenario 1: Standard PROPFIND (XML-Namespace="DAV:")

Die Eingabe ist ein PROPFIND-Anforderungstext mit einem Standard-XML-Namespace (xmlns="DAV:") — Elemente sind ohne Präfix. Der Test überprüft:

Szenario 2: sync-collection REPORT

Die Eingabe simuliert eine sync-collection REPORT-Anforderung (Teil der RFC 6578 WebDAV-Sync-Erweiterung). Das XML verwendet Namespace-Präfixe (d:, cs:). Der Test überprüft:

Parsing-Logik (abgeleitet)

Die Methode extractProps muss:

  1. Den <prop>- oder <d:prop>-Elementblock innerhalb des XML finden
  2. Namen der Kindelemente extrahieren, dabei Namespace-Präfixe entfernen
  3. Elementnamen den PropType-Enum-Werten zuordnen
  4. Ergebnisse alphabetisch nach PropType sortieren
  5. Eine List<Prop> zurückgeben
Die alphabetische Sortierung ist wichtig für deterministisches Verhalten — Clients erhalten Eigenschaften in einer vorhersagbaren Reihenfolge, unabhängig von der Reihenfolge der XML-Elemente in der Anforderung.

Das XML des sync-collection-Szenarios ist strukturell für einen PROPFIND nicht korrekt (das <prop>-Element heißt <d:prop> innerhalb eines äußeren <propfind>-Wrappers), aber der Test behandelt es korrekt — was die Robustheit des Parsers über verschiedene DAV-Anforderungstypen hinweg demonstriert.

Git-Verlauf

868d6abb7 2025 -> 2026
63081666f Quelldatei-Header: 2024 -> 2025.
5167dab99 WIP: Carddav
78a5132bf WIP: Carddav
caee35750 WIP: Carddav
2ad0cfe66 WIP: Carddav