. /** * Unit tests for grade/report/lib.php. * * @package core_grades * @category phpunit * @copyright Andrew Nicols * @license http://www.gnu.org/copyleft/gpl.html GNU Public License */ defined('MOODLE_INTERNAL') || die(); global $CFG; require_once($CFG->dirroot.'/grade/lib.php'); require_once($CFG->dirroot.'/grade/export/lib.php'); /** * A test class used to test grade_report, the abstract grade report parent class */ class core_grade_export_test extends advanced_testcase { /** * Ensure that feedback is correct formatted. Test the default implementation of format_feedback * * @dataProvider format_feedback_provider * @param string $input The input string to test * @param int $inputformat The format of the input string * @param string $expected The expected result of the format. */ public function test_format_feedback($input, $inputformat, $expected) { $feedback = $this->getMockForAbstractClass( \grade_export::class, [], '', false ); $this->assertEquals( $expected, $feedback->format_feedback((object) [ 'feedback' => $input, 'feedbackformat' => $inputformat, ]) ); } /** * Ensure that feedback is correctly formatted. Test augmented functionality to handle file links */ public function test_format_feedback_with_grade() { $this->resetAfterTest(); $dg = $this->getDataGenerator(); $c1 = $dg->create_course(); $u1 = $dg->create_user(); $gi1a = new grade_item($dg->create_grade_item(['courseid' => $c1->id]), false); $gi1a->update_final_grade($u1->id, 1, 'test'); $contextid = $gi1a->get_context()->id; $gradeid = $gi1a->id; $tests = [ 'Has server based image (HTML)' => [ '

See this reference:

', FORMAT_HTML, "See this reference: " ], 'Has server based image and more (HTML)' => [ '

See for reference

', FORMAT_HTML, "See for reference" ], 'Has server based video and more (HTML)' => [ '

See for reference

', FORMAT_HTML, 'See video of a duck for reference' ], 'Has server based video with text and more (HTML)' => [ '

See for reference

', FORMAT_HTML, "See https://www.example.com/moodle/pluginfile.php/$contextid/grade/feedback/$gradeid/test.img for reference" ], 'Multiple videos (HTML)' => [ '

See and '. ' for reference

', FORMAT_HTML, 'See video of a duck and video of a cat for reference' ], ]; $feedback = $this->getMockForAbstractClass( \grade_export::class, [], '', false ); foreach ($tests as $key => $testdetails) { $expected = $testdetails[2]; $input = $testdetails[0]; $inputformat = $testdetails[1]; $this->assertEquals( $expected, $feedback->format_feedback((object) [ 'feedback' => $input, 'feedbackformat' => $inputformat, ], $gi1a), $key ); } } /** * Data provider for the format_feedback tests. * * @return array */ public function format_feedback_provider() : array { return [ 'Basic string (PLAIN)' => [ 'This is an example string', FORMAT_PLAIN, 'This is an example string', ], 'Basic string (HTML)' => [ '

This is an example string

', FORMAT_HTML, 'This is an example string', ], 'Has image (HTML)' => [ '

See this reference:

', FORMAT_HTML, 'See this reference: ', ], 'Has image and more (HTML)' => [ '

See for reference

', FORMAT_HTML, 'See for reference', ], 'Has video and more (HTML)' => [ '

See for reference

', FORMAT_HTML, 'See video of a duck for reference', ], 'Multiple videos (HTML)' => [ '

See and '. ' for reference

', FORMAT_HTML, 'See video of a duck and video of a cat for reference' ], 'HTML Looking tags in PLAIN' => [ 'The way you have written the ', FORMAT_PLAIN, 'The way you have written the <img thing looks pretty fun >', ], ]; } }