EN · DE · RU · FR · ES

#1867: PropTest.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/PropTest.kt Модульный тест — пакет org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/PropTest.kt 71 строка · 46 кода · 22 комментария · 3 пустых
Тестирует Prop.extractProps() — XML-парсер, который извлекает запрошенные имена свойств DAV из тел запросов PROPFIND и sync-collection. Проверяет, что элементы свойств внутри блоков <prop> или <d:prop> корректно идентифицируются, сортируются по алфавиту и сопоставляются со значениями перечисления PropType.

Архитектура

Класс Prop представляет одно свойство DAV, запрошенное клиентом. Статический метод extractProps(xml: String): List<Prop> разбирает тела XML-запросов WebDAV, чтобы определить, какие свойства клиент хочет получить.

Импорты

Охваченные значения перечисления PropType

PropTypeXML-элементНазначение DAV/CardDAV
CURRENT_USER_PRINCIPAL<current-user-principal />URL основного ресурса аутентифицированного пользователя (RFC 5397)
CURRENT_USER_PRIVILEGE_SET<current-user-privilege-set />Привилегии, предоставленные текущему пользователю (RFC 3744)
DISPLAYNAME<displayname />Человекочитаемое имя ресурса (RFC 4918)
RESOURCETYPE<resourcetype />Является ли ресурс коллекцией (RFC 4918)
GETCTAG<cs:getctag />Тег коллекции календарного сервера для обнаружения изменений (расширение Apple)
GETETAG<d:getetag />HTTP-тег сущности для ресурса (RFC 4918)
SYNCTOKEN<sync-token />Токен для инкрементальной синхронизации коллекции (RFC 6578)

Сценарии тестирования

Сценарий 1: Стандартный PROPFIND (пространство имён XML="DAV:")

Входные данные — тело запроса PROPFIND с использованием пространства имён XML по умолчанию (xmlns="DAV:") — элементы без префиксов. Тест проверяет:

Сценарий 2: sync-collection REPORT

Входные данные имитируют запрос отчёта sync-collection (часть расширения WebDAV Sync RFC 6578). XML использует префиксы пространств имён (d:, cs:). Тест проверяет:

Логика парсинга (выводная)

Метод extractProps должен:

  1. Найти блок элемента <prop> или <d:prop> внутри XML
  2. Извлечь имена дочерних элементов, удаляя префиксы пространств имён
  3. Сопоставить имена элементов со значениями перечисления PropType
  4. Отсортировать результаты по алфавиту по PropType
  5. Вернуть List<Prop>
Сортировка по алфавиту важна для детерминированного поведения — клиенты получают свойства в предсказуемом порядке независимо от порядка элементов в XML-запросе.

XML сценария sync-collection структурно некорректен для PROPFIND (элемент <prop> назван <d:prop> внутри внешней обёртки <propfind>), но тест корректно его обрабатывает — демонстрируя устойчивость парсера к различным типам DAV-запросов.

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024-> 2025.
5167dab99 WIP: Carddav
78a5132bf WIP: Carddav
caee35750 WIP: Carddav
2ad0cfe66 WIP: Carddav