[pending-judge] fix(DC-167): CalDAV multistatus default-ns parsing (Radicale silent zero-events) + scope-aware fixture ns validation
extractCalendarsAndEvents required a namespace prefix on <response>; Radicale emits bare <response> (default DAV ns) so every entry was silently dropped — REPORT 200, ok:true, 0 events, no error. Prefix is now optional in the split and detection regexes. Tests: 9 in the ns suite (extraction incl. mixed doc; empty multistatus; namespace-aware fixture parse; undeclared element+attribute prefix rejection; both quote styles; positive declared-attr case). Calendar-related suites: 52. eslint clean.
This commit is contained in:
2 files changed
+196
-2
No files matched your search
@@ -77,8 +77,10 @@ function firstText(xml, localName) {
|
||||
/** Extract href + <calendar-data> ICS body pairs from a multistatus response. */
|
||||
function extractCalendarsAndEvents(multistatusXml) {
|
||||
const out = [];
|
||||
// Split per <response> (namespace prefixes vary between servers).
|
||||
const responses = multistatusXml.split(/<\/[\w-]+:response>/i).filter(s => /<[\w-]+:response[\s>]/i.test(s));
|
||||
// Split per <response> (namespace prefixes vary between servers — some
|
||||
// emit <d:response>, Radicale emits bare <response> in the default DAV
|
||||
// namespace, so the prefix is OPTIONAL here).
|
||||
const responses = multistatusXml.split(/<\/(?:[\w-]+:)?response>/i).filter(s => /<(?:[\w-]+:)?response[\s>]/i.test(s));
|
||||
for (const chunk of responses) {
|
||||
const hrefMatch = /<([\w-]+:)?href[^>]*>([^<]+)</i.exec(chunk);
|
||||
const calDataMatch = /<([\w-]+:)?calendar-data[^>]*>([\s\S]*?)<\/([\w-]+:)?calendar-data>/i.exec(chunk);
|
||||
|
||||
Reference in new issue
Block a user