PropFindRequestHandlerTest.ktPropFindRequestHandler.generatePropFindResponse() — den zentralen WebDAV-PROPFIND-Antwortgenerator. Überprüft korrekte XML-multistatus-Antworten für zwei Szenarien: Ressourcentyp/Anzeigename-Abfragen und Principal/Privileg-Abfragen. Verwendet Mockito-Mocks für HTTP-Servlet-Objekte und eine echte PFUserDO-Entität.PropFindRequestHandler ist der serverseitige Handler, der auf CardDAV-PROPFIND-Anfragen gemäß RFC 4918 (WebDAV) antwortet. PROPFIND ist der primäre Mechanismus, mit dem CardDAV-Clients Serverfähigkeiten, Ressourcentypen und Benutzer-Prinzipal-Informationen ermitteln.
Wenn ein Client PROPFIND für die Eigenschaften resourcetype und displayname unter /carddav/users/kai/ durchführt, muss der Handler antworten mit:
<d:collection /> (zeigt an, dass es sich um eine Sammlungs-/Container-Ressource handelt)kai (der Benutzername)Die Antwort ist ein vollständiges XML-multistatus-Dokument mit DAV-, CardDAV-, CalDAV- und benutzerdefinierten Namespace-Deklarationen.
Wenn ein Client Benutzeridentitätseigenschaften abfragt:
<d:href>/carddav/principals/users/kai/</d:href>read, write, write-properties, write-content<d:href>/carddav/principals/users/kai/</d:href>| Klasse | Rolle |
|---|---|
Prop | Repräsentiert eine einzelne angeforderte DAV-Eigenschaft mit einem PropType-Enum-Wert |
PropType | Enum der bekannten DAV-Eigenschaften: RESOURCETYPE, DISPLAYNAME, CURRENT_USER_PRINCIPAL, CURRENT_USER_PRIVILEGE_SET, PRINCIPAL_URL, GETETAG, GETCTAG, SYNCTOKEN |
RequestWrapper | Umschließt HttpServletRequest, extrahiert die Anfrage-URI zur Generierung der Antwort-Href |
WriterContext | Bündelt Request-Wrapper, Antwort, Benutzer und angeforderte Eigenschaften — den vollständigen Kontext, den der Handler benötigt |
PropFindRequestHandler | Statische Methode generatePropFindResponse(WriterContext): String — reine Funktion, die einen XML-String erzeugt |
/carddav/users/kai/ als requestURI zurückzugebenusername = "kai" — kein Mocking erforderlichAlle Antworten enthalten diese XML-Namespace-Deklarationen:
xmlns:d="DAV:" xmlns:card="urn:ietf:params:xml:ns:carddav" xmlns:cs="http://calendarserver.org/ns/" xmlns:me="http://me.com/_namespace/"
Diese entsprechen: DAV-Kern, CardDAV, Apple CalendarServer-Erweiterungen und einem benutzerdefinierten Namespace.
| Commit | Was hat sich in dieser Datei geändert |
|---|---|
868d6abb7 | Copyright-Jahr 2025→2026. Keine Logikänderung. |
63081666f | Copyright-Jahr 2024→2025. Keine Logikänderung. |
f86cfa20a | <card:addressbook/> entfernt aus dem erwarteten XML. Der Ressourcentyp meldet nur <d:collection/> — beansprucht keine CardDAV-Adressbuchfähigkeit mehr. Endgültige Bereinigung, nachdem das addressbook-Element mehrere Hinzufügungs-/Entfernungszyklen durchlaufen hatte. |
139f9f316 | <card:addressbook/> hinzugefügt zum Ressourcentyp. Teil der Foto/Avatar-Unterstützung — das Element wurde kurzzeitig hinzugefügt, um CardDAV-Fähigkeit zu bewerben, dann in f86cfa20a wieder entfernt. |
5167dab99 | Große API-Änderung. (1) Prop.RESOURCETYPE→Prop(PropType.RESOURCETYPE): Prop wurde konstruktorbasiert. (2) Anzeigename geändert von i18n-Schlüssel "address.cardDAV..." zum tatsächlichen Benutzernamen "kai". (3) <card:addressbook/> vorübergehend entfernt. |
6c1daac93 | WriterContext eingeführt. Signatur von generatePropFindResponse() geändert von (request, user, props) zu einem einzelnen Kontextobjekt. HttpServletResponse-Mock hinzugefügt. Sauberere Erweiterbarkeit. |
0d7a81f91 | xmlns:me-Namespace hinzugefügt. Elementreihenfolge getauscht: <collection/> vor <addressbook/>. DAV-erforderliches Element kommt jetzt zuerst. |
b14376470 | cr:addressbook→card:addressbook. Namespace-Präfix von obskurem cr zu konventionellem card standardisiert. |
744d238de | Namespace-URI-Korrektur. xmlns-Präfix cr→card, korrigierte die CardDAV-Namespace-URI-Zeichenfolge. |
c4062ed97 | XML-Namespace-Präfixe hinzugefügt. Bloße Elemente (<multistatus>) → namespace-qualifiziert (<d:multistatus>). Entspricht der Handler-Ausgabe, nachdem dieser qualifiziertes XML ausgab. |
40e554cbe | Test-URI geändert von generischem /carddav zu benutzerspezifischem /carddav/users/kai/. Entspricht der tatsächlichen Pro-Benutzer-URL-Struktur. |
2ad0cfe66 | Ersterstellung. Grundlegender PROPFIND-Test mit Inline-XML-Literalen, Mockito-HTTP-Mocks. Überprüft RESOURCETYPE + DISPLAYNAME-Eigenschaften. |