EN · DE · RU · FR · ES

#1861: CardDavFilterTest.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavFilterTest.kt Модульный тест — пакет org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavFilterTest.kt 79 строк · 43 кода · 24 комментария · 12 пустых
Модульный тест, проверяющий, что статический метод CardDavFilter.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, /principalstrueOPTIONS — это CORS preflight / проверка возможностей DAV — все известные пути CardDAV отвечают
PROPFIND/carddav, /carddav/users/kai, /users/kai, /carddav/users/, /users, /carddav/principals/, /principalstruePROPFIND — метод WebDAV для получения свойств; перехватывается на всех URL пользователей и принципалов
OPTIONS/.well-known/carddavtrueОбнаружение well-known URI согласно RFC 6764 для определения местоположения службы CardDAV
GET/.well-known/carddavtrueGET на well-known URI возвращает информацию об обнаружении службы
GET/principalsfalseGET списка принципалов без заголовков DAV не является CardDAV
GET/carddavtrueGET на базовый путь carddav
GET/carddav/users/joe/addressbooks/ProjectForge-123.vcftrueСкачивание VCF с шаблоном ID через дефис "ProjectForge-123"
GET/users/joe/addressbooks/ProjectForge-123.vcftrueТо же без префикса /carddav
GET/users/joe/addressbooks/ProjectForge123.vcffalseОтсутствует разделитель-дефис — не распознаётся как идентификатор ProjectForge
GET/users/joe/address/ProjectForge-123.vcffalseНеверный сегмент пути "address" вместо "addressbooks"

Стратегия мокирования

Используется Mockito.mock(HttpServletRequest::class.java) для создания mock-объектов сервлетных запросов. Затем Mockito.when(request.method).thenReturn(method) и Mockito.when(request.requestURI).thenReturn(requestUri) настраивают тестовое окружение. Реальный HTTP-сервер не задействован — чистое модульное тестирование функции маршрутизации.

Тест покрывает как положительные случаи (true для валидных запросов CardDAV), так и отрицательные (false для не-CardDAV запросов), включая граничные случаи: отсутствие дефиса в именах VCF-файлов и неверные сегменты пути.

История Git

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