_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):
%3 _ _ (public) aa_equals aa_equals (public) aa_log aa_log (public) aa_log_result aa_log_result (public) aa_section aa_section (public) _xowf__create_test_items _xowf__create_test_items _xowf__create_test_items->_ _xowf__create_test_items->aa_equals _xowf__create_test_items->aa_log _xowf__create_test_items->aa_log_result _xowf__create_test_items->aa_section

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
[ hide source ] | [ make this the default ]
Show another procedure: