EN · DE · RU · FR · ES

#1863: CardDavUtilsTest.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavUtilsTest.kt Модульный тест — пакет org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavUtilsTest.kt 50 строк · 23 кода · 22 комментария · 5 пустых
Тестирует утилиты манипуляции URL в CardDavUtils: генерацию principal URL, нормализацию URI (удаление префиксов CardDAV) и извлечение ID контакта из путей к VCF и фотофайлам. Это основные вспомогательные функции маршрутизации для реализации CardDAV-сервера.

Архитектура

CardDavUtils — это утилитный класс, предоставляющий статические вспомогательные методы для реализации протокола CardDAV. Данный тест покрывает три ключевые функции манипуляции URL/путями, необходимые для адресации ресурсов CardDAV.

Импорты

Тестируемые методы

1. getPrincipalsUsersUrl(uri, user)

Преобразует путь URL ресурса в соответствующий principal URL. В WebDAV/CardDAV каждый пользователь имеет principal ресурс, представляющий его личность. Этот метод сопоставляет URL коллекций пользователей с principal URL:

Метод удаляет суффиксы URL (символы ... обозначают конечные сегменты пути) и перезаписывает users на principals/users/{username}. Это определено в RFC 3744 (Управление доступом WebDAV) и RFC 6352 (CardDAV).

2. normalizedUri(uri)

Удаляет префикс CardDAV из URI, нормализуя их до базового типа ресурса:

Этот метод используется внутри диспетчера CardDAV для определения того, какой обработчик должен обработать запрос после того, как фильтр определит его как CardDAV-трафик.

3. extractContactId(path)

Извлекает числовой ID контакта ProjectForge из различных шаблонов путей к файлам:

Метод использует регулярные выражения для сопоставления с шаблонами ProjectForge-{id} и contact-{id}, что позволяет серверу сопоставлять URL ресурсов CardDAV с ID базы данных ProjectForge.

Шаблон создания объекта пользователя

В тесте используется функция области видимости Kotlin apply: PFUserDO().also { it.username = "joe" }. Это создает частично инициализированный PFUserDO только с установленным именем пользователя — достаточно для методов генерации URL, которым требуется только свойство username.

Все три метода являются чистыми функциями (без побочных эффектов, без внешних зависимостей), что делает их идеальными для модульного тестирования без макетов. Единственная зависимость — это сущность PFUserDO, которая создается непосредственно в тесте.

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024 -> 2025.
cc9abacea CardDav-сервер: WIP: обработка изображений.
c4062ed97 WIP: Carddav
40e554cbe WIP: Carddav