1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 namespace qbank_customfields; 18 19 /** 20 * Class qbank_customfields_question_handler_testcase 21 * 22 * @package qbank_customfields 23 * @copyright 2021 Catalyst IT Australia Pty Ltd 24 * @author Matt Porritt <mattp@catalyst-au.net> 25 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 26 */ 27 class question_handler_test extends \advanced_testcase { 28 29 /** 30 * Question setup helper method. 31 * 32 * @return int The question id. 33 * @throws coding_exception 34 */ 35 protected function setup_question(): int { 36 $category = $this->getDataGenerator()->create_category(); 37 $questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question'); 38 $context = \context_coursecat::instance($category->id); 39 $questioncategory = $questiongenerator->create_question_category(['contextid' => $context->id]); 40 $questiondata = ['category' => $questioncategory->id, 'idnumber' => 'q1']; 41 $question = $questiongenerator->create_question('shortanswer', null, $questiondata); 42 43 return $question->id; 44 45 } 46 47 /** 48 * Test custom field data. 49 */ 50 public function test_get_field_data(): void { 51 $this->resetAfterTest(); 52 $fieldgenerator = $this->getDataGenerator()->get_plugin_generator('core_customfield'); 53 54 $instanceid = $this->setup_question(); 55 $fieldvalue = 'test field text'; 56 57 $categorydata = new \stdClass(); 58 $categorydata->component = 'qbank_customfields'; 59 $categorydata->area = 'question'; 60 $categorydata->name = 'test category'; 61 62 $customfieldcatid = $fieldgenerator->create_category($categorydata)->get('id'); 63 $field = $fieldgenerator->create_field(['categoryid' => $customfieldcatid, 'type' => 'text', 'shortname' => 'f1']); 64 $fieldgenerator->add_instance_data($field, $instanceid, $fieldvalue); 65 66 // Get the field data. 67 $customfieldhandler = customfield\question_handler::create(); 68 $fieldinstancedata = $customfieldhandler->get_field_data($field, $instanceid); 69 70 $this->assertEquals($categorydata->name, $fieldinstancedata->get_field()->get_category()->get('name')); 71 $this->assertEquals($fieldvalue, $fieldinstancedata->get_value()); 72 } 73 74 /** 75 * Test getting custom field data for table display. 76 */ 77 public function test_display_custom_field_table(): void { 78 $this->resetAfterTest(); 79 $fieldgenerator = $this->getDataGenerator()->get_plugin_generator('core_customfield'); 80 81 $instanceid = $this->setup_question(); 82 $fieldvalue = 'test field text'; 83 84 $categorydata = new \stdClass(); 85 $categorydata->component = 'qbank_customfields'; 86 $categorydata->area = 'question'; 87 $categorydata->name = 'test category'; 88 89 $customfieldcatid = $fieldgenerator->create_category($categorydata)->get('id'); 90 $field = $fieldgenerator->create_field(['categoryid' => $customfieldcatid, 'type' => 'text', 'shortname' => 'f1']); 91 $fieldgenerator->add_instance_data($field, $instanceid, $fieldvalue); 92 93 // Get the field data. 94 $customfieldhandler = customfield\question_handler::create(); 95 $fieldinstancedata = $customfieldhandler->get_field_data($field, $instanceid); 96 $output = $customfieldhandler->display_custom_field_table($fieldinstancedata); 97 98 $this->assertStringContainsString($fieldvalue, $output); 99 } 100 101 /** 102 * Test getting categories and field data for a specific instance. 103 */ 104 public function test_get_categories_fields_data(): void { 105 $this->resetAfterTest(); 106 $fieldgenerator = $this->getDataGenerator()->get_plugin_generator('core_customfield'); 107 108 $instanceid = $this->setup_question(); 109 $field1value = 'first field text'; 110 $field2value = 'second field text'; 111 $field3value = 'third field text'; 112 113 $categorydata = new \stdClass(); 114 $categorydata->component = 'qbank_customfields'; 115 $categorydata->area = 'question'; 116 $categorydata->name = 'test category'; 117 118 $customfieldcat1id = $fieldgenerator->create_category($categorydata)->get('id'); 119 $categorydata->name = 'test category two'; 120 $customfieldcat2id = $fieldgenerator->create_category($categorydata)->get('id'); 121 122 $field1 = $fieldgenerator->create_field(['categoryid' => $customfieldcat1id, 'type' => 'text', 'shortname' => 'f1']); 123 $fieldgenerator->add_instance_data($field1, $instanceid, $field1value); 124 $field2 = $fieldgenerator->create_field(['categoryid' => $customfieldcat1id, 'type' => 'text', 'shortname' => 'f2']); 125 $fieldgenerator->add_instance_data($field2, $instanceid, $field2value); 126 127 $field3 = $fieldgenerator->create_field(['categoryid' => $customfieldcat2id, 'type' => 'text', 'shortname' => 'f3']); 128 $fieldgenerator->add_instance_data($field3, $instanceid, $field3value); 129 130 // Get the field data. 131 $customfieldhandler = customfield\question_handler::create(); 132 $outputdata = $customfieldhandler->get_categories_fields_data($instanceid); 133 134 $this->assertEquals($field1value, $outputdata['test category'][0]['value']); 135 $this->assertEquals($field2value, $outputdata['test category'][1]['value']); 136 $this->assertEquals($field3value, $outputdata['test category two'][0]['value']); 137 138 // While we're here, lets test the rendering of this data. 139 $outputhtml = $customfieldhandler->display_custom_categories_fields($outputdata); 140 141 $this->assertStringContainsString($field1value, $outputhtml); 142 $this->assertStringContainsString($field2value, $outputhtml); 143 $this->assertStringContainsString($field3value, $outputhtml); 144 } 145 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body