CardDavFilterTest.ktCardDavFilter.handledByCardDavFilter() корректно направляет HTTP-запросы к сервлету CardDAV на основе HTTP-метода и шаблонов URI запроса. Гарантирует, что только релевантные для CardDAV запросы (OPTIONS, PROPFIND, REPORT, GET по известным путям) перехватываются фильтром, в то время как посторонние запросы проходят дальше.
Данный тест проверяет логику маршрутизации запросов CardDAV в CardDavFilter. Система использует шаблон сервлетного фильтра — HTTP-запросы поступают на сервер приложений, и фильтр решает, перенаправить их обработчику CardDAV или пропустить через обычный конвейер запросов.
В тесте применяется шаблон параметризованного вспомогательного метода: checkRequest(method, requestUri, expected, msg?) создаёт mock-объект HttpServletRequest через Mockito, подставляет requestURI и method, затем проверяет, что возвращаемое значение CardDavFilter.handledByCardDavFilter(request) соответствует expected.
| HTTP-метод | Шаблон URI | Ожидаемый результат | Обоснование |
|---|---|---|---|
| OPTIONS | /carddav, /carddav/users/kai, /users/kai, /users, /principals | true | OPTIONS — это CORS preflight / проверка возможностей DAV — все известные пути CardDAV отвечают |
| PROPFIND | /carddav, /carddav/users/kai, /users/kai, /carddav/users/, /users, /carddav/principals/, /principals | true | PROPFIND — метод WebDAV для получения свойств; перехватывается на всех URL пользователей и принципалов |
| OPTIONS | /.well-known/carddav | true | Обнаружение well-known URI согласно RFC 6764 для определения местоположения службы CardDAV |
| GET | /.well-known/carddav | true | GET на well-known URI возвращает информацию об обнаружении службы |
| GET | /principals | false | GET списка принципалов без заголовков DAV не является CardDAV |
| GET | /carddav | true | GET на базовый путь carddav |
| GET | /carddav/users/joe/addressbooks/ProjectForge-123.vcf | true | Скачивание VCF с шаблоном ID через дефис "ProjectForge-123" |
| GET | /users/joe/addressbooks/ProjectForge-123.vcf | true | То же без префикса /carddav |
| GET | /users/joe/addressbooks/ProjectForge123.vcf | false | Отсутствует разделитель-дефис — не распознаётся как идентификатор ProjectForge |
| GET | /users/joe/address/ProjectForge-123.vcf | false | Неверный сегмент пути "address" вместо "addressbooks" |
Используется Mockito.mock(HttpServletRequest::class.java) для создания mock-объектов сервлетных запросов. Затем Mockito.when(request.method).thenReturn(method) и Mockito.when(request.requestURI).thenReturn(requestUri) настраивают тестовое окружение. Реальный HTTP-сервер не задействован — чистое модульное тестирование функции маршрутизации.
868d6abb7 2025 -> 2026 63081666f Заголовки исходных файлов: 2024-> 2025. fc6301b43 WIP: CardDavServer. 6c1daac93 WIP: Carddav 78a5132bf WIP: Carddav c4062ed97 WIP: Carddav 40e554cbe WIP: Carddav ad8b47d1f WIP: CardDavWIP: CardDav