AutorÃa | Ultima modificación | Ver Log |
<?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 message_sms;
use core_sms\message;
use core_sms\message_status;
use core_sms\task\send_sms_task;
use mod_assign\notification_helper;
/**
* SMS processor tests.
*
* @package message_sms
* @copyright 2025 Safat Shahin <safat.shahin@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
* @covers \message_output_sms
*/
final class message_output_sms_test extends \advanced_testcase {
/**
* Test the SMS output for the SMS processor.
*/
public function test_sms_output(): void {
global $CFG;
require_once($CFG->dirroot . "/sms/tests/fixtures/dummy_gateway.php");
$this->preventResetByRollback();
$this->resetAfterTest();
$config = new \stdClass();
$config->priority = 50;
$manager = \core\di::get(\core_sms\manager::class);
$manager->create_gateway_instance(
classname: \smsgateway_dummy\gateway::class,
name: 'dummy',
enabled: true,
config: $config,
);
// Set the configs and enable SMS.
\core\plugininfo\message::enable_plugin(
pluginname: 'sms',
enabled: 1,
);
// We have to use assign because this is the only component supports sms at the moment.
set_config('message_provider_mod_assign_assign_due_digest_enabled', 'sms', 'message');
$user = self::getDataGenerator()->create_user();
$user->phone2 = '+61000000000';
$user2 = self::getDataGenerator()->create_user();
$CFG->noreplyuser = $user2->id;
// Send a notification.
$message = new \core\message\message();
$message->component = 'mod_assign';
$message->name = notification_helper::TYPE_DUE_DIGEST;
$message->userfrom = \core_user::get_noreply_user();
$message->userto = $user;
$message->subject = 'Hello';
$message->fullmessageformat = FORMAT_PLAIN;
$message->fullmessage = 'Hello message';
$message->fullmessagehtml = 'Hello message';
$message->smallmessage = 'Hello message';
$message->fullmessagesms = 'Hello sms message';
$message->notification = 1;
message_send($message);
$messagedbrecords = $manager->get_messages();
$this->assertInstanceOf(\Generator::class, $messagedbrecords);
$messages = iterator_to_array($messagedbrecords);
$this->assertCount(1, $messages);
$message = $messages[0];
$this->assertInstanceOf(message::class, $message);
$this->assertIsInt($message->id);
$this->assertEquals(message_status::GATEWAY_QUEUED, $message->status);
$this->assertEquals('Hello sms message', $message->content);
$storedmessage = $manager->get_message(['id' => $message->id]);
$this->assertEquals($message, $storedmessage);
$adhoctask = \core\task\manager::get_adhoc_tasks(send_sms_task::class);
$this->assertCount(1, $adhoctask);
// Now lets run the task and check if SMS is sent.
$this->run_all_adhoc_tasks();
$message = $manager->get_message(['id' => $message->id]);
$this->assertEquals(message_status::GATEWAY_SENT, $message->status);
}
}