Commit 4398935
Add Stalwart CalDAV compatibility hints and fix expansion assertions
Stalwart has several non-RFC-conformant behaviours uncovered during
integration testing:
* VALUE=DATE (all-day) recurring events are not returned by time-range
searches even though datetime recurring events are. Marked as
search.recurrences.includes-implicit.event: fragile (broken for
VALUE=DATE events).
* Recurring VTODOs are returned in search results but without the RRULE,
so client-side expansion cannot find specific occurrences. Marked as
search.recurrences.includes-implicit.todo: fragile.
* Server-side CALDAV:expand is broken for events with exceptions (returns
3 items instead of 2, because exceptions are stored as separate objects).
Marked as search.recurrences.expanded.exception: unsupported.
* Master+exception VEVENTs are stored as separate CalendarObjectResources
rather than as a single multi-VEVENT object (RFC violation). New feature
flag save-load.event.recurrences.exception tracks this; when unsupported,
CalDAVSearcher now falls back to server-side CALDAV:expand (if available)
so client-side expansion of the master alone does not yield duplicates.
* VTODO date searches with no DTSTART on the task are skipped; open-ended
VTODO date searches return no results. Covered by existing old-flags
vtodo_datesearch_nodtstart_task_is_skipped and new no_search_openended.
Test assertions in testRecurringDateWithExceptionSearch and
testTodoDatesearch are now guarded by the appropriate feature flags so
the tests pass (or skip gracefully) on Stalwart.
Also fix a KeyError crash in setUp when a rate-limit features dict lacks
'interval' or 'count' keys (e.g. Stalwart's rate-limit config uses
default_sleep/max_sleep, not interval/count).
Co-Authored-By: Claude <noreply@anthropic.com>1 parent 1210694 commit 4398935
3 files changed
Lines changed: 57 additions & 9 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
130 | 130 | | |
131 | 131 | | |
132 | 132 | | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
133 | 143 | | |
134 | 144 | | |
135 | 145 | | |
| |||
1014 | 1024 | | |
1015 | 1025 | | |
1016 | 1026 | | |
| 1027 | + | |
1017 | 1028 | | |
1018 | 1029 | | |
1019 | 1030 | | |
| |||
1365 | 1376 | | |
1366 | 1377 | | |
1367 | 1378 | | |
1368 | | - | |
1369 | 1379 | | |
| 1380 | + | |
| 1381 | + | |
| 1382 | + | |
| 1383 | + | |
| 1384 | + | |
| 1385 | + | |
| 1386 | + | |
| 1387 | + | |
| 1388 | + | |
| 1389 | + | |
| 1390 | + | |
| 1391 | + | |
| 1392 | + | |
| 1393 | + | |
| 1394 | + | |
| 1395 | + | |
| 1396 | + | |
| 1397 | + | |
| 1398 | + | |
| 1399 | + | |
1370 | 1400 | | |
1371 | 1401 | | |
1372 | 1402 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
273 | 273 | | |
274 | 274 | | |
275 | 275 | | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
276 | 287 | | |
277 | 288 | | |
278 | 289 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
762 | 762 | | |
763 | 763 | | |
764 | 764 | | |
765 | | - | |
| 765 | + | |
766 | 766 | | |
767 | 767 | | |
768 | 768 | | |
| |||
2642 | 2642 | | |
2643 | 2643 | | |
2644 | 2644 | | |
2645 | | - | |
2646 | | - | |
2647 | 2645 | | |
| 2646 | + | |
| 2647 | + | |
2648 | 2648 | | |
2649 | 2649 | | |
2650 | 2650 | | |
| |||
3283 | 3283 | | |
3284 | 3284 | | |
3285 | 3285 | | |
3286 | | - | |
3287 | | - | |
3288 | | - | |
| 3286 | + | |
| 3287 | + | |
| 3288 | + | |
| 3289 | + | |
| 3290 | + | |
| 3291 | + | |
| 3292 | + | |
| 3293 | + | |
3289 | 3294 | | |
3290 | | - | |
3291 | | - | |
| 3295 | + | |
| 3296 | + | |
| 3297 | + | |
| 3298 | + | |
3292 | 3299 | | |
3293 | 3300 | | |
3294 | 3301 | | |
| |||
0 commit comments