diff options
author | Tobias Brox <tobias@redpill-linpro.com> | 2022-09-30 01:29:58 +0200 |
---|---|---|
committer | Tobias Brox <tobias@redpill-linpro.com> | 2022-10-09 01:55:25 +0200 |
commit | e9a968157e65e18d1b285a7765ecb641175ba370 (patch) | |
tree | 4c770db41f5effaa79447df59023b536a5a60738 /tests/tests_kal.sh | |
parent | fd834cd17933bad5567f1315ddc800145081dcd6 (diff) | |
download | calendar-cli-e9a968157e65e18d1b285a7765ecb641175ba370.zip |
More work on the kal aka cal.py command. It can now do around 80% of all the stuff calendar-cli can do, plus more.
Diffstat (limited to 'tests/tests_kal.sh')
-rwxr-xr-x | tests/tests_kal.sh | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/tests/tests_kal.sh b/tests/tests_kal.sh new file mode 100755 index 0000000..3858063 --- /dev/null +++ b/tests/tests_kal.sh @@ -0,0 +1,218 @@ +#!/bin/bash + +## TODO: all references to calendar-cli should be replaced with references to kal. Work in progress! + +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-category scripttest "edit this task" +uidtodo1=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') +kal add todo --set-category scripttest "edit this task2" +uidtodo2=$(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 "## 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" + +if [ -n "" ]; then +echo "## Complete the task" +calendar_cli todo --categories scripttest complete +calendar_cli todo --categories scripttest list +[ -z "$output" ] && echo "## OK: todo-item is done" +calendar_cli todo --todo-uid $uidtodo1 delete + +## parent-child relationships +echo "## Going to add three todo-items with children/parent relationships" +calendar_cli todo add --set-categories scripttest "this is a grandparent" +uidtodo2=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') +calendar_cli todo --categories=scripttest add --set-categories scripttest --is-child "this is a parent and a child" +uidtodo3=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') +calendar_cli todo --categories=scripttest add --set-categories scripttest --is-child "this task has two parents" +uidtodo4=$(echo $output | perl -ne '/uid=(.*)$/ && print $1') +calendar_cli todo --categories scripttest list +[ $(echo "$output" | wc -l) == 3 ] && echo "## OK: found three tasks" +calendar_cli todo --hide-parents --categories scripttest list +[ $(echo "$output" | wc -l) == 1 ] && echo "## OK: found only one task now" +echo "## Going to complete the children task" +calendar_cli todo --hide-parents --categories scripttest complete +calendar_cli todo --hide-parents --categories scripttest list +[ $(echo "$output" | wc -l) == 1 ] && echo "## OK: found only one task now" +calendar_cli todo --hide-parents --categories scripttest complete +calendar_cli todo --hide-parents --categories scripttest list +[ $(echo "$output" | wc -l) == 1 ] && echo "## OK: found only one task now" +calendar_cli todo --hide-parents --categories scripttest complete +calendar_cli todo --hide-parents --categories scripttest list +[ -z "$output" ] && echo "## OK: found no tasks now" + +fi + +echo "## some kal TESTS COMPLETED SUCCESSFULLY! YAY!" + +rm $outfile + |