EN · DE · RU · FR · ES

#1861: CardDavFilterTest.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavFilterTest.kt Unit-Test — Paket org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavFilterTest.kt 79 Zeilen · 43 Code · 24 Kommentare · 12 leer
Unit-Test, der überprüft, ob die statische Methode CardDavFilter.handledByCardDavFilter() HTTP-Anfragen basierend auf HTTP-Methode und Anfrage-URI-Mustern korrekt an das CardDAV-Servlet weiterleitet. Stellt sicher, dass nur CardDAV-relevante Anfragen (OPTIONS, PROPFIND, REPORT, GET auf bekannten Pfaden) vom Filter abgefangen werden, während nicht verwandte Anfragen durchgelassen werden.

Architektur

Dieser Test validiert die CardDAV-Anfrageweiterleitungslogik in CardDavFilter. Das System verwendet ein Servlet-Filter-Muster – HTTP-Anfragen treffen beim Anwendungsserver ein und der Filter entscheidet, ob sie an den CardDAV-Handler weitergeleitet oder durch die normale Anfragepipeline laufen gelassen werden.

Importe und Abhängigkeiten

Testdesign

Der Test verwendet ein parametrisiertes Helfermethoden-Muster: checkRequest(methode, requestUri, erwartet, msg?) erstellt einen gemockten HttpServletRequest über Mockito, stubt requestURI und method und prüft dann, ob der Rückgabewert von CardDavFilter.handledByCardDavFilter(request) dem erwartet-Wert entspricht.

Testabdeckung – Anfrageweiterleitungsmatrix

HTTP-MethodeURI-MusterErwartetBegründung
OPTIONS/carddav, /carddav/users/kai, /users/kai, /users, /principalstrueOPTIONS ist ein CORS-Preflight-/DAV-Fähigkeitscheck – alle bekannten CardDAV-Pfade antworten
PROPFIND/carddav, /carddav/users/kai, /users/kai, /carddav/users/, /users, /carddav/principals/, /principalstruePROPFIND ist die WebDAV-Eigenschaftsabrufmethode; wird auf allen Benutzer- und Principal-URLs abgefangen
OPTIONS/.well-known/carddavtrueWell-Known-URI-Discovery gemäß RFC 6764 für die CardDAV-Dienstortbestimmung
GET/.well-known/carddavtrueGET auf der Well-Known-URI gibt Dienstdiscovery-Informationen zurück
GET/principalsfalseGET-Principal-Auflistung ohne DAV-Header ist kein CardDAV
GET/carddavtrueGET auf dem Basis-Carddav-Pfad
GET/carddav/users/joe/addressbooks/ProjectForge-123.vcftrueVCF-Download mit Bindestrich-getrenntem ID-Muster "ProjectForge-123"
GET/users/joe/addressbooks/ProjectForge-123.vcftrueGleiches Muster ohne /carddav-Präfix
GET/users/joe/addressbooks/ProjectForge123.vcffalseFehlender Bindestrich-Trenner – wird nicht als ProjectForge-Identifikator erkannt
GET/users/joe/address/ProjectForge-123.vcffalseFalsches Pfadsegment "address" anstelle von "addressbooks"

Mocking-Strategie

Verwendet Mockito.mock(HttpServletRequest::class.java), um gemockte Servlet-Anfragen zu erstellen. Anschließend werden mit Mockito.when(request.method).thenReturn(methode) und Mockito.when(request.requestURI).thenReturn(requestUri) die Testdaten eingerichtet. Es ist kein echter HTTP-Server beteiligt – reiner Unit-Test der Weiterleitungsfunktion.

Der Test deckt sowohl positive Fälle (true-Rückgaben für gültige CardDAV-Anfragen) als auch negative Fälle (false-Rückgaben für Nicht-CardDAV-Anfragen) ab, einschließlich Randfällen wie fehlenden Bindestrich-Trennern in VCF-Dateinamen und falschen Pfadsegmenten.

Git-Verlauf

868d6abb7 2025 -> 2026
63081666f Quellcode-Dateiköpfe: 2024 -> 2025.
fc6301b43 WIP: CardDavServer.
6c1daac93 WIP: Carddav
78a5132bf WIP: Carddav
c4062ed97 WIP: Carddav
40e554cbe WIP: Carddav
ad8b47d1f WIP: CardDavWIP: CardDav