diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e88cd459..cfcf3583 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,7 +45,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: path: plugin diff --git a/externallib.php b/externallib.php index 70371e80..7715fc1e 100644 --- a/externallib.php +++ b/externallib.php @@ -26,6 +26,8 @@ namespace mod_questionnaire; +defined('MOODLE_INTERNAL') || die(); + require_once($CFG->libdir . '/externallib.php'); use external_api; diff --git a/tests/behat/questionnaire_activity_completion.feature b/tests/behat/questionnaire_activity_completion.feature index 32e9e856..a9082e39 100644 --- a/tests/behat/questionnaire_activity_completion.feature +++ b/tests/behat/questionnaire_activity_completion.feature @@ -108,8 +108,8 @@ Feature: View activity completion information in the questionnaire activity Then I should see "Are you still in School?" And I should see "Select one choice" And I should see "Enter some text" - And I set the field with xpath "//input[@type='radio' and @id='auto-rb0001']" to "1" - And I set the field with xpath "//input[@type='radio' and @id='auto-rb0005']" to "1" + And I set the field "Yes" to "1" + And I set the field "Three" to "1" And I press "Submit questionnaire" Then I should see "Thank you for completing this Questionnaire." And I press "Continue" diff --git a/tests/csvexport_test.php b/tests/csvexport_test.php index 8c5e6a9e..bf90dbef 100644 --- a/tests/csvexport_test.php +++ b/tests/csvexport_test.php @@ -14,17 +14,21 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -namespace mod_questionnaire; - /** * Performance test for questionnaire module. - * * @package mod_questionnaire * @group mod_questionnaire * @author Guy Thomas * @copyright Copyright (c) 2015 Moodlerooms Inc. (http://www.moodlerooms.com) * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ + +namespace mod_questionnaire; + +/** + * Unit tests for questionnaire_csvexport_test. + * @group mod_questionnaire + */ class csvexport_test extends \advanced_testcase { public function setUp(): void { @@ -55,10 +59,9 @@ private function get_csv_text(array $rows) { } /** - * Test case for the csvexport method. * Tests the CSV export. * - * @covers ::csvexport + * @covers \questionnaire::generate_csv */ public function test_csvexport() { $this->resetAfterTest(); @@ -90,6 +93,8 @@ public function test_csvexport() { /** * Tests the CSV export with identity fields and anonymous questionnaires. + * + * @covers \questionnaire::generate_csv */ public function test_csvexport_identity_fields() { global $DB; @@ -148,7 +153,7 @@ private function do_test_csvexport_identity_fields($course, $cm, $user, $roleid, assign_capability('moodle/site:viewuseridentity', CAP_ALLOW, $roleid, $context); // Generate CSV output. - $questionnaire = new questionnaire($course, $cm, $item->id); + $questionnaire = new \questionnaire($course, $cm, $item->id); $output = $questionnaire->generate_csv(0, '', '', 0, 0, 1); $this->assertNotNull($output); diff --git a/tests/custom_completion_test.php b/tests/custom_completion_test.php index 17d61c8c..cb19f612 100644 --- a/tests/custom_completion_test.php +++ b/tests/custom_completion_test.php @@ -26,7 +26,6 @@ namespace mod_questionnaire; -use advanced_testcase; use cm_info; use coding_exception; use mod_questionnaire\completion\custom_completion; @@ -45,7 +44,7 @@ * @copyright 2022 The Open University * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -class custom_completion_test extends advanced_testcase { +class custom_completion_test extends \advanced_testcase { /** * Data provider for get_state(). @@ -72,7 +71,6 @@ public function get_state_provider(): array { /** * Test for get_state(). * - * @covers \mod_questionnaire\completion\custom_completion::get_state * @dataProvider get_state_provider * @param string $rule The custom completion rule. * @param int $available Whether this rule is available. @@ -80,6 +78,8 @@ public function get_state_provider(): array { * @param int|null $status Expected status. * @param string|null $exception Expected exception. * @throws coding_exception + * + * @covers \mod_questionnaire\completion\custom_completion */ public function test_get_state(string $rule, int $available, ?bool $submitted, ?int $status, ?string $exception) { if (!is_null($exception)) { @@ -116,7 +116,7 @@ public function test_get_state(string $rule, int $available, ?bool $submitted, ? /** * Test for get_defined_custom_rules(). * - * @covers \mod_questionnaire\completion\custom_completion::get_defined_custom_rules + * @covers \mod_questionnaire\completion\custom_completion */ public function test_get_defined_custom_rules() { $rules = custom_completion::get_defined_custom_rules(); @@ -127,7 +127,7 @@ public function test_get_defined_custom_rules() { /** * Test for get_defined_custom_rule_descriptions(). * - * @covers \mod_questionnaire\completion\custom_completion::get_custom_rule_descriptions + * @covers \mod_questionnaire\completion\custom_completion */ public function test_get_custom_rule_descriptions() { // Get defined custom rules. @@ -155,7 +155,7 @@ public function test_get_custom_rule_descriptions() { /** * Test for is_defined(). * - * @covers \mod_questionnaire\completion\custom_completion::is_defined + * @covers \mod_questionnaire\completion\custom_completion */ public function test_is_defined() { // Build a mock cm_info instance. @@ -191,10 +191,11 @@ public function get_available_custom_rules_provider(): array { /** * Test for get_available_custom_rules(). * - * @covers \mod_questionnaire\completion\custom_completion::get_available_custom_rules * @dataProvider get_available_custom_rules_provider * @param int $status * @param array $expected + * + * @covers \mod_questionnaire\completion\custom_completion */ public function test_get_available_custom_rules(int $status, array $expected) { $customdataval = [ diff --git a/tests/generator_test.php b/tests/generator_test.php index 7f5f86dd..707ecf6a 100644 --- a/tests/generator_test.php +++ b/tests/generator_test.php @@ -14,8 +14,6 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -namespace mod_questionnaire; - /** * PHPUnit questionnaire generator tests * @@ -24,11 +22,22 @@ * @author Mike Churchward * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ + +namespace mod_questionnaire; + +/** + * Unit tests for questionnaire_generator_testcase. + * @group mod_questionnaire + */ class generator_test extends \advanced_testcase { /** - * Test case for the create_instance function. + * Test generator create_instance function. * - * @covers \mod_questionnaire_generator::create_instance + * @return void + * @throws coding_exception + * @throws dml_exception + * + * @covers \mod_questionnaire\generator\ */ public function test_create_instance() { global $DB; @@ -65,9 +74,13 @@ public function test_create_instance() { } /** - * Test case for the create_content function. + * Test generator create_content function. + * + * @return void + * @throws coding_exception + * @throws dml_exception * - * @covers \mod_questionnaire_generator::create_content + * @covers \mod_questionnaire\generator\ */ public function test_create_content() { global $DB; diff --git a/tests/lib_test.php b/tests/lib_test.php index 932e89f9..4f828306 100644 --- a/tests/lib_test.php +++ b/tests/lib_test.php @@ -14,29 +14,37 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -namespace mod_questionnaire; +/** + * PHPUnit questionnaire generator tests + * + * @package mod_questionnaire + * @copyright 2015 Mike Churchward (mike@churchward.ca) + * @author Mike Churchward + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ -defined('MOODLE_INTERNAL') || die(); +namespace mod_questionnaire; use mod_questionnaire\question\question; +defined('MOODLE_INTERNAL') || die(); + global $CFG; require_once($CFG->dirroot.'/mod/questionnaire/lib.php'); require_once($CFG->dirroot.'/mod/questionnaire/classes/question/question.php'); /** - * PHPUnit questionnaire lib tests - * - * @package mod_questionnaire - * @copyright 2015 Mike Churchward (mike@churchward.ca) - * @author Mike Churchward - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * Unit tests for questionnaire_lib_testcase. + * @group mod_questionnaire */ class lib_test extends \advanced_testcase { + /** - * Test case for the questionnaire_supports function. + * Test for questionnaire_supports. * - * @covers ::questionnaire_supports + * @return void + * + * @covers \questionnaire_supports */ public function test_questionnaire_supports() { $this->assertTrue(questionnaire_supports(FEATURE_BACKUP_MOODLE2)); @@ -52,9 +60,11 @@ public function test_questionnaire_supports() { } /** - * Test case for the questionnaire_get_extra_capabilities function. + * Test for questionnaire_get_extra_capabilities. + * + * @return void * - * @covers ::questionnaire_get_extra_capabilities + * @covers \questionnaire_get_extra_capabilities */ public function test_questionnaire_get_extra_capabilities() { $caps = questionnaire_get_extra_capabilities(); @@ -64,9 +74,12 @@ public function test_questionnaire_get_extra_capabilities() { } /** - * Test case for the questionnaire_add_instance function. + * Test for questionnaire_add_instance. * - * @covers ::questionnaire_add_instance + * @return void + * @throws moodle_exception + * + * @covers \questionnaire_add_instance */ public function test_add_instance() { $this->resetAfterTest(); @@ -99,9 +112,12 @@ public function test_add_instance() { } /** - * Test case for the questionnaire_update_instance function. + * Test for questionnaire_update_instance(). + * + * @return void + * @throws dml_exception * - * @covers ::questionnaire_update_instance + * @covers \questionnaire_update_instance */ public function test_update_instance() { global $DB; @@ -159,9 +175,14 @@ public function test_update_instance() { } /** + * Test for questionnaire_delete_instance(). + * * Need to verify that delete_instance deletes all data associated with a questionnaire. * - * @covers ::questionnaire_delete_instance + * @return void + * @throws dml_exception + * + * @covers \questionnaire_delete_instance */ public function test_delete_instance() { global $DB; @@ -195,9 +216,12 @@ public function test_delete_instance() { } /** - * Test case for the questionnaire_user_outline function. + * Test for questionnaire_user_outline(). * - * @covers ::questionnaire_user_outline + * @return void + * @throws coding_exception + * + * @covers \questionnaire_user_outline */ public function test_questionnaire_user_outline() { $this->resetAfterTest(); @@ -220,9 +244,12 @@ public function test_questionnaire_user_outline() { } /** - * Test case for the questionnaire_user_complete function. + * Test for questionnaire_user_complete(). + * + * @return void + * @throws coding_exception * - * @covers ::questionnaire_user_complete + * @covers \questionnaire_user_complete */ public function test_questionnaire_user_complete() { $this->resetAfterTest(); @@ -237,9 +264,11 @@ public function test_questionnaire_user_complete() { } /** - * Test case for the questionnaire_print_recent_activity function. + * Test for questionnaire_print_recent_activity(). * - * @covers ::questionnaire_print_recent_activity + * @return void + * + * @covers \questionnaire_print_recent_activity */ public function test_questionnaire_print_recent_activity() { $this->resetAfterTest(); @@ -248,9 +277,11 @@ public function test_questionnaire_print_recent_activity() { } /** - * Test case for the questionnaire_grades function. + * Test for questionnaire_grades(). + * + * @return void * - * @covers ::questionnaire_grades + * @covers \questionnaire_grades */ public function test_questionnaire_grades() { $this->resetAfterTest(); @@ -259,9 +290,11 @@ public function test_questionnaire_grades() { } /** - * Test case for the questionnaire_get_user_grades function. + * Test for questionnaire_get_user_grades(). * - * @covers ::questionnaire_get_user_grades + * @return void + * + * @covers \questionnaire_get_user_grades */ public function test_questionnaire_get_user_grades() { $this->resetAfterTest(); @@ -282,9 +315,11 @@ public function test_questionnaire_get_user_grades() { } /** - * Test case for the questionnaire_update_grades function. + * Test for questionnaire_update_grades(). + * + * @return void * - * @covers ::questionnaire_update_grades + * @covers \questionnaire_update_grades */ public function test_questionnaire_update_grades() { // Don't know how to test this yet! It doesn't return anything. @@ -292,9 +327,11 @@ public function test_questionnaire_update_grades() { } /** - * Test case for the questionnaire_grade_item_update function. + * Test for questionnaire_grade_item_update(). + * + * @return void * - * @covers ::questionnaire_grade_item_update + * @covers \questionnaire_grade_item_update */ public function test_questionnaire_grade_item_update() { $this->resetAfterTest(); diff --git a/tests/questiontypes_test.php b/tests/questiontypes_test.php index aa0971af..53944a09 100644 --- a/tests/questiontypes_test.php +++ b/tests/questiontypes_test.php @@ -14,29 +14,37 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -namespace mod_questionnaire; +/** + * PHPUnit questionnaire generator tests + * + * @package mod_questionnaire + * @copyright 2015 Mike Churchward (mike@churchward.ca) + * @author Mike Churchward + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ -defined('MOODLE_INTERNAL') || die(); +namespace mod_questionnaire; use mod_questionnaire\question\question; +defined('MOODLE_INTERNAL') || die(); + global $CFG; require_once($CFG->dirroot.'/mod/questionnaire/locallib.php'); require_once($CFG->dirroot . '/mod/questionnaire/classes/question/question.php'); /** - * PHPUnit questionnaire questiontypes tests - * - * @package mod_questionnaire - * @copyright 2015 Mike Churchward (mike@churchward.ca) - * @author Mike Churchward - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * Unit tests for questionnaire_questiontypes_testcase. + * @group mod_questionnaire */ class questiontypes_test extends \advanced_testcase { + /** - * Test case for the create_test_question_with_choices function for checkbox questions. + * Create a check boxes test question. + * + * @return void * - * @covers ::create_test_question_with_choices + * @covers \mod_questionnaire\questiontypes_test::create_test_question */ public function test_create_question_checkbox() { $this->create_test_question_with_choices(QUESCHECK, @@ -44,27 +52,33 @@ public function test_create_question_checkbox() { } /** - * Test case for the create_test_question function for date questions. + * Create a date test question. * - * @covers ::create_test_question + * @return void + * + * @covers \mod_questionnaire\questiontypes_test::create_test_question */ public function test_create_question_date() { $this->create_test_question(QUESDATE, '\\mod_questionnaire\\question\\date', array('content' => 'Enter a date')); } /** - * Test case for the create_test_question_with_choices function for dropdown questions. + * Create a dropdown box test question. + * + * @return void * - * @covers ::create_test_question_with_choices + * @covers \mod_questionnaire\questiontypes_test::create_test_question */ public function test_create_question_dropdown() { $this->create_test_question_with_choices(QUESDROP, '\\mod_questionnaire\\question\\drop', array('content' => 'Select one')); } /** - * Test case for the create_test_question function for essay questions. + * Create an essay test question. * - * @covers ::create_test_question + * @return void + * + * @covers \mod_questionnaire\questiontypes_test::create_test_question */ public function test_create_question_essay() { $questiondata = array( @@ -75,9 +89,11 @@ public function test_create_question_essay() { } /** - * Test case for the create_test_question function for sectiontext questions. + * Create a sectiontext test question. + * + * @return void * - * @covers ::create_test_question + * @covers \mod_questionnaire\questiontypes_test::create_test_question */ public function test_create_question_sectiontext() { $this->create_test_question(QUESSECTIONTEXT, '\\mod_questionnaire\\question\\sectiontext', @@ -85,9 +101,11 @@ public function test_create_question_sectiontext() { } /** - * Test case for the create_test_question function for numeric questions. + * Create a numerical test question. * - * @covers ::create_test_question + * @return void + * + * @covers \mod_questionnaire\questiontypes_test::create_test_question */ public function test_create_question_numeric() { $questiondata = array( @@ -98,9 +116,11 @@ public function test_create_question_numeric() { } /** - * Test case for the create_test_question_with_choices function for radiobuttons questions. + * Create a radio test question. + * + * @return void * - * @covers ::create_test_question_with_choices + * @covers \mod_questionnaire\questiontypes_test::create_test_question */ public function test_create_question_radiobuttons() { $this->create_test_question_with_choices(QUESRADIO, @@ -108,18 +128,22 @@ public function test_create_question_radiobuttons() { } /** - * Test case for the create_test_question_with_choices function for ratescale questions. + * Create a rate test question. * - * @covers ::create_test_question_with_choices + * @return void + * + * @covers \mod_questionnaire\questiontypes_test::create_test_question */ public function test_create_question_ratescale() { $this->create_test_question_with_choices(QUESRATE, '\\mod_questionnaire\\question\\rate', array('content' => 'Rate these')); } /** - * Test case for the create_test_question function for textbox questions. + * Create a text test question. + * + * @return void * - * @covers ::create_test_question + * @covers \mod_questionnaire\questiontypes_test::create_test_question */ public function test_create_question_textbox() { $questiondata = array( @@ -130,9 +154,11 @@ public function test_create_question_textbox() { } /** - * Test case for the create_test_question function for slider questions. + * Create a slider test question. * - * @covers ::create_test_question + * @return void + * + * @covers \mod_questionnaire\questiontypes_test::create_test_question */ public function test_create_question_slider() { $questiondata = array( @@ -141,14 +167,17 @@ public function test_create_question_slider() { } /** - * Test case for the create_test_question function for yesno questions. + * Create a yes/no test question. + * + * @return void * - * @covers ::create_test_question + * @covers \mod_questionnaire\questiontypes_test::create_test_question */ public function test_create_question_yesno() { $this->create_test_question(QUESYESNO, '\\mod_questionnaire\\question\\yesno', array('content' => 'Enter yes or no')); } + // General tests to call from specific tests above. /** diff --git a/tests/responsetypes_test.php b/tests/responsetypes_test.php index a4363a09..e10db5ef 100644 --- a/tests/responsetypes_test.php +++ b/tests/responsetypes_test.php @@ -14,8 +14,19 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . +/** + * PHPUnit questionnaire generator tests + * + * @package mod_questionnaire + * @copyright 2015 Mike Churchward (mike@churchward.ca) + * @author Mike Churchward + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + namespace mod_questionnaire; +use mod_questionnaire\question\question; + defined('MOODLE_INTERNAL') || die(); global $CFG; @@ -25,18 +36,17 @@ require_once($CFG->dirroot . '/mod/questionnaire/classes/question/question.php'); /** - * PHPUnit questionnaire generator tests - * - * @package mod_questionnaire - * @copyright 2015 Mike Churchward (mike@churchward.ca) - * @author Mike Churchward - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * Unit tests for questionnaire_responsetypes_testcase. + * @group mod_questionnaire */ class responsetypes_test extends \advanced_testcase { /** - * Test case for the create_response_boolean function. + * Test responses in a yes/no question. + * + * @return void + * @throws dml_exception * - * @covers \mod_questionnaire_generator::create_question_response + * @covers \mod_questionnaire\question\yesno */ public function test_create_response_boolean() { global $DB; @@ -65,9 +75,12 @@ public function test_create_response_boolean() { } /** - * Test case for the create_response_text function. + * Test responses in a essay question. + * + * @return void + * @throws dml_exception * - * @covers \mod_questionnaire_generator::create_question_response + * @covers \mod_questionnaire\question\essay */ public function test_create_response_text() { global $DB; @@ -97,9 +110,12 @@ public function test_create_response_text() { } /** - * Test case for the create_response_slider function. + * Test responses in a slider question. * - * @covers \mod_questionnaire_generator::create_question_response + * @return void + * @throws dml_exception + * + * @covers \mod_questionnaire\question\slider */ public function test_create_response_slider() { global $DB; @@ -129,9 +145,12 @@ public function test_create_response_slider() { } /** - * Test case for the create_response_date function. + * Test responses in a date question. + * + * @return void + * @throws dml_exception * - * @covers \mod_questionnaire_generator::create_question_response + * @covers \mod_questionnaire\question\date */ public function test_create_response_date() { global $DB; @@ -162,9 +181,12 @@ public function test_create_response_date() { } /** - * Test case for the create_response_single function. + * Test responses in a single choice radio question. + * + * @return void + * @throws dml_exception * - * @covers \mod_questionnaire_generator::create_question_response + * @covers \mod_questionnaire\question\radio */ public function test_create_response_single() { global $DB; @@ -236,9 +258,12 @@ public function test_create_response_single() { } /** - * Test case for the create_response_multiple function. + * Test responses in a multiple choices question. * - * @covers \mod_questionnaire_generator::create_question_response + * @return void + * @throws dml_exception + * + * @covers \mod_questionnaire\question\rate */ public function test_create_response_multiple() { global $DB; @@ -296,9 +321,12 @@ public function test_create_response_multiple() { } /** - * Test case for the create_response_rank function. + * Test response's ranks in a rate question. + * + * @return void + * @throws dml_exception * - * @covers \mod_questionnaire_generator::create_question_response + * @covers \mod_questionnaire\question\rate */ public function test_create_response_rank() { global $DB; @@ -365,7 +393,7 @@ public function create_test_questionnaire($qtype, $questiondata = [], $choicedat $questiondata['content'] = isset($questiondata['content']) ? $questiondata['content'] : 'Test content'; $generator->create_question($questionnaire, $questiondata, $choicedata); - $questionnaire = new questionnaire( $course, $cm, $questionnaire->id, null, true); + $questionnaire = new \questionnaire( $course, $cm, $questionnaire->id, null, true); return $questionnaire; }