Added external function get service
Signed-off-by: Valentin Popov <info@valentineus.link>
This commit is contained in:
		
							
								
								
									
										224
									
								
								externallib.php
									
									
									
									
									
								
							
							
						
						
									
										224
									
								
								externallib.php
									
									
									
									
									
								
							| @@ -14,211 +14,69 @@ | |||||||
| // You should have received a copy of the GNU General Public License | // You should have received a copy of the GNU General Public License | ||||||
| // along with Moodle.  If not, see <http://www.gnu.org/licenses/>. | // along with Moodle.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * This file defines the plugin's external functions. |  | ||||||
|  * |  | ||||||
|  * @copyright 2018 'Valentin Popov' <info@valentineus.link> |  | ||||||
|  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later |  | ||||||
|  * @package   local_webhooks |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| defined('MOODLE_INTERNAL') || die(); | defined('MOODLE_INTERNAL') || die(); | ||||||
|  |  | ||||||
| require_once($CFG->dirroot . '/local/webhooks/lib.php'); | global $CFG; | ||||||
|  |  | ||||||
|  | require_once($CFG->dirroot . '/local/webhooks/classes/local/api.php'); | ||||||
| require_once($CFG->libdir . '/externallib.php'); | require_once($CFG->libdir . '/externallib.php'); | ||||||
|  |  | ||||||
|  | use local_webhooks\local\api; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * External functions. |  * WebHooks external functions. | ||||||
|  * |  * | ||||||
|  * @copyright 2018 'Valentin Popov' <info@valentineus.link> |  * @copyright 2019 'Valentin Popov' <info@valentineus.link> | ||||||
|  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later |  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||||||
|  * @package   local_webhooks |  | ||||||
|  */ |  */ | ||||||
| class local_webhooks_external extends external_api { | final class local_webhooks_external extends external_api { | ||||||
|  |     /** | ||||||
|  |      * Testing get to a service. | ||||||
|  |      * | ||||||
|  |      * @param int $serviceid Service's ID. | ||||||
|  |      * | ||||||
|  |      * @return \local_webhooks\local\record | ||||||
|  |      * | ||||||
|  |      * @throws \dml_exception | ||||||
|  |      * @throws \invalid_parameter_exception | ||||||
|  |      * @throws \restricted_context_exception | ||||||
|  |      */ | ||||||
|  |     public static function get_service(int $serviceid) { | ||||||
|  |         $parameters = self::validate_parameters(self::get_service_parameters(), ['serviceid' => $serviceid]); | ||||||
|  |  | ||||||
|  |         $context = context_system::instance(); | ||||||
|  |         self::validate_context($context); | ||||||
|  |  | ||||||
|  |         return api::get_service($parameters['serviceid']); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Returns description of method parameters. |      * Returns description of method parameters. | ||||||
|      * |      * | ||||||
|      * @return \external_function_parameters |      * @return \external_function_parameters | ||||||
|      * |  | ||||||
|      * @since Moodle 2.2 |  | ||||||
|      * @since Moodle 2.9 Options available |  | ||||||
|      */ |      */ | ||||||
|     public static function get_service_parameters() { |     public static function get_service_parameters() { | ||||||
|         return new external_function_parameters( |         return new external_function_parameters([ | ||||||
|             array( |             'serviceid' => new external_value(PARAM_INT, 'The service\'s ID.'), | ||||||
|                 'serviceid' => new external_value(PARAM_INT, 'Service ID.'), |         ]); | ||||||
|             ) |  | ||||||
|         ); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Get information about the service. |      * Returns description of method parameters. | ||||||
|      * |  | ||||||
|      * @param $serviceid |  | ||||||
|      * |  | ||||||
|      * @return object |  | ||||||
|      * |  | ||||||
|      * @since Moodle 2.2 |  | ||||||
|      * @since Moodle 2.9 Options available |  | ||||||
|      * |  | ||||||
|      * @throws \dml_exception |  | ||||||
|      * @throws \invalid_parameter_exception |  | ||||||
|      * @throws \moodle_exception |  | ||||||
|      * @throws \restricted_context_exception |  | ||||||
|      */ |  | ||||||
|     public static function get_service($serviceid) { |  | ||||||
|         $parameters = self::validate_parameters(self::get_service_parameters(), array('serviceid' => $serviceid)); |  | ||||||
|  |  | ||||||
|         $context = context_system::instance(); |  | ||||||
|         self::validate_context($context); |  | ||||||
|  |  | ||||||
|         return local_webhooks_api::get_service($parameters['serviceid']); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Returns description of method result value. |  | ||||||
|      * |      * | ||||||
|      * @return \external_single_structure |      * @return \external_single_structure | ||||||
|      * |  | ||||||
|      * @since Moodle 2.2 |  | ||||||
|      * @since Moodle 2.9 Options available |  | ||||||
|      */ |      */ | ||||||
|     public static function get_service_returns() { |     public static function get_service_returns() { | ||||||
|         return new external_single_structure( |         return new external_single_structure([ | ||||||
|             array( |             'header' => new external_value(PARAM_RAW, 'The request\'s header or type'), | ||||||
|                 'id'     => new external_value(PARAM_INT, 'Service ID.'), |             'id'     => new external_value(PARAM_INT, 'The service\'s ID.'), | ||||||
|                 'header' => new external_value(PARAM_RAW, 'Type of outgoing header.'), |             'name'   => new external_value(PARAM_RAW, 'The service\'s name.'), | ||||||
|                 'name'   => new external_value(PARAM_RAW, 'Name of the service.'), |             'point'  => new external_value(PARAM_URL, 'The service\'s endpoint.'), | ||||||
|                 'point'  => new external_value(PARAM_URL, 'Point of delivery of notifications.'), |             'status' => new external_value(PARAM_BOOL, 'The service\'s status.'), | ||||||
|                 'status' => new external_value(PARAM_BOOL, 'Current status of the service.'), |             'token'  => new external_value(PARAM_RAW, 'The service\'s secret key.'), | ||||||
|                 'token'  => new external_value(PARAM_RAW, 'Token for verification of requests.'), |  | ||||||
|             'events' => new external_multiple_structure( |             'events' => new external_multiple_structure( | ||||||
|                     new external_value(PARAM_RAW, 'Event name.'), 'List of events.' |                 new external_value(PARAM_RAW, 'The event\'s name.'), 'The service\'s list events.' | ||||||
|             ), |             ), | ||||||
|             ) |         ]); | ||||||
|         ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Returns description of method parameters. |  | ||||||
|      * |  | ||||||
|      * @return \external_function_parameters |  | ||||||
|      * |  | ||||||
|      * @since Moodle 2.2 |  | ||||||
|      * @since Moodle 2.9 Options available |  | ||||||
|      */ |  | ||||||
|     public static function get_services_parameters() { |  | ||||||
|         return new external_function_parameters(array()); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Get a list of services. |  | ||||||
|      * |  | ||||||
|      * @return array |  | ||||||
|      * |  | ||||||
|      * @since Moodle 2.2 |  | ||||||
|      * @since Moodle 2.9 Options available |  | ||||||
|      * |  | ||||||
|      * @throws \dml_exception |  | ||||||
|      * @throws \invalid_parameter_exception |  | ||||||
|      * @throws \restricted_context_exception |  | ||||||
|      */ |  | ||||||
|     public static function get_services() { |  | ||||||
|         $context = context_system::instance(); |  | ||||||
|         self::validate_context($context); |  | ||||||
|  |  | ||||||
|         return local_webhooks_api::get_services(); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Returns description of method result value. |  | ||||||
|      * |  | ||||||
|      * @return \external_multiple_structure |  | ||||||
|      * |  | ||||||
|      * @since Moodle 2.2 |  | ||||||
|      * @since Moodle 2.9 Options available |  | ||||||
|      */ |  | ||||||
|     public static function get_services_returns() { |  | ||||||
|         return new external_multiple_structure( |  | ||||||
|             new external_single_structure( |  | ||||||
|                 array( |  | ||||||
|                     'id'     => new external_value(PARAM_INT, 'Service ID.'), |  | ||||||
|                     'header' => new external_value(PARAM_RAW, 'Type of outgoing header.'), |  | ||||||
|                     'name'   => new external_value(PARAM_RAW, 'Name of the service.'), |  | ||||||
|                     'point'  => new external_value(PARAM_URL, 'Point of delivery of notifications.'), |  | ||||||
|                     'status' => new external_value(PARAM_BOOL, 'Current status of the service.'), |  | ||||||
|                     'token'  => new external_value(PARAM_RAW, 'Token for verification of requests.'), |  | ||||||
|                     'events' => new external_multiple_structure( |  | ||||||
|                         new external_value(PARAM_RAW, 'Event name.'), 'List of events.' |  | ||||||
|                     ), |  | ||||||
|                 ) |  | ||||||
|             ) |  | ||||||
|         ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Returns description of method parameters. |  | ||||||
|      * |  | ||||||
|      * @return \external_function_parameters |  | ||||||
|      * |  | ||||||
|      * @since Moodle 2.2 |  | ||||||
|      * @since Moodle 2.9 Options available |  | ||||||
|      */ |  | ||||||
|     public static function get_services_by_event_parameters() { |  | ||||||
|         return new external_function_parameters( |  | ||||||
|             array( |  | ||||||
|                 'eventname' => new external_value(PARAM_RAW, 'Event name.'), |  | ||||||
|             ) |  | ||||||
|         ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Get the list of services subscribed to the event. |  | ||||||
|      * |  | ||||||
|      * @param $eventname |  | ||||||
|      * |  | ||||||
|      * @return array |  | ||||||
|      * |  | ||||||
|      * @since Moodle 2.2 |  | ||||||
|      * @since Moodle 2.9 Options available |  | ||||||
|      * |  | ||||||
|      * @throws \dml_exception |  | ||||||
|      * @throws \invalid_parameter_exception |  | ||||||
|      * @throws \moodle_exception |  | ||||||
|      * @throws \restricted_context_exception |  | ||||||
|      */ |  | ||||||
|     public static function get_services_by_event($eventname) { |  | ||||||
|         $parameters = self::validate_parameters(self::get_services_by_event_parameters(), array('eventname' => $eventname)); |  | ||||||
|  |  | ||||||
|         $context = context_system::instance(); |  | ||||||
|         self::validate_context($context); |  | ||||||
|  |  | ||||||
|         return local_webhooks_api::get_services_by_event($parameters['eventname']); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Returns description of method result value. |  | ||||||
|      * |  | ||||||
|      * @return \external_multiple_structure |  | ||||||
|      * |  | ||||||
|      * @since Moodle 2.2 |  | ||||||
|      * @since Moodle 2.9 Options available |  | ||||||
|      */ |  | ||||||
|     public static function get_services_by_event_returns() { |  | ||||||
|         return new external_multiple_structure( |  | ||||||
|             new external_single_structure( |  | ||||||
|                 array( |  | ||||||
|                     'id'     => new external_value(PARAM_INT, 'Service ID.'), |  | ||||||
|                     'header' => new external_value(PARAM_RAW, 'Type of outgoing header.'), |  | ||||||
|                     'name'   => new external_value(PARAM_RAW, 'Name of the service.'), |  | ||||||
|                     'point'  => new external_value(PARAM_URL, 'Point of delivery of notifications.'), |  | ||||||
|                     'status' => new external_value(PARAM_BOOL, 'Current status of the service.'), |  | ||||||
|                     'token'  => new external_value(PARAM_RAW, 'Token for verification of requests.'), |  | ||||||
|                     'events' => new external_multiple_structure( |  | ||||||
|                         new external_value(PARAM_RAW, 'Event name.'), 'List of events.' |  | ||||||
|                     ), |  | ||||||
|                 ) |  | ||||||
|             ) |  | ||||||
|         ); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
							
								
								
									
										78
									
								
								tests/external_test.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								tests/external_test.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | |||||||
|  | <?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/>. | ||||||
|  |  | ||||||
|  | defined('MOODLE_INTERNAL') || die(); | ||||||
|  |  | ||||||
|  | global $CFG; | ||||||
|  |  | ||||||
|  | require_once($CFG->dirroot . '/local/webhooks/externallib.php'); | ||||||
|  | require_once($CFG->dirroot . '/webservice/tests/helpers.php'); | ||||||
|  |  | ||||||
|  | use local_webhooks\local\api; | ||||||
|  | use local_webhooks\local\record; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Testing external functions. | ||||||
|  |  * | ||||||
|  |  * @copyright 2019 'Valentin Popov' <info@valentineus.link> | ||||||
|  |  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||||||
|  |  */ | ||||||
|  | final class local_webhooks_external_testcase extends externallib_advanced_testcase { | ||||||
|  |     /** | ||||||
|  |      * Testing external get record's data. | ||||||
|  |      * | ||||||
|  |      * @throws \ReflectionException | ||||||
|  |      * @throws \coding_exception | ||||||
|  |      * @throws \dml_exception | ||||||
|  |      * @throws \invalid_response_exception | ||||||
|  |      */ | ||||||
|  |     public function test_get_service() { | ||||||
|  |         self::setAdminUser(); | ||||||
|  |  | ||||||
|  |         $this->resetAfterTest(); | ||||||
|  |  | ||||||
|  |         $record = new record(); | ||||||
|  |         $record->events = array_rand(api::get_events(), random_int(2, 10)); | ||||||
|  |         $record->header = 'application/json'; | ||||||
|  |         $record->name = 'Example name'; | ||||||
|  |         $record->point = 'http://example.org/'; | ||||||
|  |         $record->status = true; | ||||||
|  |         $record->token = generate_uuid(); | ||||||
|  |  | ||||||
|  |         // Creating a new record. | ||||||
|  |         $record->id = api::create_service($record); | ||||||
|  |  | ||||||
|  |         $return = local_webhooks_external::get_service($record->id); | ||||||
|  |         $return = external_api::clean_returnvalue(local_webhooks_external::get_service_returns(), $return); | ||||||
|  |         self::assertInternalType('array', $return); | ||||||
|  |  | ||||||
|  |         // Testing the main fields. | ||||||
|  |         self::assertEquals($record->header, $return['header']); | ||||||
|  |         self::assertEquals($record->id, $return['id']); | ||||||
|  |         self::assertEquals($record->name, $return['name']); | ||||||
|  |         self::assertEquals($record->point, $return['point']); | ||||||
|  |         self::assertEquals($record->status, (int) $return['status']); | ||||||
|  |         self::assertEquals($record->token, $return['token']); | ||||||
|  |  | ||||||
|  |         // Testing an event's list. | ||||||
|  |         self::assertInternalType('array', $return['events']); | ||||||
|  |         self::assertNotCount(0, $return['events']); | ||||||
|  |  | ||||||
|  |         foreach ($return['events'] as $event) { | ||||||
|  |             self::assertContains($event, $record->events); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user