░▒▓████████████████████████████████▓▒░ ░▒▓█ ▓▒░ ░▒▓█ ~ S W A M P ~ ▓▒░ ░▒▓█ ▓▒░ ░▒▓████████████████████████████████▓▒░
pplmvsvm
LOCATION:
/var/www/moodle/public/mod/forum/tests/task
☗ ROOT
↻ REFRESH
✎ CARVE FLESH
EDITING: send_user_notifications_test.php
<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. namespace mod_forum\task; use Exception; use InvalidArgumentException; use RuntimeException; /** * Unit tests for the send_user_notifications task in the forum module. * * This class contains test cases to ensure that the forum module's * send_user_notifications task functions as expected, particularly * when handling email notifications to users after forum posts. * * It tests different scenarios related to user email configurations, * such as when a user has an empty email address, when a user has exceeded * the bounce threshold, and how the system behaves when posts are attempted * to be sent under these conditions. * * Each test verifies that the appropriate exceptions are thrown, that * messages are correctly sent (or skipped), and that the task requeues * appropriately based on the user's email settings and other related conditions. * * @package mod_forum * @copyright 2024 Waleed ul hassan <waleed.hassan@catalyst-eu.net> * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ final class send_user_notifications_test extends \advanced_testcase { /** * Testcase to check send notification for post via email * * @covers \mod_forum\task\send_user_notifications * @dataProvider send_user_notifications_cases * @param array $userdata Test user for the case. * @param string $expectedstring Expected string during the test case. * @param array $expecteddebuggingstrings Expected debugging strings array. * @param bool $expectedassertion Expected adhoc task to be re queued or not. * @param array $userpreferences (optional) User preferences for the test case. * @throws InvalidArgumentException If the user data is invalid. * @throws RuntimeException If the notification fails to send. * @throws Exception For any other general errors. */ public function test_send_user_notifications( array $userdata, string $expectedstring, array $expecteddebuggingstrings, bool $expectedassertion, array $userpreferences = [], ): void { global $CFG; require_once($CFG->dirroot . '/mod/forum/lib.php'); $CFG->handlebounces = true; $this->resetAfterTest(true); $this->preventResetByRollback(); $this->redirectEmails(); // Creating a user. $user = $this->getDataGenerator()->create_user($userdata); // Set user preferences. foreach ($userpreferences as $name => $value) { set_user_preference($name, $value, $user); } // Create a course and a forum. $course = $this->getDataGenerator()->create_course(); $forum = $this->getDataGenerator()->create_module('forum', [ 'course' => $course->id, 'forcesubscribe' => \FORUM_FORCESUBSCRIBE, ]); // Create a discussion in the forum. $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion([ 'course' => $course->id, 'forum' => $forum->id, 'userid' => $user->id, 'message' => 'Test discussion', ]); // Create a post in the discussion. $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post([ 'course' => $course->id, 'discussion' => $discussion->id, 'userid' => $user->id, 'message' => 'Test post', ]); // Setting placeholders for user id and post id. $expectedstring = sprintf($expectedstring, $user->id, $post->id, $user->id); $expecteddebuggingstrings = array_map(function($expecteddebuggingstring) use ($user) { return sprintf($expecteddebuggingstring, $user->id, $user->firstname . " " . $user->lastname); }, $expecteddebuggingstrings); // Enroll the user in the course. $this->getDataGenerator()->enrol_user($user->id, $course->id); // Trigger the send_user_notifications task. $task = new send_user_notifications(); $task->set_userid($user->id); $task->set_custom_data($post->id); $this->expectOutputString($expectedstring); // Testing if an exception is thrown because the task is re queued if an exception is thrown in the adhoc task. $expectedexception = 'Error sending posts.'; try { $task->execute(); } catch (\Exception $ex) { $this->assertEquals($expectedexception, $ex->errorcode); } if (count($expecteddebuggingstrings)) { $this->assertdebuggingcalledcount(count($expecteddebuggingstrings), $expecteddebuggingstrings); } } /** * Data provider for test cases related to sending user notifications. * * This data provider generates various test cases for the `test_send_user_notifications` function. * Each test case consists of a user configuration, expected output strings, debugging messages, and assertions. * * @return array[] Array of test cases. */ public static function send_user_notifications_cases(): array { return [ [ // Create a user with an empty email address. [ 'email' => '', 'username' => 'testuser', ], "Sending messages to testuser (%d)\n" . " Failed to send post %d\n" . "Sent 0 messages with 1 failures\n" . "Failed to send emails for the user with ID %d" . " due to an empty email address. Skipping re-queuing of the task.\n", [ "Can not send email to user without email: %d", "Error calling message processor email", ], false, ], [ // Create a user with bounce threshold. [ 'email' => 'bounce@example.com', 'username' => 'bounceuser', ], "Sending messages to bounceuser (%d)\n" . " Failed to send post %d\n" . "Sent 0 messages with 1 failures\n", [ "email_to_user: User %d (%s) is over bounce threshold! Not sending.", "Error calling message processor email", ], true, [ 'email_bounce_count' => 20, 'email_send_count' => 20, ], ], ]; } }
CANCEL
Name
Type
Size
Modified
Actions
↩ ..
DIR
—
—
📄 send_user_notifications_test.php
PHP
7.2 KB
2026-02-11 01:44
EDIT