diff --git a/mod/forum/tests/mail_test.php b/mod/forum/tests/mail_test.php index f7946f16fdb..f8f25e394c1 100644 --- a/mod/forum/tests/mail_test.php +++ b/mod/forum/tests/mail_test.php @@ -833,4 +833,248 @@ class mod_forum_mail_testcase extends advanced_testcase { $this->assertEquals($author->id, $message->useridfrom); $this->assertEquals($expectedsubject, $message->subject); } + + /** + * dataProvider for test_forum_post_email_templates(). + */ + public function forum_post_email_templates_provider() { + // Base information, we'll build variations based on it. + $base = array( + 'user' => array('firstname' => 'Love', 'lastname' => 'Moodle', 'mailformat' => 0, 'maildigest' => 0), + 'course' => array('shortname' => '101', 'fullname' => 'Moodle 101'), + 'forums' => array( + array( + 'name' => 'Moodle Forum', + 'forumposts' => array( + array( + 'name' => 'Hello Moodle', + 'message' => 'Welcome to Moodle', + 'messageformat' => FORMAT_MOODLE, + 'attachments' => array( + array( + 'filename' => 'example.txt', + 'filecontents' => 'Basic information about the course' + ), + ), + ), + ), + ), + ), + 'expectations' => array( + array( + 'subject' => '.*101.*Hello', + 'contents' => array( + '~{$a', + '~&(amp|lt|gt|quot|\#039);(?!course)', + 'Attachment example.txt:\n' . + 'http://www.example.com/moodle/pluginfile.php/\d*/mod_forum/attachment/\d*/example.txt\n', + 'Hello Moodle', 'Moodle Forum', 'Welcome.*Moodle', 'Love Moodle', '1\d1' + ), + ), + ), + ); + + // Build the text cases. + $textcases = array('Text mail without ampersands, quotes or lt/gt' => array('data' => $base)); + + // Single and double quotes everywhere. + $newcase = $base; + $newcase['user']['lastname'] = 'Moodle\''; + // $newcase['user']['lastname'] = 'Moodle\'"'; // TODO: This breaks badly. See MDL-52136. + $newcase['course']['shortname'] = '101\''; + // $newcase['course']['shortname'] = '101\'"'; // TODO: This breaks badly. See MDL-52136. + $newcase['forums'][0]['name'] = 'Moodle Forum\'"'; + $newcase['forums'][0]['forumposts'][0]['name'] = 'Hello Moodle\'"'; + $newcase['forums'][0]['forumposts'][0]['message'] = 'Welcome to Moodle\'"'; + $newcase['expectations'][0]['contents'] = array( + 'Attachment example.txt:', '~{\$a', '~&(quot|\#039);', 'Love Moodle\'', '101\'', 'Moodle Forum\'"', + 'Hello Moodle\'"', 'Welcome to Moodle\'"'); + $textcases['Text mail with quotes everywhere'] = array('data' => $newcase); + + // Lt and gt everywhere. This case is completely borked because format_string() + // strips tags with $CFG->formatstringstriptags and also escapes < and > (correct + // for web presentation but not for text email). See MDL-19829. + $newcase = $base; + $newcase['user']['lastname'] = 'Moodle>'; + $newcase['course']['shortname'] = '101>'; + $newcase['forums'][0]['name'] = 'Moodle Forum>'; + $newcase['forums'][0]['forumposts'][0]['name'] = 'Hello Moodle>'; + $newcase['forums'][0]['forumposts'][0]['message'] = 'Welcome to Moodle>'; + $newcase['expectations'][0]['contents'] = array( + 'Attachment example.txt:', '~{\$a', '~>', 'Love Moodle>', '101>', 'Moodle Forum>', + 'Hello Moodle>', 'Welcome to Moodle>'); + $textcases['Text mail with gt and lt everywhere'] = array('data' => $newcase); + + // Ampersands everywhere. This case is completely borked because format_string() + // escapes ampersands (correct for web presentation but not for text email). See MDL-19829. + $newcase = $base; + $newcase['user']['lastname'] = 'Moodle&'; + $newcase['course']['shortname'] = '101&'; + $newcase['forums'][0]['name'] = 'Moodle Forum&'; + $newcase['forums'][0]['forumposts'][0]['name'] = 'Hello Moodle&'; + $newcase['forums'][0]['forumposts'][0]['message'] = 'Welcome to Moodle&'; + $newcase['expectations'][0]['contents'] = array( + 'Attachment example.txt:', '~{\$a', '~&', 'Love Moodle&', '101&', 'Moodle Forum&', + 'Hello Moodle&', 'Welcome to Moodle&'); + $textcases['Text mail with ampersands everywhere'] = array('data' => $newcase); + + // Now the html cases. + $htmlcases = array(); + + // New base for html cases, no quotes, lts, gts or ampersands. + $htmlbase = $base; + $htmlbase['user']['mailformat'] = 1; + $htmlbase['expectations'][0]['contents'] = array( + '~{\$a', + '~&(amp|lt|gt|quot|\#039);(?!course)', + '