- Publicity: Public Only All
content-search-procs.tcl
Tests for search queue triggers
- Location:
- packages/acs-content-repository/tcl/test/content-search-procs.tcl
Procedures in this file
Detailed information
[ hide source ] | [ make this the default ]Content File Source
ad_library { Tests for search queue triggers } namespace eval cr_item_search:: {} d_proc -private cr_item_search::assert_not_in_queue { -revision_id -events } { We use this test many times. Check if revision_id is in the search observer queue } { aa_false "Revision ${revision_id} is not queued for search events $events" \ [db_string check_queue [subst { select count(*) from search_observer_queue where object_id = :revision_id and event in ([ns_dbquotelist $events]) }] -default 0] } d_proc -private cr_item_search::assert_in_queue { -revision_id -events } { We use this test many times. Check if revision_id is in the search observer queue @param events List of events to check for (INSERT,UPDATE,DELETE) } { aa_true "Revision ${revision_id} is queued for search events $events" \ [db_string check_queue [subst { select count(*) from search_observer_queue where object_id = :revision_id and event in ([ns_dbquotelist $events]) }] -default 0] } d_proc -private cr_item_search::remove_from_queue { -revision_id } { Remove all entries from queue } { db_dml remove "delete from search_observer_queue where object_id=:revision_id" } d_proc -private cr_item_search::test_setup { } { setup test environment for search trigger tests } { set folder_name [ad_tmpnam cr_item_search_XXXXXX] set folder_id [content::folder::new -name $folder_name] content::folder::register_content_type -folder_id $folder_id -content_type content_revision -include_subtypes t return $folder_id } aa_register_case \ -cats {api db} \ -procs { content::item::get_id content::item::get_id_by_name content::item::get_parent_folder content::item::get_latest_revision content::item::get_live_revision content::item::get_best_revision content::item::new content::item::set_live_revision content::item::unset_live_revision content::item::update cr_item_search::assert_in_queue cr_item_search::assert_not_in_queue cr_item_search::remove_from_queue cr_item_search::test_setup db_name } \ cr_item_search_triggers { Test search update trigger } { if {![string match -nocase "oracle*" [db_name]]} { aa_run_with_teardown \ -rollback \ -test_code \ { set folder_id [cr_item_search::test_setup] set item_name [ad_tmpnam cr_itemXXXXXX] # test new item, not live set item_id [content::item::new \ -name $item_name \ -title $item_name \ -parent_id $folder_id \ -is_live f] # make sure the item exists first aa_true "Item exists" {[content::item::get_id \ -item_path $item_name \ -root_folder_id $folder_id] \ ne ""} aa_equals "Item can be retrieved by name" \ [content::item::get_id_by_name \ -name $item_name \ -parent_id $folder_id] \ $item_id aa_equals "Folder is correct" \ [content::item::get_parent_folder \ -item_id $item_id] \ $folder_id aa_log "Create a child for this nonfolder item" set child_item_id [content::item::new \ -name "$item_name child" \ -title "$item_name child" \ -parent_id $item_id \ -is_live f] aa_equals "Folder for the child is correct" \ [content::item::get_parent_folder \ -item_id $child_item_id] \ $folder_id aa_true "Item is NOT live" {[content::item::get_live_revision \ -item_id $item_id] eq ""} set latest_revision [content::item::get_latest_revision \ -item_id $item_id] aa_true "But a revision exists" {$latest_revision ne ""} aa_false "Item is NOT queued for search indexing" \ [db_string check_queue { select 1 from search_observer_queue where object_id = :latest_revision } -default 0] set best_revision [content::item::get_best_revision \ -item_id $item_id] aa_true "Best revision exists" {$best_revision ne ""} aa_true "Best revision is the latest revision" {$best_revision == $latest_revision} aa_log "Update Item, still no live revision" content::item::update \ -item_id $item_id \ -attributes [list [list name $item_name]] cr_item_search::assert_not_in_queue \ -revision_id $latest_revision \ -events [list INSERT UPDATE] aa_log "Add a new non-live revision" set new_revision [content::revision::new \ -item_id $item_id \ -title "$item_name 2" \ -is_live f] set best_revision [content::item::get_best_revision \ -item_id $item_id] aa_true "Best revision is now the new revision" {$best_revision == $new_revision} aa_log "Set live revision no publish date" content::item::set_live_revision \ -revision_id $latest_revision cr_item_search::assert_in_queue \ -revision_id $latest_revision \ -events [list INSERT UPDATE] set best_revision [content::item::get_best_revision \ -item_id $item_id] aa_true "Best revision is now the live revision" {$best_revision == $latest_revision} content::item::unset_live_revision -item_id $item_id cr_item_search::assert_in_queue \ -revision_id $latest_revision \ -events [list DELETE] cr_item_search::remove_from_queue \ -revision_id $latest_revision set next_date [clock format [clock scan "tomorrow"] -format "%Y-%m-%d"] db_dml set_publish_date "update cr_revisions set publish_date=:next_date where revision_id=:latest_revision" aa_log "Publish Date in future, live revision not set" cr_item_search::assert_not_in_queue \ -revision_id $latest_revision \ -events [list INSERT UPDATE] # NOTE set live revision without pl/sql proc which also set # publish date to right now! It should be impossible to have # a live revision with publish date in the future # but the point here is to never search an unpublished item db_dml set_live_revision \ "update cr_items set live_revision=latest_revision where item_id=:item_id" aa_log "Publish date in future, live revision set" cr_item_search::assert_not_in_queue \ -revision_id $latest_revision \ -events [list INSERT UPDATE] } } } # Local variables: # mode: tcl # tcl-indent-level: 4 # indent-tabs-mode: nil # End: