_calendar__cal_item_add_delete (private)

 _calendar__cal_item_add_delete

Defined in packages/calendar/tcl/test/cal-item-procs.tcl

Partial Call Graph (max 5 caller/called nodes):
%3 _ _ (public) aa_equals aa_equals (public) aa_false aa_false (public) aa_get_first_url aa_get_first_url (public) aa_log aa_log (public) _calendar__cal_item_add_delete _calendar__cal_item_add_delete _calendar__cal_item_add_delete->_ _calendar__cal_item_add_delete->aa_equals _calendar__cal_item_add_delete->aa_false _calendar__cal_item_add_delete->aa_get_first_url _calendar__cal_item_add_delete->aa_log

Testcases:
No testcase defined.
Source code:
        
        set _aa_export {}
        set body_count 1
        foreach testcase_body {{
    try {

        set user_id [ad_conn user_id]

        # create a test calendar
        set calendar_id [calendar::create $user_id t]

        aa_true "User '$user_id' has the new calendar" {
            [string first  $calendar_id  [calendar::calendar_list -user_id $user_id -privilege calendar_read]] >= 0
        }

        set another_user [dict get [acs::test::user::create] user_id]

        aa_equals "User '$another_user' has no private calendars"  [calendar::calendar_list -user_id $another_user -privilege calendar_read]  [list]

        aa_equals "User '$another_user' has no public calendars"  [calendar::calendar_list -user_id $another_user -privilege read]  [list]

        aa_false "User '$another_user' has no 'calendar_read' permission on calendar '$calendar_id'"  [permission::permission_p -party_id $another_user -object_id $calendar_id -privilege calendar_read]
        aa_false "The public has no 'calendar_read' permission on calendar '$calendar_id'"  [permission::permission_p -party_id [acs_magic_object "the_public"] -object_id $calendar_id -privilege calendar_read]

        aa_log "Assign permission on user"
        permission::grant -object_id $calendar_id -party_id $another_user -privilege calendar_read

        aa_true "User '$another_user' has 'calendar_read' permission on calendar '$calendar_id'"  [permission::permission_p -party_id $another_user -object_id $calendar_id -privilege calendar_read]
        aa_false "The public has no 'calendar_read' permission on calendar '$calendar_id'"  [permission::permission_p -party_id [acs_magic_object "the_public"] -object_id $calendar_id -privilege calendar_read]

        aa_equals "User '$another_user' has no private calendars"  [calendar::calendar_list -user_id $another_user -privilege read]  [list]

        aa_equals "User '$another_user' has no public calendars"  [calendar::calendar_list -user_id $another_user -privilege calendar_read]  [list]

        aa_false "User '$another_user' has no private calendar"  [calendar::have_private_p -party_id $another_user]

        aa_log "Create a private test calendar belonging to the other user"
        set calendar_id_2 [calendar::create $another_user t]

        aa_log "Create a calendar item belonging to the other user"
        set ci_start_date [clock format [clock seconds] -format "%Y-%m-%d"]
        set ci_end_date [clock format [clock scan "tomorrow" -base [clock seconds]] -format "%Y-%m-%d"]
        #
        # Note: the creation_user can only be specified by altering
        # the connection information. This is not great.
        #
        set old_user [ad_conn user_id]
        ad_conn -set user_id $another_user
        set another_cal_item_id  [calendar::item::new  -start_date $ci_start_date  -end_date $ci_end_date  -name Test  -description {Test Desc}  -calendar_id $calendar_id_2]
        ad_conn -set user_id $old_user
        foreach priv {cal_item_read read write delete admin} {
            aa_true "Other user has privilege '$priv' on the cal item '$another_cal_item_id'"  [permission::permission_p  -party_id $another_user  -object_id $another_cal_item_id  -privilege $priv]
        }


        aa_true "User '$another_user' has now a private calendar"  [calendar::have_private_p -party_id $another_user]

        aa_true "Calendar '$calendar_id_2' is personal to '$another_user'"  [calendar::personal_p -calendar_id $calendar_id_2 -user_id $another_user]

        aa_false "Calendar '$calendar_id_2' is not personal to current user"  [calendar::personal_p -calendar_id $calendar_id_2 -user_id [ad_conn user_id]]

        aa_equals "User '$another_user' has the new calendar"  [calendar::have_private_p -party_id $another_user -return_id 1]  $calendar_id_2

        aa_true "User '$another_user' has the new calendar" {
            [string first  $calendar_id_2  [calendar::calendar_list -user_id $another_user -privilege calendar_read]] >= 0
        }

        aa_log "Create a public test calendar belonging to the current user"
        set calendar_id_3 [calendar::create $user_id f]
        permission::grant -object_id $calendar_id_3 -party_id $another_user -privilege calendar_read
        aa_true "User '$another_user' has the new calendar" {
            [string first  $calendar_id_3  [calendar::calendar_list -user_id $another_user -privilege calendar_read]] >= 0
        }

        aa_log "Revoking permission on user"
        permission::revoke -object_id $calendar_id_3 -party_id $another_user -privilege calendar_read

        aa_false "User '$another_user' has no 'calendar_read' permission on calendar '$calendar_id_3'"  [permission::permission_p -party_id $another_user -object_id $calendar_id_3 -privilege calendar_read]
        aa_false "The public has no 'calendar_read' permission on calendar '$calendar_id'"  [permission::permission_p -party_id [acs_magic_object "the_public"] -object_id $calendar_id_3 -privilege calendar_read]

        aa_log "Assign permission to the public"
        permission::grant -object_id $calendar_id -party_id [acs_magic_object "the_public"] -privilege calendar_read

        set cache_p [parameter::get -package_id [ad_acs_kernel_id] -parameter PermissionCacheP -default 0]
        if { $cache_p } {
            aa_log "Caching is activated, we flush it for [acs_magic_object the_public]"
            permission::cache_flush -party_id [acs_magic_object "the_public"]
        }

        aa_true "User '$another_user' has 'calendar_read' permission on calendar '$calendar_id'"  [permission::permission_p -party_id $another_user -object_id $calendar_id -privilege calendar_read]
        aa_true "The public has 'calendar_read' permission on calendar '$calendar_id'"  [permission::permission_p -party_id [acs_magic_object "the_public"] -object_id $calendar_id -privilege calendar_read]



        #
        # Creating a new calendar item will fire a notification, but
        # only if the notification object has at least 1 subscriber.
        #
        aa_log "Subscribing user '$another_user' to the calendar notification"
        notification::request::new  -type_id [notification::type::get_type_id  -short_name calendar_notif]  -user_id $another_user  -object_id [ad_conn package_id]  -interval_id [notification::interval::get_id_from_name -name "instant"]  -delivery_method_id [notification::delivery::get_id -short_name "email"]

        #
        # create a simple calendar item without recurrence
        #
        set ci_start_date [clock format [clock seconds] -format "%Y-%m-%d"]
        set ci_end_date [clock format [clock scan "tomorrow" -base [clock seconds]] -format "%Y-%m-%d"]
        set ci_name "name"
        set ci_description "description"
        set cal_item_id  [calendar::item::new  -start_date $ci_start_date  -end_date $ci_end_date  -name $ci_name  -description $ci_description  -calendar_id $calendar_id]

        #
        # Check that the calendar item can be exported as .ics. We use
        # an admin to avoid permission checks.
        #
        set admin_user_info [acs::test::user::create -admin]
        set admin_user_id [dict get $admin_user_info user_id]
        set cal_item_ics_url [aa_get_first_url -package_key calendar]ics/${cal_item_id}.ics
        set d [acs::test::http -user_info $admin_user_info $cal_item_ics_url]
        acs::test::reply_has_status_code $d 200
        aa_true "Content type is .ics"  [regexp {^application/x-msoutlook.*$} [ns_set iget [dict get $d headers] Content-type]]

        set mode_pretty [_ calendar.New]
        aa_true "Notification was generated" [db_0or1row check {
            select 1 from notifications
             where notif_subject like '%' || :mode_pretty || '%'
               and response_id = :cal_item_id
        }]

        aa_equals "The notification URL is correct"  [calendar::notification::get_url [ad_conn package_id]]  [site_node::get_url_from_object_id -object_id [ad_conn package_id]]

        calendar::item::get  -cal_item_id $cal_item_id  -array cal_item
        aa_equals "Name is correct" $ci_name $cal_item(name)
        aa_equals "Description is correct" $ci_description $cal_item(description)

        set activity_id [db_string get_activity_id {
            select activity_id from acs_events where event_id = :cal_item_id
        } -default ""]
        aa_true "activity_id ($activity_id) is not empty" {$activity_id ne ""}

        calendar::item::delete  -cal_item_id $cal_item_id

        aa_log "deleted item calendar item $cal_item_id"

        set activity_id [db_string get_activity_id {
            select activity_id from acs_activities where activity_id = :activity_id
        } -default ""]
        aa_true "activity_id ($activity_id) is gone" {$activity_id eq ""}

        #
        # Create now a recurring calendar item
        #
        aa_log "create a recurreinig calendar item"

        set ci_start_date [clock format [clock seconds] -format "%Y-%m-%d"]
        set ci_end_date [clock format [clock scan "tomorrow" -base [clock seconds]] -format "%Y-%m-%d"]
        set recur_until [clock format [clock scan "10 days" -base [clock seconds]] -format "%Y-%m-%d"]
        set ci_name "name"
        set ci_description "description"
        set cal_item_id  [calendar::item::new  -start_date $ci_start_date  -end_date $ci_end_date  -name $ci_name  -description $ci_description  -calendar_id $calendar_id]
        #
        # Add a recurrence
        #
        set recurrence_id  [calendar::item::add_recurrence  -cal_item_id $cal_item_id  -interval_type "day"  -every_n 1  -days_of_week ""  -recur_until $recur_until]

        aa_log "calendar item $cal_item_id, recurrence_id = '${recurrence_id}'"

        set activity_id [db_string get_activity_id {
            select activity_id from acs_events where event_id = :cal_item_id
        } -default ""]
        aa_true "activity_id ($activity_id) is not empty" {$activity_id ne ""}
        aa_true "recurrence_id ($recurrence_id) is not empty" {$recurrence_id ne ""}

        calendar::item::get  -cal_item_id $cal_item_id  -array cal_item
        aa_equals "item::get returns the same recurrence_id" $cal_item(recurrence_id) $recurrence_id

        set cal_item_ids [db_list get_event_ids {
            select event_id from acs_events where activity_id = :activity_id
        }]
        aa_true "cal_item_ids ($cal_item_ids) of recurring event" {[llength $cal_item_ids] == 11}

        calendar::item::delete -cal_item_id $cal_item_id
        aa_log "deleted item calendar item $cal_item_id"

        set cal_item_ids [db_list get_event_ids {
            select event_id from acs_events where activity_id = :activity_id
        }]
        aa_true "cal_item_ids ($cal_item_ids) of recurring event" {[llength $cal_item_ids] == 10}

        set activity_id [db_string get_activity_id {
            select activity_id from acs_activities where activity_id = :activity_id
        } -default ""]
        aa_false "activity_id ($activity_id) is gone" {$activity_id eq ""}

        set recurrence_id [db_string get_activity_id {
            select recurrence_id from recurrences where recurrence_id = :recurrence_id
        } -default ""]
        aa_false "recurrence_id ($recurrence_id) is gone" {$recurrence_id eq ""}

        #
        # Now delete all remaining cal items
        #
        foreach cid $cal_item_ids {
            calendar::item::delete -cal_item_id $cid
        }
        set cal_item_ids [db_list get_event_ids {
            select event_id from acs_events where activity_id = :activity_id
        }]
        aa_true "cal_item_ids ($cal_item_ids) of recurring event" {[llength $cal_item_ids] == 0}

        #
        # ... and check, if the activity and recurrence was deleted
        #
        set activity_id [db_string get_activity_id {
            select activity_id from acs_activities where activity_id = :activity_id
        } -default ""]
        aa_true "activity_id ($activity_id) is gone" {$activity_id eq ""}

        set recurrence_id [db_string get_activity_id {
            select recurrence_id from recurrences where recurrence_id = :recurrence_id
        } -default ""]
        aa_true "recurrence_id ($recurrence_id) is gone" {$recurrence_id eq ""}

    } on error {errorMsg} {
        aa_true "Error msg: $errorMsg" 0
    } finally {
        #
        # Finally, clean up the calendar
        #
        calendar::delete -calendar_id $calendar_id
        calendar::delete -calendar_id $calendar_id_2
        calendar::delete -calendar_id $calendar_id_3
        foreach user_id [list $another_user $admin_user_id] {
            acs::test::user::delete -user_id $user_id  -delete_created_acs_objects
        }
    }

    #
    # .. and check, if the calendar is gone.
    #
    set n_calendar_id [db_string get_calendar_id {
            select calendar_id from calendars where calendar_id = :calendar_id
    } -default ""]

    aa_true "calendar_id ($n_calendar_id) is gone" {$n_calendar_id eq ""}

}} {
          aa_log "Running testcase body $body_count"
          set ::__aa_test_indent [info level]
          set catch_val [catch $testcase_body msg]
          if {$catch_val != 0 && $catch_val != 2} {
              aa_log_result "fail" "cal_item_add_delete (body $body_count): Error during execution: $msg, stack trace: \n$::errorInfo"
          }
          incr body_count
        }
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: