RouterRulesTest.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. <?php
  2. namespace yiiunit\debug\router;
  3. use yii\debug\models\router\RouterRules;
  4. use yii\web\UrlRule;
  5. use yiiunit\debug\TestCase;
  6. class RouterRulesTest extends TestCase
  7. {
  8. /**
  9. * @test
  10. */
  11. public function shouldDetectPrettyUrlEnabled()
  12. {
  13. $this->mockWebApplication(
  14. [
  15. 'components' => [
  16. 'urlManager' => [
  17. 'enablePrettyUrl' => true,
  18. ],
  19. ],
  20. ]
  21. );
  22. $router = new RouterRules();
  23. $this->assertTrue($router->prettyUrl);
  24. $this->assertFalse($router->strictParsing);
  25. $this->assertNull($router->suffix);
  26. }
  27. /**
  28. * @test
  29. */
  30. public function shouldDetectPrettyUrlDisabled()
  31. {
  32. $this->mockWebApplication(
  33. [
  34. 'components' => [
  35. 'urlManager' => [
  36. 'enablePrettyUrl' => false,
  37. ],
  38. ],
  39. ]
  40. );
  41. $router = new RouterRules();
  42. $this->assertFalse($router->prettyUrl);
  43. $this->assertFalse($router->strictParsing);
  44. $this->assertNull($router->suffix);
  45. }
  46. /**
  47. * @test
  48. */
  49. public function shouldDetectStrictParsingEnabled()
  50. {
  51. $this->mockWebApplication(
  52. [
  53. 'components' => [
  54. 'urlManager' => [
  55. 'enableStrictParsing' => true,
  56. ],
  57. ],
  58. ]
  59. );
  60. $router = new RouterRules();
  61. $this->assertFalse($router->prettyUrl);
  62. $this->assertTrue($router->strictParsing);
  63. $this->assertNull($router->suffix);
  64. }
  65. /**
  66. * @test
  67. */
  68. public function shouldDetectStrictParsingDisabled()
  69. {
  70. $this->mockWebApplication(
  71. [
  72. 'components' => [
  73. 'urlManager' => [
  74. 'enableStrictParsing' => false,
  75. ],
  76. ],
  77. ]
  78. );
  79. $router = new RouterRules();
  80. $this->assertFalse($router->prettyUrl);
  81. $this->assertFalse($router->strictParsing);
  82. $this->assertNull($router->suffix);
  83. }
  84. /**
  85. * @test
  86. */
  87. public function shouldDetectGlobalSuffix()
  88. {
  89. $this->mockWebApplication(
  90. [
  91. 'components' => [
  92. 'urlManager' => [
  93. 'suffix' => 'test',
  94. ],
  95. ],
  96. ]
  97. );
  98. $router = new RouterRules();
  99. $this->assertFalse($router->prettyUrl);
  100. $this->assertFalse($router->strictParsing);
  101. $this->assertSame('test', $router->suffix);
  102. }
  103. public function providerForWebRules()
  104. {
  105. return [
  106. 'simple' => [
  107. ['rule' => 'route'],
  108. [[
  109. 'name' => 'rule',
  110. 'route' => 'route',
  111. 'verb' => null,
  112. 'suffix' => null,
  113. 'mode' => null,
  114. 'type' => null
  115. ]]
  116. ],
  117. 'simple verb' => [
  118. ['GET rule' => 'route'],
  119. [[
  120. 'name' => 'rule',
  121. 'route' => 'route',
  122. 'verb' => ['GET'],
  123. 'suffix' => null,
  124. 'mode' => null,
  125. 'type' => null
  126. ]]
  127. ],
  128. 'simple verb parse' => [
  129. ['POST rule' => 'route'],
  130. [[
  131. 'name' => 'rule',
  132. 'route' => 'route',
  133. 'verb' => ['POST'],
  134. 'suffix' => null,
  135. 'mode' => null,
  136. 'type' => null
  137. ]]
  138. ],
  139. 'custom' => [
  140. [['class' => 'yiiunit\debug\router\CustomRuleStub']],
  141. [[
  142. 'name' => 'yiiunit\debug\router\CustomRuleStub',
  143. 'route' => null,
  144. 'verb' => null,
  145. 'suffix' => null,
  146. 'mode' => null,
  147. 'type' => null
  148. ]]
  149. ],
  150. 'creation only' => [
  151. [['pattern' => 'pattern', 'route' => 'route', 'mode' => UrlRule::CREATION_ONLY]],
  152. [[
  153. 'name' => 'pattern',
  154. 'route' => 'route',
  155. 'verb' => null,
  156. 'suffix' => null,
  157. 'mode' => 'creation only',
  158. 'type' => null
  159. ]]
  160. ],
  161. 'unknown mode' => [
  162. [['pattern' => 'pattern', 'route' => 'route', 'mode' => 999]],
  163. [[
  164. 'name' => 'pattern',
  165. 'route' => 'route',
  166. 'verb' => null,
  167. 'suffix' => null,
  168. 'mode' => 'unknown',
  169. 'type' => null
  170. ]]
  171. ],
  172. 'suffix' => [
  173. [['pattern' => 'pattern', 'route' => 'route', 'suffix' => '.html']],
  174. [[
  175. 'name' => 'pattern',
  176. 'route' => 'route',
  177. 'verb' => null,
  178. 'suffix' => '.html',
  179. 'mode' => null,
  180. 'type' => null
  181. ]]
  182. ],
  183. 'group' => [
  184. [[
  185. 'class' => 'yii\web\GroupUrlRule',
  186. 'prefix' => 'admin',
  187. 'rules' => [
  188. 'login' => 'user/login',
  189. 'logout' => 'user/logout',
  190. ],
  191. ]],
  192. [
  193. [
  194. 'name' => 'admin/login',
  195. 'route' => 'admin/user/login',
  196. 'verb' => null,
  197. 'suffix' => null,
  198. 'mode' => null,
  199. 'type' => 'GROUP'
  200. ],
  201. [
  202. 'name' => 'admin/logout',
  203. 'route' => 'admin/user/logout',
  204. 'verb' => null,
  205. 'suffix' => null,
  206. 'mode' => null,
  207. 'type' => 'GROUP'
  208. ]
  209. ]
  210. ],
  211. 'rest' => [
  212. [['class' => 'yii\rest\UrlRule', 'controller' => 'user']],
  213. [
  214. [
  215. 'name' => 'users/<id:\d[\d,]*>',
  216. 'route' => 'user/update',
  217. 'verb' => ['PUT', 'PATCH'],
  218. 'suffix' => null,
  219. 'mode' => null,
  220. 'type' => 'REST'
  221. ],
  222. [
  223. 'name' => 'users/<id:\d[\d,]*>',
  224. 'route' => 'user/delete',
  225. 'verb' => ['DELETE'],
  226. 'suffix' => null,
  227. 'mode' => null,
  228. 'type' => 'REST'
  229. ],
  230. [
  231. 'name' => 'users/<id:\d[\d,]*>',
  232. 'route' => 'user/view',
  233. 'verb' => ['GET', 'HEAD'],
  234. 'suffix' => null,
  235. 'mode' => null,
  236. 'type' => 'REST'
  237. ],
  238. [
  239. 'name' => 'users',
  240. 'route' => 'user/create',
  241. 'verb' => ['POST'],
  242. 'suffix' => null,
  243. 'mode' => null,
  244. 'type' => 'REST'
  245. ],
  246. [
  247. 'name' => 'users',
  248. 'route' => 'user/index',
  249. 'verb' => ['GET', 'HEAD'],
  250. 'suffix' => null,
  251. 'mode' => null,
  252. 'type' => 'REST'
  253. ],
  254. [
  255. 'name' => 'users/<id:\d[\d,]*>',
  256. 'route' => 'user/options',
  257. 'verb' => [],
  258. 'suffix' => null,
  259. 'mode' => null,
  260. 'type' => 'REST'
  261. ],
  262. [
  263. 'name' => 'users',
  264. 'route' => 'user/options',
  265. 'verb' => [],
  266. 'suffix' => null,
  267. 'mode' => null,
  268. 'type' => 'REST'
  269. ],
  270. ]
  271. ],
  272. ];
  273. }
  274. /**
  275. * @test
  276. * @dataProvider providerForWebRules
  277. * @param array $rules
  278. * @param array $expected
  279. */
  280. public function shouldProperlyScanWebRule($rules, $expected)
  281. {
  282. $this->mockWebApplication(
  283. [
  284. 'components' => [
  285. 'urlManager' => [
  286. 'enablePrettyUrl' => true,
  287. 'rules' => $rules
  288. ],
  289. ],
  290. ]
  291. );
  292. $router = new RouterRules();
  293. $this->assertSame($expected, $router->rules);
  294. }
  295. }