EN · DE · RU · FR · ES

#1863: CardDavUtilsTest.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavUtilsTest.kt Unit-Test — Paket org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavUtilsTest.kt 50 Zeilen · 23 Code · 22 Kommentare · 5 leer
Testet URL-Manipulationshilfsfunktionen in CardDavUtils: Generierung von Principal-URLs, URI-Normalisierung (Entfernen von CardDAV-Präfixen) und Extraktion von Kontakt-IDs aus VCF- und Fotodateipfaden. Dies sind zentrale Routing-Helfer für die CardDAV-Serverimplementierung.

Architektur

CardDavUtils ist eine Hilfsklasse, die statische Helfermethoden für die CardDAV-Protokollimplementierung bereitstellt. Dieser Test deckt drei wichtige URL-/Pfadmanipulationsfunktionen ab, die für die CardDAV-Ressourcenadressierung wesentlich sind.

Importe

Getestete Methoden

1. getPrincipalsUsersUrl(uri, user)

Wandelt einen Ressourcen-URL-Pfad in die entsprechende Principal-URL um. In WebDAV/CardDAV hat jeder Benutzer eine Principal-Ressource, die seine Identität repräsentiert. Diese Methode bildet Benutzersammlungs-URLs auf Principal-URLs ab:

Die Methode entfernt URL-Suffixe (das ... repräsentiert nachfolgende Pfadsegmente) und schreibt users in principals/users/{username} um. Dies ist in RFC 3744 (WebDAV Access Control) und RFC 6352 (CardDAV) definiert.

2. normalizedUri(uri)

Entfernt das CardDAV-Präfix von URIs und normalisiert sie auf ihren Basis-Ressourcentyp:

Diese Methode wird intern vom CardDAV-Dispatcher verwendet, um zu bestimmen, welcher Handler eine Anfrage verarbeiten soll, nachdem der Filter entschieden hat, dass es sich um CardDAV-Datenverkehr handelt.

3. extractContactId(path)

Extrahiert die numerische ProjectForge-Kontakt-ID aus verschiedenen Dateipfadmustern:

Die Methode verwendet Regex-Abgleich auf die Muster ProjectForge-{id} und contact-{id}, sodass der Server CardDAV-Ressourcen-URLs zurück auf ProjectForge-Datenbank-IDs abbilden kann.

Konstruktionsmuster für Benutzerobjekte

Der Test verwendet das Kotlin-apply-Scope-Funktionsmuster: PFUserDO().also { it.username = "joe" }. Dies erzeugt ein teilweise initialisiertes PFUserDO mit nur gesetztem Benutzernamen – ausreichend für die URL-Generierungsmethoden, die nur die Benutzernamenseigenschaft benötigen.

Alle drei Methoden sind reine Funktionen (keine Seiteneffekte, keine externen Abhängigkeiten), was sie ideal für Unit-Tests ohne Mocks macht. Die einzige Abhängigkeit ist die PFUserDO-Entität, die direkt im Test konstruiert wird.

Git-Verlauf

868d6abb7 2025 -> 2026
63081666f Quellcodedatei-Header: 2024 -> 2025.
cc9abacea CardDav-Server: WIP: Bildverarbeitung.
c4062ed97 WIP: Carddav
40e554cbe WIP: Carddav