diff --git a/admin/tool/messageinbound/classes/manager.php b/admin/tool/messageinbound/classes/manager.php index c8ef59f4169..6596aadf8fe 100644 --- a/admin/tool/messageinbound/classes/manager.php +++ b/admin/tool/messageinbound/classes/manager.php @@ -310,6 +310,16 @@ class manager { return true; } + /** + * Remove older verification failures. + * + * @return void + */ + public function tidy_old_verification_failures() { + global $DB; + $DB->delete_records_select('messageinbound_messagelist', 'timecreated < :time', ['time' => time() - DAYSECS]); + } + /** * Process a message and pass it through the Inbound Message handling systems. * diff --git a/admin/tool/messageinbound/classes/task/cleanup_task.php b/admin/tool/messageinbound/classes/task/cleanup_task.php index e8b1c7a1978..fc2c01d9093 100644 --- a/admin/tool/messageinbound/classes/task/cleanup_task.php +++ b/admin/tool/messageinbound/classes/task/cleanup_task.php @@ -49,6 +49,7 @@ class cleanup_task extends \core\task\scheduled_task { */ public function execute() { $manager = new \tool_messageinbound\manager(); - return $manager->tidy_old_messages(); + $manager->tidy_old_messages(); + $manager->tidy_old_verification_failures(); } } diff --git a/admin/tool/messageinbound/tests/manager_test.php b/admin/tool/messageinbound/tests/manager_test.php new file mode 100644 index 00000000000..936d99636a0 --- /dev/null +++ b/admin/tool/messageinbound/tests/manager_test.php @@ -0,0 +1,97 @@ +. + +/** + * Manager tests. + * + * @package tool_messageinbound + * @category test + * @copyright 2018 Frédéric Massart + * @author Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); +global $CFG; + +use core_privacy\tests\provider_testcase; +use core_privacy\local\request\approved_contextlist; +use core_privacy\local\request\transform; +use core_privacy\local\request\writer; +use tool_messageinbound\privacy\provider; + +/** + * Manager testcase class. + * + * @package tool_messageinbound + * @category test + * @copyright 2018 Frédéric Massart + * @author Frédéric Massart + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class tool_messageinbound_manager_testcase extends provider_testcase { + + public function setUp() { + global $CFG; + $this->resetAfterTest(); + + // Pretend the system is enabled. + $CFG->messageinbound_enabled = true; + $CFG->messageinbound_mailbox = 'mailbox'; + $CFG->messageinbound_domain = 'example.com'; + } + + public function test_tidy_old_verification_failures() { + global $DB; + + $now = time(); + $stale = time() - DAYSECS; + + $this->create_messagelist(['timecreated' => $now]); + $this->create_messagelist(['timecreated' => $now - HOURSECS]); + $this->create_messagelist(['timecreated' => $stale]); + $this->create_messagelist(['timecreated' => $stale - HOURSECS]); + $this->create_messagelist(['timecreated' => $stale - YEARSECS]); + + $this->assertEquals(5, $DB->count_records('messageinbound_messagelist', [])); + $this->assertEquals(3, $DB->count_records_select('messageinbound_messagelist', 'timecreated < :t', ['t' => $stale + 1])); + + $manager = new \tool_messageinbound\manager(); + $manager->tidy_old_verification_failures(); + + $this->assertEquals(2, $DB->count_records('messageinbound_messagelist', [])); + $this->assertEquals(0, $DB->count_records_select('messageinbound_messagelist', 'timecreated < :t', ['t' => $stale + 1])); + } + + /** + * Create a message to validate. + * + * @param array $params The params. + * @return stdClass + */ + protected function create_messagelist(array $params) { + global $DB, $USER; + $record = (object) array_merge([ + 'messageid' => 'abc', + 'userid' => $USER->id, + 'address' => 'text@example.com', + 'timecreated' => time(), + ], $params); + $record->id = $DB->insert_record('messageinbound_messagelist', $record); + return $record; + } + +}