diff options
Diffstat (limited to 'tests/tests_kal.sh')
-rwxr-xr-x | tests/tests_kal.sh | 282 |
1 files changed, 0 insertions, 282 deletions
diff --git a/tests/tests_kal.sh b/tests/tests_kal.sh deleted file mode 100755 index 4d3019d..0000000 --- a/tests/tests_kal.sh +++ /dev/null @@ -1,282 +0,0 @@ -#!/bin/bash - -set -e - -######################################################################## -## SETUP -######################################################################## - -for path in . .. ./tests ../tests -do - setup="$path/_setup_alias" - [ -f $setup ] && source $setup -done - -if [ -z "$RUNTESTSNOPAUSE" ] -then - echo "tests.sh" - echo - echo "Generally, tests.sh should only be run directly if you know what you are doing" - echo "You may want to use test_calendar-cli.sh instead" - echo - echo "This script will use the following commands to access a calendar server:" - echo - echo "$kal" - echo "$calendar_cli" - echo - echo "This may work if you have configured a calendar server." - echo "The tests will add and delete events and tasks." - echo "Content from 2010-10 may be deleted" - echo - echo "Press enter or ctrl-C" - read foo -fi - -echo "## CLEANUP from earlier failed test runs, if any" - -QUIET=true -for uid in $($calendar_cli calendar agenda --from-time=2010-10-09 --agenda-days=5 --event-template='{uid}') ; do calendar_cli calendar delete --event-uid=$uid ; done -calendar_cli todo --categories scripttest delete -unset QUIET - -######################################################################## -## TEST CODE FOLLOWS -######################################################################## - -echo "## EVENTS" - -echo "## this is a very simple test script without advanced error handling" -echo "## if this test script doesn't output 'ALL TESTS COMPLETED! YAY!' in the end, something went wrong" - -echo "## Attempting to add an event at 2010-10-09 20:00:00, 2 hours duration" -kal add event 'testing testing' '2010-10-09 20:00:00+2h' -uid=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') -[ -n "$uid" ] || error "got no UID back" - -echo "## Attempting to add an event at 2010-10-10 20:00:00, CET (1 hour duration is default), with description and non-ascii location" -kal add event 'testing testing' '2010-10-10 20:00:00+01:00' --set-description='this is a test calendar event' --set-location='Москва' -uid2=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') -[ -n "$uid2" ] || error "got no UID back" - -echo "## Attempting to add an event at 2010-10-11 20:00:00, CET, 3h duration" -kal add event 'testing testing' '2010-10-11 20:00:00+01:00+3h' -uid3=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') -echo "## OK: Added the event, uid is $uid" - -echo "## Taking out the agenda for 2010-10-09 + four days" -kal select --start=2010-10-09 --end=+4d --event list --template='{DESCRIPTION} {LOCATION}' -echo $output | { grep -q 'this is a test calendar event Москва' && echo "## OK: found the event" ; } || error "didn't find the event" - -echo "## Taking out the agenda for 2010-10-10, with uid" -kal select --start=2010-10-10 --end=+1d --event list --template='{DTSTART.dt} {UID}' -echo $output | { grep -q $uid2 && echo "## OK: found the UID" ; } || error "didn't find the UID" - -echo "## Deleting events with uid $uid $uid2 $uid3" -kal select --event --uid=$uid delete -kal select --event --uid=$uid2 delete -kal select --event --uid=$uid3 delete - -echo "## Searching again for the deleted event" -kal select --event --start=2010-10-10 --end=+3d list -echo $output | { grep -q 'testing testing' && error "still found the event" ; } || echo "## OK: didn't find the event" - -echo "## Adding a full day event" -kal add event 'whole day testing' '2010-10-10+4d' -uid=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') -[ -n "$uid" ] || error "got no UID back" - -echo "## fetching the full day event, in ics format" -kal select --start=2010-10-13 --end=+1d --event list --ics - -echo "$output" | grep -q "whole day" || error "could not find the event" -echo "$output" | grep -q "20101010" || error "could not find the date" -echo "$output" | grep -q "20101010T" && error "a supposed whole day event was found to be with the time of day" -echo "OK: found the event" - -## saving the ics data -tmpfile=$(mktemp) -cat $outfile > $tmpfile - -echo "## cleanup, delete it" -kal select --event --uid=$uid delete - -echo "## Same, using kal add ics" -kal add ical --ical-file=$tmpfile -rm $tmpfile - -kal select --event --start=2010-10-13 --end=2010-10-14 list --ics -echo "$output" | grep -q "whole day" || error "could not find the event" -echo "$output" | grep -q "20101010" || error "could not find the date" -echo "$output" | grep -q "20101010T" && error "a supposed whole day event was found to be with the time of day" -echo "$output" | grep UID -echo "OK: found the event" -echo "## cleanup, delete it" - -kal select --event --uid=$uid delete - -## TODO: PROCRASTINATING TIME ZONES. Waiting for a release of the icalendar library that doesn't depend on pytz -if [ -n "" ]; then -echo "## testing timezone support" -echo "## Create a UTC event" -calendar_cli --timezone='UTC' calendar add '2010-10-09 12:00:00+10m' 'testevent with a UTC timezone' -uid=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') -[ -n "$uid" ] || error "got no UID back" - -echo "## fetching the UTC-event, as ical data" -calendar_cli --icalendar --timezone=UTC calendar agenda --from-time='2010-10-09 11:59' --agenda-mins=3 -[ -n "$output" ] || error "failed to find the event that was just added" -echo "$output" | grep -q "20101009T120000Z" || error "failed to find the UTC timestamp. Perhaps the server is yielding timezone data for the UTC timezone? In that case, the assert in the test code should be adjusted" - -echo "## cleanup, delete it" -calendar_cli calendar delete --event-uid=$uid - -echo "## Create an event with a somewhat remote time zone, west of UTC" -calendar_cli --timezone='Brazil/DeNoronha' calendar add '2010-10-09 12:00:00+10m' 'testevent with a time zone west of UTC' -uid=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') -[ -n "$uid" ] || error "got no UID back" - -echo "## fetching the remote time zone event, as ical data" -calendar_cli --icalendar --timezone=UTC calendar agenda --from-time='2010-10-09 13:59' --agenda-mins=3 -## zimbra changes Brazil/DeNoronha to America/Noronha. Actually, the server may theoretically use arbitrary IDs for the timezones. -echo "$output" | grep -Eq "TZID=\"?[a-zA-Z/]*Noronha" || echo "$output" | grep -q "140000Z" || - error "failed to find the remote timezone" - -echo "## fetching the remote time zone event, in UTC-time" -calendar_cli --timezone=UTC calendar agenda --from-time='2010-10-09 13:59' --agenda-mins=3 --event-template='{dtstart}' -[ "$output" == '2010-10-09 14:00 (Sat)' ] || error "expected dtstart to be 2010-10-09 14:00 (Sat)" - -echo "## fetching the remote time zone event, in CET-time (UTC+2 with DST, and October is defined as summer in Oslo, weird)" -calendar_cli --timezone=Europe/Oslo calendar agenda --from-time='2010-10-09 15:59' --agenda-mins=3 --event-template='{dtstart}' -[ "$output" == '2010-10-09 16:00 (Sat)' ] || error "expected dtstart to be 2010-10-09 15:00 (Sat)" - -echo "## cleanup, delete it" -calendar_cli calendar delete --event-uid=$uid -fi - -echo "## TODOS / TASK LISTS" - -echo "## Attempting to add a task with category 'scripttest'" -kal add todo --set-class=PRIVATE --set-category scripttest "edit this task" -uidtodo1=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') -kal add todo --set-class=CONFIDENTIAL --set-category scripttest "edit this task2" -uidtodo2=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') -kal add todo --set-class=PUBLIC "another task for testing sorting, offset and limit" -uidtodo3=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') - -echo "## Listing out all tasks with category set to 'scripttest'" -kal select --todo --category scripttest list -[ $(echo "$output" | wc -l) == 2 ] || error "We found more or less or none of the two todo items we just added" - - -echo "## Sort order and limit. CONFIDENTIAL class should come first. Only one task should be returned" -kal select --todo --sort-key=CLASS --limit 1 list --template '{CLASS}' -echo "$output" | grep -q CONFIDENTIAL || error "Sorting does not work as expected" -echo "$output" | grep -q PRIVATE && error "Limit does not work as expected" -echo "## print-uid subcommand will print the uid of the first thing found" -kal select --todo --sort-key=CLASS print-uid -[ $output == $uidtodo2 ] || error "print-uid subcommand does not work" - -kal select --todo --sort-key='class' --limit 2 list --template '{CLASS}' -[ $(echo "$output" | wc -l) == 2 ] && echo "## OK: limit=2 working" -echo "$output" | grep -q PRIVATE || error "Limit/sorting does not work as expected" - -echo "## Offset. PRIVATE should come in the middle" -kal select --todo --sort-key=class --limit 1 --offset 1 list --template '{CLASS}' -echo "$output" | grep -q PRIVATE || error "Offset does not work as expected" - -echo "## Reverse order. PUBLIC should come first" -kal select --todo --sort-key=-CLASS --limit 1 list --template '{CLASS}' -echo "$output" | grep -q PUBLIC || error "Reverse sort does not work as expected" - -echo "## Templating. The task without category should come first or last" -kal select --todo --sort-key='{CATEGORIES.cats[0]:?aaa?}' --limit 1 list --template '{SUMMARY}' -echo "$output" | grep -q 'another task' || error "sort by template not working as expected" -kal select --todo --sort-key='{CATEGORIES.cats[0]:?zzz?}' --limit 1 list --template '{SUMMARY}' -echo "$output" | grep -q 'another task' && error "sort by template not working as expected" - -echo "## Utilizing two sort keys" -kal select --todo --sort-key='{CATEGORIES.cats[0]:?zzz?}' --sort-key=CLASS --limit 1 list --template '{CLASS}' -[ "$output" == "CONFIDENTIAL" ] || error "two sort keys didn't work as expected" -kal select --todo --sort-key='{CATEGORIES.cats[0]:?zzz?}' --sort-key=-CLASS --limit 1 list --template '{CLASS}' -[ "$output" == "PRIVATE" ] || error "two sort keys didn't work as expected" - -echo "## Editing the task" -kal select --todo --category scripttest edit --set-summary "editing" --add-category "scripttest2" - -echo "## Verifying that the edits got through" -kal select --todo --category scripttest list -[ $(echo "$output" | wc -l) == 1 ] && echo "## OK: found the todo item we just edited and nothing more" -kal select --todo --category scripttest2 list -[ $(echo "$output" | wc -l) == 1 ] && echo "## OK: found the todo item we just edited and nothing more" -kal select --todo --category scripttest3 list -[ $(echo "$output" | wc -l) == 1 ] && echo "## OK: found the todo item we just edited and nothing more" -kal select --todo --comment editing list -[ $(echo "$output" | wc -l) == 1 ] && echo "## OK: found the todo item we just edited and nothing more" - - -echo "## Complete the task" -kal select --todo --category scripttest edit --complete -kal select --todo --category scripttest list -[ -z "$output" ] && echo "## OK: todo-item is done" -echo "## Test that we can list out completed tasks, and also undo completion" -kal select --todo --category scripttest --include-completed edit --uncomplete -kal select --todo --category scripttest list -[ -z "$output" ] && error "--uncomplete does not work!" -kal select --todo --uid $uidtodo1 --uid $uidtodo2 --uid $uidtodo3 delete --multi-delete - -echo "## parent-child relationships" -echo "## Going to add three todo-items with children/parent relationships" -kal add todo --set-category scripttest "this is a grandparent" -uidtodo1=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') -kal add todo --set-category scripttest --set-parent $uidtodo1 "this is both a parent and a child" -uidtodo2=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') -kal add todo --set-category scripttest --set-parent $uidtodo1 --set-parent $uidtodo2 "this task is a child of it's grandparent ... (what?)" -uidtodo3=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') -kal select --todo --category scripttest list -[ $(echo "$output" | wc -l) == 3 ] && echo "## OK: found three tasks" -kal select --todo --category scripttest --skip-parents list -[ $(echo "$output" | wc -l) == 1 ] && echo "## OK: found only one task now" -kal select --todo --category scripttest --skip-children list -[ $(echo "$output" | wc -l) == 1 ] && echo "## OK: found only one task now" -echo "## Going to complete the grandchildren task" -kal select --todo --skip-parents --category scripttest edit --complete -kal select --todo --skip-parents --category scripttest list -[ $(echo "$output" | wc -l) == 1 ] && echo "## OK: found only one task now" -echo "## Going to complete the child task" -kal select --todo --skip-parents --category scripttest edit --complete -kal select --todo --skip-parents --category scripttest list -[ $(echo "$output" | wc -l) == 1 ] && echo "## OK: found only one task now" -echo "## Going to complete the grandparent task" -kal select --todo --skip-parents --category scripttest edit --complete -kal select --todo --skip-parents --category scripttest list -[ -z "$output" ] && echo "## OK: found no tasks now" -kal select --todo --category scripttest list -[ -z "$output" ] && echo "## OK: found no tasks now" - -kal select --todo --uid $uidtodo1 --uid $uidtodo2 --uid $uidtodo3 delete --multi-delete - -echo "## test completion of recurring task" -kal add todo --set-category=scripttest --set-rrule="FREQ=YEARLY;COUNT=2" "this is a yearly task to be performed twice" -uidtodo=$(echo "$output" | perl -ne '/uid=(.*)$/ && print $1') -kal select --todo list --template='{UID}' -## since no time range is given, the task cannot be expanded -[ "$output" == "$uidtodo" ] || error "weird problem" -echo "## completing it should efficiently move the due one year into the future" -kal select --todo complete -kal select --todo list --template='{DUE.dt:%F}' -echo "$output" | grep -q "$(date -d '+1 year' +%F)" || error "completion of event with RRULE did not go so well" -echo "## since count is set to two, completing it for the second time should complete the whole thing" -kal select --todo complete -[ -z "$output" ] && echo "## OK: found no tasks now" -kal select --todo --uid $uidtodo delete - -echo "## test completion of recurring task with fixed occurance time" -kal add todo --set-category=scripttest --set-rrule='FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=1;BYHOUR=13;BYMINUTE=0;BYSECOND=0' "This task should be done next time 1st of January" -kal select --todo complete -kal select --todo list --template='{DUE.dt:%F}' -echo "$output" | grep -q "$(date -d '+1 year' +%Y)-01-01" || error "completion of event with RRULE did not go so well" - -echo "## some kal TESTS COMPLETED SUCCESSFULLY! YAY!" - -rm $outfile - |