Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.10.x will end 8 November 2021 (12 months).
  • Bug fixes for security issues in 3.10.x will end 9 May 2022 (18 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.
<?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/>.

< /** < * External airnotifier functions unit tests < * < * @package message_airnotifier < * @category external < * @copyright 2012 Jerome Mouneyrac < * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later < */
> namespace message_airnotifier; > > use externallib_advanced_testcase; > use message_airnotifier_external;
defined('MOODLE_INTERNAL') || die(); global $CFG; require_once($CFG->dirroot . '/webservice/tests/helpers.php'); /** * External airnotifier functions unit tests * * @package message_airnotifier * @category external * @copyright 2012 Jerome Mouneyrac * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */
< class message_airnotifier_external_testcase extends externallib_advanced_testcase {
> class externallib_test extends externallib_advanced_testcase {
/** * Tests set up */ protected function setUp(): void { global $CFG; require_once($CFG->dirroot . '/message/output/airnotifier/externallib.php'); } /** * Test is_system_configured */ public function test_is_system_configured() { global $DB; $this->resetAfterTest(true); $user = self::getDataGenerator()->create_user(); self::setUser($user); // In a clean installation, it should be not configured. $configured = message_airnotifier_external::is_system_configured();
< $configured = external_api::clean_returnvalue(message_airnotifier_external::is_system_configured_returns(), $configured);
> $configured = \external_api::clean_returnvalue(message_airnotifier_external::is_system_configured_returns(), $configured);
$this->assertEquals(0, $configured); // Fake configuration. set_config('airnotifieraccesskey', random_string()); // Enable the plugin. $DB->set_field('message_processors', 'enabled', 1, array('name' => 'airnotifier')); $configured = message_airnotifier_external::is_system_configured();
< $configured = external_api::clean_returnvalue(message_airnotifier_external::is_system_configured_returns(), $configured);
> $configured = \external_api::clean_returnvalue(message_airnotifier_external::is_system_configured_returns(), $configured);
$this->assertEquals(1, $configured); } /** * Test are_notification_preferences_configured */ public function test_are_notification_preferences_configured() { $this->resetAfterTest(true); $user1 = self::getDataGenerator()->create_user(); $user2 = self::getDataGenerator()->create_user(); $user3 = self::getDataGenerator()->create_user(); self::setUser($user1);
< set_user_preference('message_provider_moodle_instantmessage_loggedin', 'airnotifier', $user1); < set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'airnotifier', $user1); < set_user_preference('message_provider_moodle_instantmessage_loggedin', 'airnotifier', $user2); < set_user_preference('message_provider_moodle_instantmessage_loggedin', 'airnotifier', $user3);
> set_user_preference('message_provider_moodle_instantmessage_enabled', 'airnotifier', $user1); > set_user_preference('message_provider_moodle_instantmessage_enabled', 'airnotifier', $user2);
$params = array($user1->id, $user2->id, $user3->id); $preferences = message_airnotifier_external::are_notification_preferences_configured($params); $returnsdescription = message_airnotifier_external::are_notification_preferences_configured_returns();
< $preferences = external_api::clean_returnvalue($returnsdescription, $preferences);
> $preferences = \external_api::clean_returnvalue($returnsdescription, $preferences);
$expected = array( array( 'userid' => $user1->id, 'configured' => 1 ) ); $this->assertEquals(1, count($preferences['users'])); $this->assertEquals($expected, $preferences['users']); $this->assertEquals(2, count($preferences['warnings'])); // Now, remove one user. delete_user($user2); $preferences = message_airnotifier_external::are_notification_preferences_configured($params);
< $preferences = external_api::clean_returnvalue($returnsdescription, $preferences);
> $preferences = \external_api::clean_returnvalue($returnsdescription, $preferences);
$this->assertEquals(1, count($preferences['users'])); $this->assertEquals($expected, $preferences['users']); $this->assertEquals(2, count($preferences['warnings']));
< // Now, remove one user1 preference (the user still has one prefernce for airnotifier). < unset_user_preference('message_provider_moodle_instantmessage_loggedin', $user1);
> // Now, remove one user1 preference (the user still has one preference for airnotifier). > unset_user_preference('message_provider_moodle_instantmessage_enabled', $user1);
$preferences = message_airnotifier_external::are_notification_preferences_configured($params);
< $preferences = external_api::clean_returnvalue($returnsdescription, $preferences); < $this->assertEquals($expected, $preferences['users']); < < // Delete the last user1 preference. < unset_user_preference('message_provider_moodle_instantmessage_loggedoff', $user1); < $preferences = message_airnotifier_external::are_notification_preferences_configured($params); < $preferences = external_api::clean_returnvalue($returnsdescription, $preferences); < $expected = array( < array( < 'userid' => $user1->id, < 'configured' => 1 < ) < );
> $preferences = \external_api::clean_returnvalue($returnsdescription, $preferences);
$this->assertEquals($expected, $preferences['users']); } /** * Test get_user_devices */ public function test_get_user_devices() { global $CFG, $DB; require_once($CFG->dirroot . '/user/externallib.php'); $this->resetAfterTest(true); $this->setAdminUser(); // System not configured. $devices = message_airnotifier_external::get_user_devices('');
< $devices = external_api::clean_returnvalue(message_airnotifier_external::get_user_devices_returns(), $devices);
> $devices = \external_api::clean_returnvalue(message_airnotifier_external::get_user_devices_returns(), $devices);
$this->assertCount(1, $devices['warnings']); $this->assertEquals('systemnotconfigured', $devices['warnings'][0]['warningcode']); // Fake configuration. set_config('airnotifieraccesskey', random_string()); // Enable the plugin. $DB->set_field('message_processors', 'enabled', 1, array('name' => 'airnotifier')); // Get devices. $devices = message_airnotifier_external::get_user_devices('');
< $devices = external_api::clean_returnvalue(message_airnotifier_external::get_user_devices_returns(), $devices);
> $devices = \external_api::clean_returnvalue(message_airnotifier_external::get_user_devices_returns(), $devices);
$this->assertCount(0, $devices['warnings']); // No devices, unfortunatelly we cannot create devices (we can't mock airnotifier server). $this->assertCount(0, $devices['devices']); } /** * Test get_user_devices permissions */ public function test_get_user_devices_permissions() { global $CFG, $DB; require_once($CFG->dirroot . '/user/externallib.php'); $this->resetAfterTest(true); $user = self::getDataGenerator()->create_user(); $otheruser = self::getDataGenerator()->create_user(); self::setUser($user); // No permission to get other users devices. $this->expectException('required_capability_exception'); $devices = message_airnotifier_external::get_user_devices('', $otheruser->id); } /** * Test enable_device */ public function test_enable_device() { global $USER, $DB; $this->resetAfterTest(true); $this->setAdminUser(); // Add fake core device. $device = array( 'appid' => 'com.moodle.moodlemobile', 'name' => 'occam', 'model' => 'Nexus 4', 'platform' => 'Android', 'version' => '4.2.2', 'pushid' => 'apushdkasdfj4835', 'uuid' => 'asdnfl348qlksfaasef859', 'userid' => $USER->id, 'timecreated' => time(), 'timemodified' => time(), ); $coredeviceid = $DB->insert_record('user_devices', (object) $device); $airnotifierdev = array( 'userdeviceid' => $coredeviceid, 'enable' => 1 ); $airnotifierdevid = $DB->insert_record('message_airnotifier_devices', (object) $airnotifierdev); // Disable and enable. $result = message_airnotifier_external::enable_device($airnotifierdevid, false);
< $result = external_api::clean_returnvalue(message_airnotifier_external::enable_device_returns(), $result);
> $result = \external_api::clean_returnvalue(message_airnotifier_external::enable_device_returns(), $result);
$this->assertCount(0, $result['warnings']); $this->assertTrue($result['success']); $this->assertEquals(0, $DB->get_field('message_airnotifier_devices', 'enable', array('id' => $airnotifierdevid))); $result = message_airnotifier_external::enable_device($airnotifierdevid, true);
< $result = external_api::clean_returnvalue(message_airnotifier_external::enable_device_returns(), $result);
> $result = \external_api::clean_returnvalue(message_airnotifier_external::enable_device_returns(), $result);
$this->assertCount(0, $result['warnings']); $this->assertTrue($result['success']); $this->assertEquals(1, $DB->get_field('message_airnotifier_devices', 'enable', array('id' => $airnotifierdevid))); } }