Commit Graph

532 Commits

Author SHA1 Message Date
Peter Bieringer
e225704174 max_vevent_rrule_occurrence: add additional test cases 2026-08-02 16:22:08 +02:00
Peter Bieringer
7cbf418d34 fix test case item name 2026-08-02 16:03:06 +02:00
Peter Bieringer
c0b163f778 align destination event names 2026-08-02 15:26:18 +02:00
Peter Bieringer
1b05af4233 test_add_event_y2040 2026-08-02 15:16:46 +02:00
Peter Bieringer
d6c245f457 event test: add y2040 test 2026-08-02 15:16:22 +02:00
Peter Bieringer
432a599a13 max_vevent_rrule_occurrence: change loglevel, align test ics name 2026-08-02 15:12:48 +02:00
Peter Bieringer
e430e7984c add missing test case 2026-08-02 11:39:02 +02:00
Peter Bieringer
202c9396ce log cosmetics 2026-08-02 11:35:45 +02:00
Peter Bieringer
953aebc85f max_vevent_rrule_occurrence: rename option 2026-08-02 10:58:13 +02:00
Peter Bieringer
67dbf8b3c6 max_expand_occurrence: additional test cases 2026-08-01 18:56:37 +02:00
Peter Bieringer
320ad29424 max_vevent_rrule_entries: test cases 2026-08-01 18:56:13 +02:00
Peter Bieringer
4a4e571cce Add: [report] max_expand_occurrence option to separate from max_freebusy_occurrence 2026-08-01 18:52:08 +02:00
Peter Bieringer
4952d2c3d9 sharing/map: add test cases for collections without trailing / 2026-08-01 08:47:01 +02:00
Peter Bieringer
5fdc809d63 sharing: bday conversion: test delete as user 2026-07-19 15:56:52 +02:00
TowyTowy
651e30211c Fix: serve_resource/serve_folder ignore mimetypes and fallback_mimetype parameters
httputils._serve_traversable looked up the Content-Type in the
module-level MIMETYPES/FALLBACK_MIMETYPE constants instead of the
mimetypes/fallback_mimetype parameters that serve_resource() and
serve_folder() accept and pass through. The parameters exist since the
helper was extracted for use by web plugins (33fcda7c, "Extract
httputils.serve_folder"), and the sibling parameters path_prefix and
index_file are honored, but a custom web plugin passing its own
mimetype mapping (e.g. to serve .json, .ico or .mjs files with a
correct Content-Type) silently got the built-in mapping and
application/octet-stream fallback instead.

Use the parameters for the lookup. No behavior change for the built-in
web module, which relies on the defaults.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 12:10:37 +02:00
TowyTowy
f38688456d Fix: free-busy REPORT always fails when max_freebusy_occurrence is 0
free_busy_report() explicitly handles [reporting] max_freebusy_occurrence = 0
as "limit disabled" when fetching occurrences (n=0 lets time_range_fill
return all occurrences), but the subsequent limit check
'len(occurrences) >= max_occurrence' is trivially true for
max_occurrence == 0, so every free-busy query on a non-empty calendar
raised ValueError ("FREEBUSY occurrences limit of 0 hit") and was
answered with HTTP 400.

Skip the limit check when the limit is disabled, consistent with how
xml_report() treats the same setting ('if max_occurrence and ...').
Behavior for positive limits is unchanged.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-17 01:06:51 +02:00
TowyTowy
c2a73cdc2d Fix: bday conversion clobbers NICKNAME when FN is empty
The share-by-map BDAY-to-ICS conversion builds a placeholder mapping for
the SUMMARY/DESCRIPTION/alarm templates. Each block sets the fallback
marker for its own placeholder (e.g. {nickname} -> '!nickname!', {n:f} ->
'!n:f!'), but the {fn} block wrote the empty-FN fallback to {nickname}
instead of {fn}.

As a result, for a VCARD whose FN is present but empty, a genuine
NICKNAME was overwritten with '!fn!' in the generated event, and the
{fn} placeholder never received its '!fn!' marker, so a '[{fn}|...]'
fallback in a template failed to resolve.

Assign the fallback to {fn}, matching the surrounding blocks.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-15 20:28:25 +02:00
TowyTowy
f48dc47177 Fix: text-match filter crashes on structured property (vCard N/ADR)
A CardDAV addressbook-query REPORT with a text-match prop-filter on a
structured property (e.g. N or ADR) returned HTTP 500. vobject parses
these into Name/Address objects rather than plain strings, so text_match
called .lower() on a non-string and raised AttributeError. Coerce
non-string values to their text representation before matching.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-15 11:26:45 +02:00
TowyTowy
a7da8ddd4b tests: guard REPORT response type to satisfy mypy
Assert the response is a dict before indexing, matching the existing
pattern used elsewhere in test_expand.py, so the Lint (mypy) job passes.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-13 13:00:41 +02:00
TowyTowy
9d46d5b63d Fix: expand REPORT leaves recurrence properties on expanded instances
_strip_single_event() removed the recurrence-defining properties (RRULE,
EXDATE, EXRULE, RDATE) with a single try/except around sequential
delattr() calls. When one of them was absent (e.g. an event with no
EXDATE), the AttributeError aborted the whole block and the following
properties -- notably RDATE -- were left on the expanded
single-occurrence VEVENTs returned by a calendar-data expand REPORT.

Remove each property independently so a missing one no longer prevents
removal of the others. Add a regression test and fixture.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-12 22:30:47 +02:00
TowyTowy
e557c0cd5e Fix: time-range filter matches VEVENT with whole-day DURATION
A calendar-query REPORT with a time-range filter failed to return a
VEVENT that has a whole-day DURATION (e.g. DURATION:P1D or P2D) whenever
the queried range fell inside the event but after DTSTART.

The VEVENT time-range logic in radicale/item/filter.py gated the
"non-zero duration" branch (rfc4791-9.9 line 2) on timedelta.seconds
instead of timedelta.total_seconds(). For a duration that is an exact
multiple of 24h, timedelta.seconds is 0 (the days component holds the
value), so the event was treated as zero-length (line 3) and only
matched a one-second window at its start. An identical event expressed
with DTEND matched correctly, confirming the defect is isolated to the
DURATION path.

Use total_seconds() so multi-day durations are handled correctly. Adds a
regression test (event11, DURATION:P2D) covering both an inside-range
match and an outside-range non-match.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 15:58:39 +02:00
Peter Bieringer
69b265b539 mark also windows for non-reliable sleep times 2026-06-28 22:15:44 +02:00
Peter Bieringer
ed6095620e add test case 2026-06-28 21:19:47 +02:00
Peter Bieringer
64005c967b fix trailing space bug introduced by Microsoft 2026-06-28 21:19:27 +02:00
Peter Bieringer
3f973a870d add test cases for PERIOD support 2026-06-21 16:31:29 +02:00
Peter Bieringer
d76a443c5d sharing/bday/tests: add missing file 2026-06-11 15:27:57 +02:00
Peter Bieringer
048845f615 sharing/bday/template: adjust+add test cases 2026-06-11 08:55:29 +02:00
Peter Bieringer
2c198da3fc sharing/bday/template: change trigger separator 2026-06-11 08:51:54 +02:00
Peter Bieringer
64761ae119 sharing/update: positive test with equal conversion 2026-06-09 21:49:39 +02:00
Peter Bieringer
25e376874e sharing/update: add test case changing Conversion 2026-06-09 21:35:27 +02:00
Peter Bieringer
169d6c3b45 sharing/test: align changed result codes 2026-06-09 21:35:11 +02:00
Peter Bieringer
f684d38147 rework tests with proxy simulation 2026-06-09 07:28:57 +02:00
Peter Bieringer
83b00f1b7b sharing/bday conversion: add additional test cases via proxy 2026-06-08 21:59:57 +02:00
Peter Bieringer
8aec777e16 flake8 fix 2026-06-08 21:44:33 +02:00
Peter Bieringer
9d1cb26f0b add 2 inode test cases 2026-06-08 06:31:55 +02:00
Peter Bieringer
5914deff28 add 2nd testcase 2026-06-07 08:24:27 +02:00
Peter Bieringer
22ea4fe302 testcase for issue-2151 2026-06-06 23:18:47 +02:00
Peter Bieringer
f985d090f4 Merge pull request #2150 from pbiering/sharing-info-bday
Sharing/show supported Actions on info
2026-06-02 08:25:46 +03:00
Peter Bieringer
2c15cb062b sharing/Actions: test "info" 2026-06-02 06:40:29 +02:00
Peter Bieringer
1520dfcfe3 sharing/api: add support for removing per share Action dict entries 2026-05-31 16:34:06 +02:00
Peter Bieringer
f43c4767ba sharing/bday: test status+class 2026-05-31 07:49:22 +02:00
Peter Bieringer
5cbd1d56e5 sharing/bday/description empty: test 2026-05-31 07:48:47 +02:00
Peter Bieringer
d6369588f4 sharing/bday/summary: check for not to be empty 2026-05-31 07:26:19 +02:00
Peter Bieringer
07c5873bdd sharing/bday/templating: default config rework 2026-05-31 07:06:35 +02:00
Peter Bieringer
70ec043423 sharing/bday/add support for custom categories 2026-05-31 06:00:55 +02:00
Peter Bieringer
0d198e56ac sharing/bday: parameter config tests 2026-05-31 06:00:55 +02:00
Peter Bieringer
40330ca800 sharing/bday: fix typo 2026-05-31 06:00:55 +02:00
Peter Bieringer
ebb359c5cc sharing/bday/age_max: input validation 2026-05-31 06:00:55 +02:00
Peter Bieringer
71643860a4 sharing/bday/Actions: align config section 2026-05-31 06:00:55 +02:00
Peter Bieringer
e26a2cfcf4 auth/test: increase delay limit for Windows 2026-05-31 06:00:55 +02:00