From f82929e6a2dd3da7b8632e017cf4c312545cc00a Mon Sep 17 00:00:00 2001 From: Andrew Ruthven Date: Sun, 19 Sep 2021 01:46:51 +1200 Subject: [PATCH] Regression tests that tickle #247 Zero duration meeting should have a zero duration time in Free/Busy, but doesn't, the times are whacky. --- .../2200-RFC5545-Duration-Setup.result | 64 +++++++++++++++++++ .../2200-RFC5545-Duration-Setup.test | 58 +++++++++++++++++ .../2201-RFC5545-Duration-FreeBusy.result | 25 ++++++++ .../2201-RFC5545-Duration-FreeBusy.test | 33 ++++++++++ 4 files changed, 180 insertions(+) create mode 100644 testing/tests/regression-suite/2200-RFC5545-Duration-Setup.result create mode 100644 testing/tests/regression-suite/2200-RFC5545-Duration-Setup.test create mode 100644 testing/tests/regression-suite/2201-RFC5545-Duration-FreeBusy.result create mode 100644 testing/tests/regression-suite/2201-RFC5545-Duration-FreeBusy.test diff --git a/testing/tests/regression-suite/2200-RFC5545-Duration-Setup.result b/testing/tests/regression-suite/2200-RFC5545-Duration-Setup.result new file mode 100644 index 00000000..7644d538 --- /dev/null +++ b/testing/tests/regression-suite/2200-RFC5545-Duration-Setup.result @@ -0,0 +1,64 @@ +HTTP/1.1 201 Created +Date: Dow, 01 Jan 2000 00:00:00 GMT +DAV: 1, 2, 3, access-control, calendar-access, calendar-schedule +DAV: extended-mkcol, bind, addressbook, calendar-auto-schedule, calendar-proxy +ETag: "8a414b95eff37e1c939823191048ed22" +Content-Length: 0 +Content-Type: text/plain; charset="utf-8" + + + CalDAV Data: >BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//davical.org//NONSGML AWL Calendar//EN +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +DTSTART:19900318T030000 +RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU +TZNAME:NZST +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +DTSTART:19901007T020000 +RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU +TZNAME:NZDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +UID:zero-duration-event +DTSTAMP:20210918T123000 +SUMMARY:Zero duration event +DESCRIPTION:Zero duration event +CREATED:20210918T123000 +DTSTART;TZID=Pacific/Auckland:20210919T013000 +DTEND;TZID=Pacific/Auckland:20210919T013000 +END:VEVENT +END:VCALENDAR +< + caldav_type: >VEVENT< + class: >PUBLIC< + dav_etag: >8a414b95eff37e1c939823191048ed22< + description: >Zero duration event< + dtend: >2021-09-19 01:30:00< + dtstamp: >2021-09-18 12:30:00< + dtstart: >2021-09-19 01:30:00< + due: >NULL< + last_modified: >2021-09-18 12:30:00< + location: >NULL< + logged_user: >10< + percent_complete: >NULL< + priority: >NULL< + rrule: >NULL< + status: >NULL< + summary: >Zero duration event< + transp: >NULL< + tz_id: >Pacific/Auckland< + uid: >zero-duration-event< + url: >NULL< + user_no: >10< + ~Duration: >00:00:00< + diff --git a/testing/tests/regression-suite/2200-RFC5545-Duration-Setup.test b/testing/tests/regression-suite/2200-RFC5545-Duration-Setup.test new file mode 100644 index 00000000..b61f252a --- /dev/null +++ b/testing/tests/regression-suite/2200-RFC5545-Duration-Setup.test @@ -0,0 +1,58 @@ +# +# Create a zero time event, should have zero time in Free/Busy +# +TYPE=PUT +URL=http://regression.host/caldav.php/user1/home/zero-duration-event.ics +HEADER=Content-Type: text/calendar +HEADER=User-Agent: RFC5545 Duration P0D +HEAD + + +BEGINDATA +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//davical.org//NONSGML AWL Calendar//EN +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Pacific/Auckland +BEGIN:STANDARD +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +DTSTART:19900318T030000 +RRULE:FREQ=YEARLY;UNTIL=20070317T140000Z;BYMONTH=3;BYDAY=3SU +TZNAME:NZST +END:STANDARD +BEGIN:DAYLIGHT +TZOFFSETFROM:+1200 +TZOFFSETTO:+1300 +DTSTART:19901007T020000 +RRULE:FREQ=YEARLY;UNTIL=20060930T140000Z;BYMONTH=10;BYDAY=1SU +TZNAME:NZDT +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VEVENT +UID:zero-duration-event +DTSTAMP:20210918T123000 +SUMMARY:Zero duration event +DESCRIPTION:Zero duration event +CREATED:20210918T123000 +DTSTART;TZID=Pacific/Auckland:20210919T013000 +DTEND;TZID=Pacific/Auckland:20210919T013000 +END:VEVENT +END:VCALENDAR +ENDDATA + + +QUERY +SELECT caldav_data.user_no, caldav_data.dav_etag, caldav_type, logged_user, + uid, dtstamp, dtstart at time zone olson_name as dtstart, + dtend at time zone olson_name as dtend, due, summary, location, + description, priority, class, transp, rrule, url, + percent_complete, tz_id, status, + caldav_data AS " CalDAV Data", calendar_item.last_modified, + dtend - dtstart AS "~Duration" +FROM caldav_data JOIN calendar_item USING(dav_name) JOIN timezones ON (tz_id=tzid) +WHERE caldav_data.dav_name = +'/user1/home/zero-duration-event.ics'; +ENDQUERY + diff --git a/testing/tests/regression-suite/2201-RFC5545-Duration-FreeBusy.result b/testing/tests/regression-suite/2201-RFC5545-Duration-FreeBusy.result new file mode 100644 index 00000000..6d46d073 --- /dev/null +++ b/testing/tests/regression-suite/2201-RFC5545-Duration-FreeBusy.result @@ -0,0 +1,25 @@ +HTTP/1.1 200 OK +Date: Dow, 01 Jan 2000 00:00:00 GMT +Content-Length: 310 +Content-Type: text/calendar;charset=UTF-8 + +BEGIN:VCALENDAR +PRODID:-//davical.org//NONSGML AWL Calendar//EN +VERSION:2.0 +CALSCALE:GREGORIAN +BEGIN:VFREEBUSY +DTSTAMP:yyyymmddThhmmssZ +DTSTART:correct +DTEND:correct +FREEBUSY:20210918T133000Z/20210918T133000Z +FREEBUSY:20210920T194500Z/20210920T203000Z +END:VFREEBUSY +END:VCALENDAR + + a) Start: >2021-09-19 01:30:00< + b) Location: >Pacific/Auckland< + c) UTC Start: >20210918T133000Z< + d) UTC End: >20210918T133000Z< + rrule: >NULL< + status: >NULL< + diff --git a/testing/tests/regression-suite/2201-RFC5545-Duration-FreeBusy.test b/testing/tests/regression-suite/2201-RFC5545-Duration-FreeBusy.test new file mode 100644 index 00000000..bed6d967 --- /dev/null +++ b/testing/tests/regression-suite/2201-RFC5545-Duration-FreeBusy.test @@ -0,0 +1,33 @@ +# +# Request a freebusy report by URL +# +# The event that we care about has DTSTART of 20210918T133000Z. +# +TYPE=GET +URL=http://regression.host/freebusy.php/user1/home/?start=20210918T000000&period=P3D +HEAD + +AUTH=user1:user1 + +REPLACE=/^DTSTAMP:\d{8}T\d{6}Z\r?$/DTSTAMP:yyyymmddThhmmssZ/ +REPLACE=/^DTSTART:20210918T000000Z\r?$/DTSTART:correct/ +REPLACE=/^DTEND:20210921T000000Z\r?$/DTEND:correct/ + +QUERY +SELECT calendar_item.rrule, calendar_item.status, + dtstart AT TIME ZONE olson_name AS "a) Start", + olson_name AS "b) Location", + to_char(calendar_item.dtstart at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "c) UTC Start", + to_char(calendar_item.dtend at time zone 'GMT','YYYYMMDD"T"HH24MISS"Z"') AS "d) UTC End" + FROM usr INNER JOIN collection USING (user_no) + INNER JOIN caldav_data USING (collection_id) + INNER JOIN calendar_item USING(dav_id) + LEFT JOIN timezones ON (tz_id=tzid) +WHERE caldav_data.dav_name ~ '^/user1/home/' + AND collection.is_calendar AND collection.schedule_transp = 'opaque' + AND rrule_event_overlaps( dtstart, dtend, rrule, '20210918T000000Z', '20210921T000000Z' ) + AND caldav_data.caldav_type IN ( 'VEVENT', 'VFREEBUSY' ) + AND (calendar_item.transp != 'TRANSPARENT' OR calendar_item.transp IS NULL) + AND (calendar_item.status != 'CANCELLED' OR calendar_item.status IS NULL) + ORDER BY 3 +ENDQUERY