_xowf__create_test_items (private)
_xowf__create_test_items
Defined in packages/xowf/tcl/test/test-item-procs.tcl
- Partial Call Graph (max 5 caller/called nodes):
- Testcases:
- No testcase defined.
Source code: upvar 2 _aa_exports _aa_exports foreach init_class xowf_require_test_instance { if {[llength $init_class] == 2} { lassign $init_class init_class init_package_key } else { set init_package_key xowf } foreach v $_aa_exports([list $init_package_key $init_class]) { upvar 2 $v $v } foreach logpair $::aa_init_class_logs([list $init_package_key $init_class]) { aa_log_result [lindex $logpair 0] [lindex $logpair 1] } } set _aa_export {} set body_count 1 foreach testcase_body {{ set instance $_xowf_test_instance_name set testfolder .testfolder set locale [lang::system::locale] set lang [string range $locale 0 1] # # Setup of test user_id and login # set user_info [::acs::test::user::create -email xowf@acs-testing.test -admin] set d [::acs::test::login $user_info] try { ########################################################### aa_section "Make sure we have a fresh test folder" ############################################################ set folder_info [::xowiki::test::require_test_folder -last_request $d -instance $instance -folder_name $testfolder -fresh ] set folder_id [dict get $folder_info folder_id] set package_id [dict get $folder_info package_id] aa_true "folder_id '$folder_id' is not 0" {$folder_id != 0} ########################################################### aa_section "Create a simple text interaction" ########################################################### set r [::xowiki::test::create_form_page -last_request $d -instance $instance -path $testfolder -parent_id $folder_id -form_name en:edit-interaction.wf -extra_url_parameter {{p.item_type Text}} -update { _title "Sample Text Interaction" _name sample_text_0 _nls_language en_US question.points 4 question.interaction.text { Given is a very complex situation.<p> How can this be solved? [[image:sample_text_0_image|Sample Text Interaction Image]] } }] # Save an image under the question set file_object [::xowiki::File new -destroy_on_cleanup -title "Sample Text Interaction Image" -name file:sample_text_0_image -parent_id [dict get $r page_info item_id] -mime_type image/png -package_id $package_id -creation_user [dict get $user_info user_id]] $file_object set import_file $::acs::rootdir/packages/acs-templating/www/resources/sort-ascending.png $file_object save_new ########################################################### aa_section "Create an MC interaction" ########################################################### set r [::xowiki::test::create_form_page -last_request $d -instance $instance -path $testfolder -parent_id $folder_id -form_name en:edit-interaction.wf -extra_url_parameter {{p.item_type MC}} -update { _title "Sample MC Interaction" _name sample_mc_0 _nls_language en_US question.points 3 question.shuffle peruser question.interaction.text { Which of the following colors are used in a traffic lights? [[image:sample_mc_0_image|Sample MC Interaction Image]] [[.SELF./image:sample_mc_0_image|Sample MC Interaction Image via SELF]] } question.interaction.answer.1.text "Red" question.interaction.answer.1.correct "t" question.interaction.answer.2.text "Green" question.interaction.answer.2.correct "t" question.interaction.answer.3.text "Blue" question.interaction.answer.3.correct "f" }] # Save an image under the question set file_object [::xowiki::File new -destroy_on_cleanup -title "Sample MC Interaction Image" -name file:sample_mc_0_image -parent_id [dict get $r page_info item_id] -mime_type image/png -package_id $package_id -creation_user [dict get $user_info user_id]] $file_object set import_file $::acs::rootdir/packages/acs-templating/www/resources/sort-ascending.png $file_object save_new ########################################################### aa_section "Create a ShortText interaction with a file submission" ########################################################### set r [::xowiki::test::create_form_page -last_request $d -instance $instance -path $testfolder -parent_id $folder_id -form_name en:edit-interaction.wf -extra_url_parameter {{p.item_type ShortText}} -update { _title "Sample ShortText Interaction" _name sample_st_0 _nls_language en_US question.points 2 question.shuffle none question.interaction.text { Write a program, which loops forever [[image:sample_st_0_image|Sample ShortText Interaction]] } question.interaction.answer.1.text "Please, upload your submission" question.interaction.answer.1.options "file_upload" }] # Save an image under the question set file_object [::xowiki::File new -destroy_on_cleanup -title "Sample ShortText Interaction Image" -name file:sample_st_0_image -parent_id [dict get $r page_info item_id] -mime_type image/png -package_id $package_id -creation_user [dict get $user_info user_id]] $file_object set import_file $::acs::rootdir/packages/acs-templating/www/resources/sort-ascending.png $file_object save_new ########################################################### aa_section "Create an inclass-exam" ########################################################### set d [::xowiki::test::create_form_page -last_request $d -instance $instance -path $testfolder -parent_id $folder_id -form_name en:inclass-exam.wf -update [subst { _title "Sample Inclass Exam" _nls_language en_US question { $testfolder/en:sample_mc_0 $testfolder/en:sample_st_0 $testfolder/en:sample_text_0 } }]] aa_log "inclass exam created d=[ns_quotehtml $d]" ########################################################### aa_section "Create exam with the selected question" ########################################################### #ns_log warning $d set page_name [dict get $d page_info link] set d [::xowiki::test::edit_form_page -last_request $d -path $testfolder/$page_name -update { __action_select "" }] aa_log "inclass exam edited d=[ns_quotehtml $d]" ########################################################### aa_section "Publish exam" ########################################################### set d [::xowiki::test::edit_form_page -last_request $d -path $testfolder/$page_name -update { __action_publish "" }] #aa_log "inclass exam edited d=[ns_quotehtml $d]" acs::test::reply_has_status_code $d 200 set response [dict get $d body] set answer_link "" acs::test::dom_html root $response { set answer_link_info [$root selectNodes {//a[@class='answer']/@href}] aa_log "answer link info is '$answer_link_info'" set answer_link [lindex $answer_link_info 0 1] aa_true "answer link is non empty '$answer_link'" {[string length $answer_link] > 0} } ########################################################### aa_section "Go to answer page and fill out exam" ########################################################### set d1 [acs::test::follow_link -last_request $d -label $answer_link] aa_log "inclass exam answer page d=[ns_quotehtml $d]" acs::test::reply_has_status_code $d1 302 set location /[::acs::test::get_url_from_location $d1] aa_log "fill-out page=[ns_quotehtml $location]" set d1 [acs::test::http -last_request $d $location] acs::test::reply_has_status_code $d1 200 # # Every answer page for a student consists of a single # question. In case randomization is activated, we can't # be sure, which question this will be. Therefore, we use # a dict for the expected results. # dict set q_dict sample_mc_0 type MC dict set q_dict sample_mc_0 nr_hrefs 2 dict set q_dict sample_mc_0 reply_fields { sample_mc_0_ 1 sample_mc_0_ 2 } set fn $::acs::rootdir/packages/xowf/tcl/test/test-item-procs.tcl set F [ad_opentmpfile tmpfile test] set F0 [open $fn]; set content [read $F0]; close $F0 close $F dict set q_dict sample_st_0 type ShortText dict set q_dict sample_st_0 nr_hrefs 1 dict set q_dict sample_st_0 reply_fields [list sample_st_0_.answer1 test-item-procs.tcl sample_st_0_.answer1.content-type text/plain sample_st_0_.answer1.tmpfile $tmpfile] dict set q_dict sample_text_0 type Text dict set q_dict sample_text_0 nr_hrefs 1 dict set q_dict sample_text_0 reply_fields { sample_text_0_ "Hello world" } set question_names [xowf::test::question_names_from_input_form $d1] set question_name [lindex $question_names 0] aa_section "... fill out question 1 ($question_name, [dict get $q_dict $question_name type])" # # Check, of images are successfully rendered. # acs::test::dom_html root [::xowiki::test::get_content $d1] { set hrefs [$root selectNodes {//img[@class='image']/@src}] set expected_nr_hrefs [dict get $q_dict $question_name nr_hrefs] aa_true "$expected_nr_hrefs images '$hrefs' were found on $question_name" { [llength $hrefs] == $expected_nr_hrefs } } # # Can we download these images? # foreach pair $hrefs { set d2 [acs::test::http -last_request $d1 [dict get $pair src]] acs::test::reply_has_status_code $d2 200 set content_type [ns_set iget [dict get $d2 headers] content-type] aa_equals "Content type is an image" image/png $content_type } # # Fill in answer for question 1 and click on question "2". # set path [string range $location [string length $instance] end] set url_info [ns_parseurl $path] set reply_fields [dict get $q_dict $question_name reply_fields] set d2 [::xowiki::test::edit_form_page -last_request $d -path [dict get $url_info path]/[dict get $url_info tail] -next_page_must_contain "#xowf.question# 2" -update [list {*}$reply_fields __action_q.2 "" ] ] acs::test::reply_has_status_code $d2 200 set question_names [xowf::test::question_names_from_input_form $d2] set question_name [lindex $question_names 0] aa_section "... fill out question 2 ($question_name, [dict get $q_dict $question_name type])" set reply_fields [dict get $q_dict $question_name reply_fields] set d3 [::xowiki::test::edit_form_page -last_request $d2 -path [dict get $url_info path]/[dict get $url_info tail] -next_page_must_contain "#xowf.question# 3" -update [list {*}$reply_fields __action_q.3 "" ] ] acs::test::reply_has_status_code $d3 200 aa_section "... submit the exam (Action logout) with a return_url" set d4 [::xowiki::test::edit_form_page -last_request $d3 -path [dict get $url_info path]/[dict get $url_info tail] -next_page_must_contain "Sample Inclass Exam" -update [list __action_logout "" return_url a-url] ] acs::test::reply_has_status_code $d4 200 set d $d4 set submission_id [[$package_id resolve_page [dict get $url_info path]/[dict get $url_info tail] _] item_id] aa_equals "Submission '$submission_id' is in state 'done'" [::xo::dc get_value get_state { select state from xowiki_form_instance_item_index where item_id = :submission_id }] done aa_section "... submit the exam (Action logout) without return_url" set d4 [::xowiki::test::edit_form_page -last_request $d4 -path [dict get $url_info path]/[dict get $url_info tail] -update [list __action_logout ""] ] acs::test::reply_has_status_code $d4 200 aa_equals "Submission '$submission_id' is in state 'done'" [::xo::dc get_value get_state { select state from xowiki_form_instance_item_index where item_id = :submission_id }] done set d $d4 ########################################################### aa_section "Check participants during exam" ########################################################### set d1 [acs::test::http -last_request $d [export_vars -base $instance/$testfolder/$page_name {{m print-participants}}]] acs::test::reply_has_status_code $d1 200 aa_log "check participants d=[ns_quotehtml $d1]" #ns_log notice "participants [dict get $d1 body]" ########################################################### aa_section "Close exam" ########################################################### set d [::xowiki::test::edit_form_page -last_request $d -path $testfolder/$page_name -update { __action_unpublish "" }] aa_log "inclass exam edited d=[ns_quotehtml $d]" ########################################################### aa_section "Visit exam protocol" ########################################################### set d [acs::test::http -last_request $d [export_vars -base $instance/$testfolder/$page_name {{m print-answers}}]] acs::test::reply_has_status_code $d 200 aa_log "inclass exam edited d=[ns_quotehtml $d]" ########################################################### aa_section "Check participants after exam" ########################################################### set d [acs::test::http -last_request $d [export_vars -base $instance/$testfolder/$page_name {{m print-participants}}] ] aa_log "inclass exam edited d=[ns_quotehtml $d]" acs::test::reply_has_status_code $d1 200 } on error {errorMsg} { aa_true "Error msg: $errorMsg" 0 } finally { # # In case something has to be cleaned manually, do it here. # } }} { 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" "create_test_items (body $body_count): Error during execution: $msg, stack trace: \n$::errorInfo" } incr body_count }XQL Not present: Generic, PostgreSQL, Oracle