/tests/cases/console/command/RouteTest.php

https://github.com/k2052/arthur · PHP · 224 lines · 185 code · 39 blank · 0 comment · 1 complexity · 12d92493b30038060e6d45e737fca8ac MD5 · raw file

  1. <?php
  2. namespace arthur\tests\cases\console\command;
  3. use arthur\console\command\Route;
  4. use arthur\console\Request;
  5. use arthur\net\http\Router;
  6. class RouteTest extends \arthur\test\Unit
  7. {
  8. protected $_config = array('routes_file' => '');
  9. protected $_testPath = null;
  10. public function skip()
  11. {
  12. $this->_testPath = ARTHUR_APP_PATH . '/resources/tmp/tests';
  13. $this->skipIf(!is_writable($this->_testPath), "{$this->_testPath} is not writable.");
  14. }
  15. public function setUp()
  16. {
  17. $this->_config['routes_file'] = "{$this->_testPath}/routes.php";
  18. $testParams = 'array("controller" => "arthur\test\Controller")';
  19. $content = array(
  20. '<?php',
  21. 'use arthur\net\http\Router;',
  22. 'use arthur\core\Environment;',
  23. 'Router::connect("/", "Pages::view");',
  24. 'Router::connect("/pages/{:args}", "Pages::view");',
  25. 'if (!Environment::is("production")) {',
  26. 'Router::connect("/test/{:args}", ' . $testParams . ');',
  27. 'Router::connect("/test", ' . $testParams . ');',
  28. '}',
  29. '?>'
  30. );
  31. file_put_contents($this->_config['routes_file'], join("\n", $content));
  32. Router::reset();
  33. }
  34. public function tearDown()
  35. {
  36. if(file_exists($this->_config['routes_file']))
  37. unlink($this->_config['routes_file']);
  38. }
  39. public function testEnvironment()
  40. {
  41. $command = new Route();
  42. $expected = 'development';
  43. $this->assertEqual($expected, $command->env);
  44. $request = new Request();
  45. $request->params['env'] = 'production';
  46. $command = new Route(array('request' => $request));
  47. $expected = 'production';
  48. $this->assertEqual($expected, $command->env);
  49. }
  50. public function testRouteLoading()
  51. {
  52. $this->assertFalse(Router::get());
  53. $command = new Route(array('routes_file' => $this->_config['routes_file']));
  54. $this->assertEqual(4, count(Router::get()));
  55. Router::reset();
  56. $request = new Request();
  57. $request->params['env'] = 'production';
  58. $command = new Route(array(
  59. 'routes_file' => $this->_config['routes_file'],
  60. 'request' => $request
  61. ));
  62. $this->assertEqual(2, count(Router::get()));
  63. }
  64. public function testAllWithoutEnvironment()
  65. {
  66. $command = new Route(array(
  67. 'routes_file' => $this->_config['routes_file'],
  68. 'classes' => array('response' => '\arthur\tests\mocks\console\MockResponse'),
  69. 'request' => new Request()
  70. ));
  71. $command->all();
  72. $expected = 'TemplateParams--------------
  73. /{"controller":"pages","action":"view"}
  74. /pages/{:args}{"controller":"pages","action":"view"}
  75. /test/{:args}{"controller":"arthur\\test\\\\Controller","action":"index"}
  76. /test{"controller":"arthur\\test\\\\Controller","action":"index"}';
  77. $this->assertEqual($this->_strip($expected),$this->_strip($command->response->output));
  78. }
  79. public function testAllWithEnvironment()
  80. {
  81. $request = new Request();
  82. $request->params = array(
  83. 'env' => 'production'
  84. );
  85. $command = new Route(array(
  86. 'routes_file' => $this->_config['routes_file'],
  87. 'classes' => array('response' => '\arthur\tests\mocks\console\MockResponse'),
  88. 'request' => $request
  89. ));
  90. $command->all();
  91. $expected = 'TemplateParams--------------
  92. /{"controller":"pages","action":"view"}
  93. /pages/{:args}{"controller":"pages","action":"view"}';
  94. $this->assertEqual($this->_strip($expected),$this->_strip($command->response->output));
  95. }
  96. public function testRun()
  97. {
  98. $command = new Route(array(
  99. 'routes_file' => $this->_config['routes_file'],
  100. 'classes' => array('response' => '\arthur\tests\mocks\console\MockResponse'),
  101. 'request' => new Request()
  102. ));
  103. $command->run();
  104. $expected = 'TemplateParams--------------
  105. /{"controller":"pages","action":"view"}
  106. /pages/{:args}{"controller":"pages","action":"view"}
  107. /test/{:args}{"controller":"arthur\\test\\\\Controller","action":"index"}
  108. /test{"controller":"arthur\\test\\\\Controller","action":"index"}';
  109. $this->assertEqual($this->_strip($expected),$this->_strip($command->response->output));
  110. }
  111. public function testShowWithNoRoute()
  112. {
  113. $command = new Route(array(
  114. 'routes_file' => $this->_config['routes_file'],
  115. 'classes' => array('response' => '\arthur\tests\mocks\console\MockResponse'),
  116. 'request' => new Request()
  117. ));
  118. $command->show();
  119. $expected = "Please provide a valid URL\n";
  120. $this->assertEqual($expected, $command->response->error);
  121. }
  122. public function testShowWithInvalidRoute()
  123. {
  124. $request = new Request();
  125. $request->params = array(
  126. 'args' => array('/foobar')
  127. );
  128. $command = new Route(array(
  129. 'routes_file' => $this->_config['routes_file'],
  130. 'classes' => array('response' => '\arthur\tests\mocks\console\MockResponse'),
  131. 'request' => $request
  132. ));
  133. $command->show();
  134. $expected = "No route found.\n";
  135. $this->assertEqual($expected, $command->response->output);
  136. }
  137. public function testShowWithValidRoute()
  138. {
  139. $request = new Request();
  140. $request->params = array('args' => array('/'));
  141. $command = new Route(array(
  142. 'routes_file' => $this->_config['routes_file'],
  143. 'classes' => array('response' => '\arthur\tests\mocks\console\MockResponse'),
  144. 'request' => $request
  145. ));
  146. $command->show();
  147. $expected = "{\"controller\":\"pages\",\"action\":\"view\"}\n";
  148. $this->assertEqual($expected, $command->response->output);
  149. }
  150. public function testShowWithEnvironment()
  151. {
  152. $request = new Request();
  153. $request->params = array(
  154. 'env' => 'production',
  155. 'args' => array('/test')
  156. );
  157. $command = new Route(array(
  158. 'routes_file' => $this->_config['routes_file'],
  159. 'classes' => array('response' => '\arthur\tests\mocks\console\MockResponse'),
  160. 'request' => $request
  161. ));
  162. $command->show();
  163. $expected = "No route found.\n";
  164. $this->assertEqual($expected, $command->response->output);
  165. }
  166. public function testShowWithHttpMethod()
  167. {
  168. $request = new Request();
  169. $request->params = array(
  170. 'args' => array('post', '/')
  171. );
  172. $command = new Route(array(
  173. 'routes_file' => $this->_config['routes_file'],
  174. 'classes' => array('response' => '\arthur\tests\mocks\console\MockResponse'),
  175. 'request' => $request
  176. ));
  177. $command->show();
  178. $expected = "{\"controller\":\"pages\",\"action\":\"view\"}\n";
  179. $this->assertEqual($expected, $command->response->output);
  180. }
  181. protected function _strip($str)
  182. {
  183. return preg_replace('/\s/', '', $str);
  184. }
  185. }