1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * Provides \core\update\testable_api class. 19 * 20 * @package core_plugin 21 * @subpackage fixtures 22 * @category test 23 * @copyright 2015 David Mudrak <david@moodle.com> 24 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 25 */ 26 27 namespace core\update; 28 29 defined('MOODLE_INTERNAL') || die(); 30 31 /** 32 * Testable variant of \core\update\api class. 33 * 34 * Provides access to some protected methods we want to explicitly test and 35 * bypass the actual cURL calls by providing fake responses. 36 * 37 * @copyright 2015 David Mudrak <david@moodle.com> 38 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 39 */ 40 class testable_api extends api { 41 42 /** 43 * Provides access to the parent protected method. 44 * 45 * @param int $branch 46 * @return string 47 */ 48 public function convert_branch_numbering_format($branch) { 49 return parent::convert_branch_numbering_format($branch); 50 } 51 52 /** 53 * Returns fake URL of the pluginfo.php API end-point. 54 * 55 * @return string 56 */ 57 protected function get_serviceurl_pluginfo() { 58 return 'http://testab.le/api/pluginfo.php'; 59 } 60 61 /** 62 * Mimics the call to the given end-point service with the given parameters. 63 * 64 * This simulates a hypothetical plugins directory with a single plugin 65 * 'foo_bar' available (with a single release). 66 * 67 * @param string $serviceurl 68 * @param array $params 69 * @return stdClass|bool 70 */ 71 protected function call_service($serviceurl, array $params=array()) { 72 73 $response = (object)array( 74 'data' => null, 75 'info' => null, 76 'status' => null, 77 ); 78 79 $foobarinfo = (object)array( 80 'status' => 'OK', 81 'apiver' => '1.3', 82 'pluginfo' => (object)array( 83 'id' => 42, 84 'name' => 'Foo bar', 85 'component' => 'foo_bar', 86 'source' => '', 87 'doc' => '', 88 'bugs' => '', 89 'discussion' => '', 90 'version' => false, 91 ), 92 ); 93 94 $version2015093000info = (object)array( 95 'id' => '6765', 96 'version' => '2015093000', 97 'release' => '1.0', 98 'maturity' => '200', 99 'downloadurl' => 'http://mood.le/plugins/foo_bar/2015093000.zip', 100 'downloadmd5' => 'd41d8cd98f00b204e9800998ecf8427e', 101 'vcssystem' => '', 102 'vcssystemother' => '', 103 'vcsrepositoryurl' => '', 104 'vcsbranch' => '', 105 'vcstag' => '', 106 'supportedmoodles' => array( 107 (object)array( 108 'version' => '2015041700', 109 'release' => '2.9' 110 ), 111 (object)array( 112 'version' => '2015110900', 113 'release' => '3.0' 114 ), 115 ) 116 ); 117 118 $version2015100400info = (object)array( 119 'id' => '6796', 120 'version' => '2015100400', 121 'release' => '1.1', 122 'maturity' => '200', 123 'downloadurl' => 'http://mood.le/plugins/foo_bar/2015100400.zip', 124 'downloadmd5' => 'd41d8cd98f00b204e9800998ecf8427e', 125 'vcssystem' => '', 126 'vcssystemother' => '', 127 'vcsrepositoryurl' => '', 128 'vcsbranch' => '', 129 'vcstag' => '', 130 'supportedmoodles' => array( 131 (object)array( 132 'version' => '2015110900', 133 'release' => '3.0' 134 ), 135 ) 136 ); 137 138 $version2015100500info = (object)array( 139 'id' => '6799', 140 'version' => '2015100500', 141 'release' => '2.0beta', 142 'maturity' => '100', 143 'downloadurl' => 'http://mood.le/plugins/foo_bar/2015100500.zip', 144 'downloadmd5' => 'd41d8cd98f00b204e9800998ecf8427e', 145 'vcssystem' => '', 146 'vcssystemother' => '', 147 'vcsrepositoryurl' => '', 148 'vcsbranch' => '', 149 'vcstag' => '', 150 'supportedmoodles' => array( 151 (object)array( 152 'version' => '2015110900', 153 'release' => '3.0' 154 ), 155 ) 156 ); 157 158 if ($serviceurl === 'http://testab.le/api/pluginfo.php') { 159 if (strpos($params['plugin'], 'foo_bar@') === 0) { 160 $response->data = $foobarinfo; 161 $response->info = array( 162 'http_code' => 200, 163 ); 164 $response->status = '200 OK'; 165 166 if (substr($params['plugin'], -11) === '@2015093000') { 167 $response->data->pluginfo->version = $version2015093000info; 168 } 169 170 if (substr($params['plugin'], -11) === '@2015100400') { 171 $response->data->pluginfo->version = $version2015100400info; 172 } 173 174 if (substr($params['plugin'], -11) === '@2015100500') { 175 $response->data->pluginfo->version = $version2015100500info; 176 } 177 178 } else if ($params['plugin'] === 'foo_bar' and isset($params['branch']) and isset($params['minversion'])) { 179 $response->data = $foobarinfo; 180 $response->info = array( 181 'http_code' => 200, 182 ); 183 $response->status = '200 OK'; 184 185 if ($params['minversion'] <= 2015100400) { 186 // If two stable versions fullfilling the required version are 187 // available, the /1.3/pluginfo.php API returns the more recent one. 188 $response->data->pluginfo->version = $version2015100400info; 189 190 } else if ($params['minversion'] <= 2015100500) { 191 // The /1.3/pluginfo.php API returns versions with lower 192 // maturity if it is the only way how to fullfil the 193 // required minimal version. 194 $response->data->pluginfo->version = $version2015100500info; 195 } 196 197 } else { 198 $response->info = array( 199 'http_code' => 404, 200 ); 201 $response->status = '404 Not Found (unknown plugin)'; 202 } 203 204 return $response; 205 206 } else { 207 return 'This should not happen'; 208 } 209 } 210 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body