PropFindRequestHandlerTest.ktPropFindRequestHandler.generatePropFindResponse() — основной генератор ответов WebDAV PROPFIND. Проверяет корректные XML-ответы multistatus для двух сценариев: запросы типа ресурса/отображаемого имени и запросы участника/привилегий. Использует моки Mockito для HTTP-сервлетных объектов и реальную сущность PFUserDO.PropFindRequestHandler — это серверный обработчик, отвечающий на запросы CardDAV PROPFIND в соответствии с RFC 4918 (WebDAV). PROPFIND — основной механизм, с помощью которого CardDAV-клиенты обнаруживают возможности сервера, типы ресурсов и информацию об участнике.
Когда клиент отправляет PROPFIND для свойств resourcetype и displayname на /carddav/users/kai/, обработчик должен ответить:
<d:collection /> (указывает, что это ресурс-коллекция/контейнер)kai (имя пользователя)Ответ представляет собой полный XML-документ multistatus с объявлениями пространств имён DAV, CardDAV, CalDAV и пользовательского.
Когда клиент запрашивает свойства идентификации пользователя:
<d:href>/carddav/principals/users/kai/</d:href>read, write, write-properties, write-content<d:href>/carddav/principals/users/kai/</d:href>| Класс | Роль |
|---|---|
Prop | Представляет одно запрошенное свойство DAV со значением перечисления PropType |
PropType | Перечисление известных свойств DAV: RESOURCETYPE, DISPLAYNAME, CURRENT_USER_PRINCIPAL, CURRENT_USER_PRIVILEGE_SET, PRINCIPAL_URL, GETETAG, GETCTAG, SYNCTOKEN |
RequestWrapper | Оборачивает HttpServletRequest, извлекает URI запроса для генерации href в ответе |
WriterContext | Объединяет обёртку запроса, ответ, пользователя и запрошенные свойства — полный контекст, необходимый обработчику |
PropFindRequestHandler | Статический метод generatePropFindResponse(WriterContext): String — чистая функция, генерирующая XML-строку |
/carddav/users/kai/ в качестве requestURIusername = "kai" — мокирование не требуетсяВсе ответы включают следующие объявления пространств имён XML:
xmlns:d="DAV:" xmlns:card="urn:ietf:params:xml:ns:carddav" xmlns:cs="http://calendarserver.org/ns/" xmlns:me="http://me.com/_namespace/"
Они соответствуют: ядру DAV, CardDAV, расширениям Apple CalendarServer и пользовательскому пространству имён.
| Коммит | Что изменилось в этом файле |
|---|---|
868d6abb7 | Год авторского права 2025→2026. Без изменения логики. |
63081666f | Год авторского права 2024→2025. Без изменения логики. |
f86cfa20a | Удалён <card:addressbook/> из ожидаемого XML. Тип ресурса сообщает только <d:collection/> — больше не заявляет о поддержке адресной книги CardDAV. Финальная очистка после нескольких циклов добавления/удаления элемента addressbook. |
139f9f316 | Добавлен <card:addressbook/> в тип ресурса. Часть поддержки фото/аватаров — элемент был ненадолго добавлен для анонсирования возможностей CardDAV, затем снова удалён в f86cfa20a. |
5167dab99 | Крупное изменение API. (1) Prop.RESOURCETYPE→Prop(PropType.RESOURCETYPE): Prop стал конструкторным. (2) Отображаемое имя изменено с i18n-ключа "address.cardDAV..." на фактическое имя пользователя "kai". (3) <card:addressbook/> временно удалён. |
6c1daac93 | Введён WriterContext. Сигнатура generatePropFindResponse() изменена с (request, user, props) на один объект контекста. Добавлен мок HttpServletResponse. Более чистая расширяемость. |
0d7a81f91 | Добавлено пространство имён xmlns:me. Изменён порядок элементов: <collection/> перед <addressbook/>. Требуемый DAV элемент теперь идёт первым. |
b14376470 | cr:addressbook→card:addressbook. Префикс пространства имён стандартизирован с неясного cr на общепринятый card. |
744d238de | Исправление URI пространства имён. Префикс xmlns cr→card, исправлена строка URI пространства имён CardDAV. |
c4062ed97 | Добавлены префиксы пространств имён XML. Голые элементы (<multistatus>) → с квалификацией пространства имён (<d:multistatus>). Согласовано с выводом обработчика после того, как он начал генерировать квалифицированный XML. |
40e554cbe | Изменён тестовый URI с общего /carddav на пользовательский /carddav/users/kai/. Согласовано с фактической структурой URL для каждого пользователя. |
2ad0cfe66 | Первоначальное создание. Базовый тест PROPFIND с встроенными XML-литералами, моками HTTP Mockito. Проверены свойства RESOURCETYPE + DISPLAYNAME. |