Index: openacs-4/packages/acs-core-docs/www/files/tutorial/myfirstpackage-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/files/tutorial/myfirstpackage-procs.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/acs-core-docs/www/files/tutorial/myfirstpackage-procs.tcl 4 Feb 2004 16:47:34 -0000 1.2 +++ openacs-4/packages/acs-core-docs/www/files/tutorial/myfirstpackage-procs.tcl 23 Mar 2004 15:37:19 -0000 1.3 @@ -2,23 +2,83 @@ Test cases for my first package. } -aa_register_case mfp_basic_test { - Test One -} { - aa_run_with_teardown \ - -rollback \ - -test_code { - set name [ad_generate_random_string] - set new_id [mfp::note::add -title $name] - aa_true "Note add succeeded" [exists_and_not_null new_id] +aa_register_case \ + -cats {smoke api} \ + -procs {mfp::note::add mfp::note::get mfp::note::delete} \ + mfp_basic_test \ + { + A simple test that adds, retrieves, and deletes a record. + } { + aa_run_with_teardown \ + -rollback \ + -test_code { + set name [ad_generate_random_string] + set new_id [mfp::note::add -title $name] + aa_true "Note add succeeded" [exists_and_not_null new_id] + + mfp::note::get -item_id $new_id -array note_array + aa_true "Note contains correct title" [string equal $note_array(title) $name] + + mfp::note::delete -item_id $new_id + + set get_again [catch {mfp::note::get -item_id $new_id -array note_array}] + aa_false "After deleting a note, retrieving it fails" [expr $get_again == 0] + } + } - mfp::note::get -item_id $new_id -array note_array - aa_true "Note contains correct title" [string equal $note_array(title) $name] +aa_register_case \ + -cats {api} \ + -procs {mfp::note::add mfp::note::get mfp::note::delete} \ + mfp_bad_data_test \ + { + A simple test that adds, retrieves, and deletes a record, using some tricky data. + } { + aa_run_with_teardown \ + -rollback \ + -test_code { + set name {-Bad [BAD] \077 { $Bad}} + append name [ad_generate_random_string] + set new_id [mfp::note::add -title $name] + aa_true "Note add succeeded" [exists_and_not_null new_id] + + mfp::note::get -item_id $new_id -array note_array + aa_true "Note contains correct title" [string equal $note_array(title) $name] + aa_log "Title is $name" + mfp::note::delete -item_id $new_id + + set get_again [catch {mfp::note::get -item_id $new_id -array note_array}] + aa_false "After deleting a note, retrieving it fails" [expr $get_again == 0] + } + } - mfp::note::delete -item_id $new_id +aa_register_case \ + -libraries tclwebtest \ + -cats {web} \ + mfp_basic_web_test \ + { + A simple test that adds, retrieves, and deletes a record through the web interface. INCOMPLETE. + } { + aa_run_with_teardown \ + -rollback \ + -test_code { + ############################################ + # Prepare + ############################################ - set get_again [catch {mfp::note::get -item_id $new_id -array note_array}] - aa_false "After deleting a note, retrieving it fails" [expr $get_again == 0] - } -} + set name [ad_generate_random_string] + tclwebtest::do_request + + + set new_id [mfp::note::add -title $name] + aa_true "Note add succeeded" [exists_and_not_null new_id] + + mfp::note::get -item_id $new_id -array note_array + aa_true "Note contains correct title" [string equal $note_array(title) $name] + aa_log "Title is $name" + mfp::note::delete -item_id $new_id + + set get_again [catch {mfp::note::get -item_id $new_id -array note_array}] + aa_false "After deleting a note, retrieving it fails" [expr $get_again == 0] + } + } \ No newline at end of file Index: openacs-4/packages/acs-core-docs/www/xml/developers-guide/tutorial-debug.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-core-docs/www/xml/developers-guide/tutorial-debug.xml,v diff -u -r1.8 -r1.9 --- openacs-4/packages/acs-core-docs/www/xml/developers-guide/tutorial-debug.xml 26 Feb 2004 15:28:37 -0000 1.8 +++ openacs-4/packages/acs-core-docs/www/xml/developers-guide/tutorial-debug.xml 23 Mar 2004 15:37:19 -0000 1.9 @@ -110,7 +110,7 @@ } To create a test case you call -aa_register_case test_case_name.. +aa_register_case test_case_name.. Once you've created the test case you start writing the needed logic. We'll use the tutorial package, "myfirstpackage," as an example. Let's say you just wrote an API for adding and deleting notes in the @@ -147,11 +147,18 @@ set name [ad_generate_random_string] set new_id [mfp::note::add -title $name] aa_true "Note add succeeded" [exists_and_not_null new_id] - To test our simple case, we must load the test file into the system (just as with the /tcl file in the basic tutorial, since the file didn't exist when the system started, the system doesn't know about it.) To make this file take effect, go to the APM and choose "Reload changed" for "MyFirstPackage". Since we'll be changing it frequently, select "watch this file" on the next page. This will cause the system to check this file every time any page is requested, which is bad for production systems but convenient for developing. + To test our simple case, we must load the test file into the system (just as with the /tcl file in the basic tutorial, since the file didn't exist when the system started, the system doesn't know about it.) To make this file take effect, go to the APM and choose "Reload changed" for "MyFirstPackage". Since we'll be changing it frequently, select "watch this file" on the next page. This will cause the system to check this file every time any page is requested, which is bad for production systems but convenient for developing. We can also add some aa_register_case flags to make it easier to run the test. The -procs flag, which indicates which procs are tested by this test case, makes it easier to find procs in your package that aren't tested at all. The -cats flag, setting categories, makes it easier to control which tests to run. The smoke test setting means that this is a basic test case that can and should be run any time you are doing any test. (a definition of "smoke test") Once the file is loaded, go to ACS Automated Testing and click on myfirstpackage. You should see your test case. Run it and examine the results. - Now we can add the rest of the API tests. The complete test looks like: + + TCLWebtest tests + API testing can only test part of our package - it doesn't test the code in our adp/tcl pairs. For this, we can use TCLwebtest. TCLwebtest must be installed for this test to work. This provides a library of functions that make it easy to call a page through HTTP, examine the results, and drive forms. TCLwebtest's functions overlap slightly with acs-automated-testing; see the example provided for one approach on integrating them. + + + Example + Now we can add the rest of the API tests, including a test with deliberately bad data. The complete test looks like: example missing See also . +