From 675345475db4fe833758e344f33db93389e5f2a6 Mon Sep 17 00:00:00 2001 From: Andrew Nicols Date: Tue, 9 Aug 2016 10:41:47 +0800 Subject: [PATCH] MDL-55274 mod_chat: Add unit tests for special commands --- mod/chat/tests/format_message_test.php | 169 +++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 mod/chat/tests/format_message_test.php diff --git a/mod/chat/tests/format_message_test.php b/mod/chat/tests/format_message_test.php new file mode 100644 index 00000000000..10dd8c75c22 --- /dev/null +++ b/mod/chat/tests/format_message_test.php @@ -0,0 +1,169 @@ +. + +/** + * Tests for format_message. + * + * @package mod_chat + * @copyright 2016 Andrew NIcols + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->dirroot . '/mod/chat/lib.php'); + +/** + * Tests for format_message. + * + * @package mod_chat + * @copyright 2016 Andrew NIcols + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class mod_chat_format_message_testcase extends advanced_testcase { + + const USER_CURRENT = 1; + const USER_OTHER = 2; + + public function chat_format_message_manually_provider() { + $dateregexp = '\d{2}:\d{2}'; + return [ + 'Beep everyone' => [ + 'message' => 'beep all', + 'system' => false, + 'willreturn' => true, + 'expecttext' => "/^{$dateregexp}: " . get_string('messagebeepseveryone', 'chat', '__CURRENTUSER__') . ': /', + 'refreshusers' => false, + 'beep' => true, + ], + 'Beep the current user' => [ + 'message' => 'beep __CURRENTUSER__', + 'system' => false, + 'willreturn' => true, + 'expecttext' => "/^{$dateregexp}: " . get_string('messagebeepsyou', 'chat', '__CURRENTUSER__') . ': /', + 'refreshusers' => false, + 'beep' => true, + ], + 'Beep another user' => [ + 'message' => 'beep __OTHERUSER__', + 'system' => false, + 'willreturn' => false, + 'expecttext' => null, + 'refreshusers' => null, + 'beep' => null, + ], + 'Malformed beep' => [ + 'message' => 'beep', + 'system' => false, + 'willreturn' => true, + 'expecttext' => "/^{$dateregexp} __CURRENTUSER_FIRST__: beep$/", + 'refreshusers' => false, + 'beep' => false, + ], + '/me says' => [ + 'message' => '/me writes a test', + 'system' => false, + 'willreturn' => true, + 'expecttext' => "/^{$dateregexp}: \*\*\* __CURRENTUSER_FIRST__ writes a test$/", + 'refreshusers' => false, + 'beep' => false, + ], + 'Invalid command' => [ + 'message' => '/help', + 'system' => false, + 'willreturn' => true, + 'expecttext' => "/^{$dateregexp} __CURRENTUSER_FIRST__: \/help$/", + 'refreshusers' => false, + 'beep' => false, + ], + 'To user' => [ + 'message' => 'To Bernard:I love tests', + 'system' => false, + 'willreturn' => true, + 'expecttext' => "/^{$dateregexp}: __CURRENTUSER_FIRST__ " . get_string('saidto', 'chat') . " Bernard: I love tests$/", + 'refreshusers' => false, + 'beep' => false, + ], + 'To user trimmed' => [ + 'message' => 'To Bernard: I love tests', + 'system' => false, + 'willreturn' => true, + 'expecttext' => "/^{$dateregexp}: __CURRENTUSER_FIRST__ " . get_string('saidto', 'chat') . " Bernard: I love tests$/", + 'refreshusers' => false, + 'beep' => false, + ], + 'System: enter' => [ + 'message' => 'enter', + 'system' => true, + 'willreturn' => true, + 'expecttext' => "/^{$dateregexp}: " . get_string('messageenter', 'chat', '__CURRENTUSER__') . "$/", + 'refreshusers' => true, + 'beep' => false, + ], + 'System: exit' => [ + 'message' => 'exit', + 'system' => true, + 'willreturn' => true, + 'expecttext' => "/^{$dateregexp}: " . get_string('messageexit', 'chat', '__CURRENTUSER__') . "$/", + 'refreshusers' => true, + 'beep' => false, + ], + ]; + } + + /** + * @dataProvider chat_format_message_manually_provider + */ + public function test_chat_format_message_manually($messagetext, $system, $willreturn, + $expecttext, $refreshusers, $expectbeep) { + + $this->resetAfterTest(); + + $course = $this->getDataGenerator()->create_course(); + $currentuser = $this->getDataGenerator()->create_user(); + $this->setUser($currentuser); + $otheruser = $this->getDataGenerator()->create_user(); + + // Replace the message texts. + // These can't be done in the provider because it runs before the + // test starts. + $messagetext = str_replace('__CURRENTUSER__', $currentuser->id, $messagetext); + $messagetext = str_replace('__OTHERUSER__', $otheruser->id, $messagetext); + + $message = (object) [ + 'message' => $messagetext, + 'timestamp' => time(), + 'system' => $system, + ]; + + $result = chat_format_message_manually($message, $course->id, $currentuser, $currentuser); + + if (!$willreturn) { + $this->assertFalse($result); + } else { + $this->assertNotFalse($result); + if (!empty($expecttext)) { + $expecttext = str_replace('__CURRENTUSER__', fullname($currentuser), $expecttext); + $expecttext = str_replace('__CURRENTUSER_FIRST__', $currentuser->firstname, $expecttext); + $this->assertRegexp($expecttext, $result->text); + } + + $this->assertEquals($refreshusers, $result->refreshusers); + $this->assertEquals($expectbeep, $result->beep); + } + } +}