ActiveTest.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <?php
  2. class ActiveTest extends PHPUnit_Framework_TestCase
  3. {
  4. public function tearDown()
  5. {
  6. Mockery::close();
  7. }
  8. public function testUriMethod()
  9. {
  10. $request = Mockery::mock('\Illuminate\Http\Request');
  11. $request->shouldReceive('getPathInfo')->times(4)->andReturn('/');
  12. $router = Mockery::mock('\Illuminate\Routing\Router');
  13. $router->shouldReceive('getCurrentRequest')->times(4)->andReturn($request);
  14. $active = new \HieuLe\Active\Active($router);
  15. $this->assertEquals('active', $active->uri('/'));
  16. $this->assertEquals('', $active->uri('/*'));
  17. $this->assertEquals('selected', $active->uri('/', 'selected'));
  18. $this->assertEquals('normal', $active->uri('/*', 'selected', 'normal'));
  19. }
  20. public function testPatternMethod()
  21. {
  22. $request = Mockery::mock('\Illuminate\Http\Request');
  23. $request->shouldReceive('path')->times(5)->andReturn('foo/bar/baz');
  24. $router = Mockery::mock('\Illuminate\Routing\Router');
  25. $router->shouldReceive('getCurrentRequest')->times(5)->andReturn($request);
  26. $active = new \HieuLe\Active\Active($router);
  27. $this->assertEquals('active', $active->pattern('foo/*'));
  28. $this->assertEquals('', $active->pattern('foo/'));
  29. $this->assertEquals('normal', $active->pattern('foo/', 'active', 'normal'));
  30. $this->assertEquals('selected', $active->pattern('foo/*', 'selected'));
  31. $this->assertEquals('selected', $active->pattern(['foo/*', '*bar/*'], 'selected'));
  32. }
  33. public function testRouteMethod()
  34. {
  35. $router = Mockery::mock('\Illuminate\Routing\Router');
  36. $router->shouldReceive('currentRouteName')->times(6)->andReturn('foo');
  37. $active = new \HieuLe\Active\Active($router);
  38. $this->assertEquals('active', $active->route('foo'));
  39. $this->assertEquals('selected', $active->route('foo', 'selected'));
  40. $this->assertEquals('active', $active->route(['fooz', 'foo']));
  41. $this->assertEquals('', $active->route([]));
  42. $this->assertEquals('', $active->route('bar'));
  43. $this->assertEquals('normal', $active->route('bar', 'active', 'normal'));
  44. }
  45. public function testRouteWithoutName()
  46. {
  47. $router = Mockery::mock('\Illuminate\Routing\Router');
  48. $router->shouldReceive('currentRouteName')->times(2)->andReturnNull();
  49. $active = new \HieuLe\Active\Active($router);
  50. $this->assertEquals('', $active->route('foo'));
  51. $this->assertEquals('normal', $active->route('foo', 'active', 'normal'));
  52. }
  53. public function testActionMethod()
  54. {
  55. $router = Mockery::mock('\Illuminate\Routing\Router');
  56. $router->shouldReceive('currentRouteAction')->times(4)->andReturn('fooController@bar');
  57. $active = new \HieuLe\Active\Active($router);
  58. $this->assertEquals('active', $active->action('fooController@bar'));
  59. $this->assertEquals('selected', $active->action(['barController@baz', 'fooController@bar'], 'selected'));
  60. $this->assertEquals('', $active->action(['barController@baz', 'fooController@baz'], 'selected'));
  61. $this->assertEquals('normal',
  62. $active->action(['barController@baz', 'fooController@baz'], 'selected', false, 'normal'));
  63. $router->shouldReceive('currentRouteAction')->times(2)->andReturn(null);
  64. $active = new \HieuLe\Active\Active($router);
  65. $this->assertEquals('', $active->action(['barController@baz', 'fooController@baz'], 'selected'));
  66. $this->assertEquals('normal',
  67. $active->action(['barController@baz', 'fooController@baz'], 'selected', false, 'normal'));
  68. $router->shouldReceive('currentRouteAction')->times(4)->andReturn('App\\Http\\Controllers\\fooController@bar');
  69. $active = new \HieuLe\Active\Active($router);
  70. $this->assertEquals('active', $active->action('fooController@bar'));
  71. $this->assertEquals('', $active->action('App\\Http\\Controllers\\fooController@bar'));
  72. $this->assertEquals('active', $active->action('App\\Http\\Controllers\\fooController@bar', 'active', true));
  73. $this->assertEquals('normal', $active->action('fooController@bar', 'active', true, 'normal'));
  74. }
  75. /**
  76. * @dataProvider providerForTestGetControllerMethod
  77. */
  78. public function testGetControllerMethod($controller, $result, $fullClassName = false)
  79. {
  80. $router = Mockery::mock('\Illuminate\Routing\Router');
  81. $router->shouldReceive('currentRouteAction')->once()->andReturn($controller);
  82. $active = new \HieuLe\Active\Active($router);
  83. $this->assertEquals($result, $active->getController());
  84. }
  85. /**
  86. * @dataProvider providerForTestGetMethodName
  87. */
  88. public function testGetMethodName($method, $result)
  89. {
  90. $router = Mockery::mock('\Illuminate\Routing\Router');
  91. $router->shouldReceive('currentRouteAction')->once()->andReturn("Foo@{$method}");
  92. $active = new \HieuLe\Active\Active($router);
  93. $this->assertEquals($result, $active->getMethod());
  94. }
  95. public function testControllerMethod()
  96. {
  97. $router = Mockery::mock('\Illuminate\Routing\Router');
  98. $router->shouldReceive('currentRouteAction')->between(6, 12)->andReturn('FooBarController@getBaz');
  99. $active = new \HieuLe\Active\Active($router);
  100. $this->assertEquals('', $active->controller('Foo'));
  101. $this->assertEquals('active', $active->controller('FooBar'));
  102. $this->assertEquals('selected', $active->controller('FooBar', 'selected'));
  103. $this->assertEquals('selected', $active->controller('FooBar', 'selected', ['Foo']));
  104. $this->assertEquals('', $active->controller('FooBar', 'selected', ['Foo', 'Baz']));
  105. $this->assertEquals('normal', $active->controller('FooBar', 'selected', ['Foo', 'Baz'], 'normal'));
  106. }
  107. public function testControllersMethod()
  108. {
  109. $router = Mockery::mock('\Illuminate\Routing\Router');
  110. $router->shouldReceive('currentRouteAction')->times(3)->andReturn('FooBarController@getBaz');
  111. $active = new \HieuLe\Active\Active($router);
  112. $this->assertEquals('active', $active->controllers(['Foo', 'Bar', 'FooBar']));
  113. $this->assertEquals('', $active->controllers(['Foo', 'Bar']));
  114. $this->assertEquals('normal', $active->controllers(['Foo', 'Bar'], 'selected', 'normal'));
  115. }
  116. public function testRoutePatternMethod()
  117. {
  118. $router = Mockery::mock('\Illuminate\Routing\Router');
  119. $router->shouldReceive('currentRouteName')->times(5)->andReturn('prefix.foo.create');
  120. $active = new HieuLe\Active\Active($router);
  121. $this->assertEquals('active', $active->routePattern('*.foo.*'));
  122. $this->assertEquals('', $active->routePattern('*.foo'));
  123. $this->assertEquals('normal', $active->routePattern('*.foo', 'active', 'normal'));
  124. $this->assertEquals('selected', $active->routePattern('*.foo.*', 'selected'));
  125. $this->assertEquals('active', $active->routePattern('*.create'));
  126. }
  127. public function testQueryMethod()
  128. {
  129. $request = Mockery::mock('\Illuminate\Http\Request');
  130. $request->shouldReceive('query')->times(6)->andReturnUsing(function ($arg) {
  131. switch ($arg) {
  132. case 'foo':
  133. return 'bar';
  134. case 'lorems':
  135. return ['baz', 'ipsum'];
  136. }
  137. return null;
  138. });
  139. $router = Mockery::mock('\Illuminate\Routing\Router');
  140. $router->shouldReceive('getCurrentRequest')->times(6)->andReturn($request);
  141. $active = new \HieuLe\Active\Active($router);
  142. $this->assertEquals('active', $active->query('foo', 'bar'));
  143. $this->assertEquals('', $active->query('foo', 'barr'));
  144. $this->assertEquals('normal', $active->query('foo', 'barr', 'active', 'normal'));
  145. $this->assertEquals('selected', $active->query('lorems', 'baz', 'selected'));
  146. $this->assertEquals('', $active->query('lorems', 'bazz', 'selected'));
  147. $this->assertEquals('normal', $active->query('lorems', 'bazz', 'selected', 'normal'));
  148. }
  149. public function testRouteParameter()
  150. {
  151. $route = Mockery::mock(\Illuminate\Routing\Route::class);
  152. $route->shouldReceive('getName')->andReturn('foo');
  153. $route->shouldReceive('parameter')->andReturnUsing(function ($name) {
  154. switch ($name) {
  155. case 'id':
  156. return 1;
  157. case 'bar':
  158. return 'lorem';
  159. default:
  160. return null;
  161. }
  162. });
  163. $router = Mockery::mock('\Illuminate\Routing\Router');
  164. $router->shouldReceive('current')->andReturn($route);
  165. $active = new HieuLe\Active\Active($router);
  166. $this->assertSame('', $active->routeParam('bar', []));
  167. $this->assertSame('active', $active->routeParam('foo', []));
  168. $this->assertSame('active', $active->routeParam('foo', [
  169. 'id' => 1,
  170. ]));
  171. $this->assertSame('active', $active->routeParam('foo', [
  172. 'id' => 1,
  173. 'bar' => 'lorem',
  174. ]));
  175. $this->assertSame('', $active->routeParam('foo', [
  176. 'id' => 1,
  177. 'bar' => 'lorem',
  178. 'baz' => 'ipsum'
  179. ]));
  180. $this->assertSame('', $active->routeParam('foo', [
  181. 'id' => 2,
  182. 'bar' => 'lorem',
  183. ]));
  184. }
  185. public function testRouteParameterWithEmptyRoute()
  186. {
  187. $router = Mockery::mock('\Illuminate\Routing\Router');
  188. $router->shouldReceive('current')->andReturn(null);
  189. $active = new HieuLe\Active\Active($router);
  190. $this->assertSame('', $active->routeParam('foo', []));
  191. }
  192. public function providerForTestGetControllerMethod()
  193. {
  194. return [
  195. ['FooController', 'Foo'],
  196. ['App\Http\Controllers\WelcomeController', 'App\Http\Controllers\Welcome'],
  197. ['SomethingControllerBazController', 'SomethingControllerBaz'],
  198. ['BazControllerFoo', 'BazControllerFoo'],
  199. ];
  200. }
  201. public function providerForTestGetMethodName()
  202. {
  203. return [
  204. ['showWelcome', 'Welcome'],
  205. ['getFoo', 'Foo'],
  206. ['postFoo', 'Foo'],
  207. ['deleteBar', 'Bar'],
  208. ['putBar', 'Bar'],
  209. ['postFooBaz', 'FooBaz'],
  210. ['deleteFooget', 'Fooget'],
  211. ['doShowpost', 'doShowpost'],
  212. ['show', 'show'],
  213. ];
  214. }
  215. }