RouteTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /**
  3. * Test Rest router route.
  4. *
  5. * Copyright © Magento, Inc. All rights reserved.
  6. * See COPYING.txt for license details.
  7. */
  8. namespace Magento\Webapi\Test\Unit\Controller\Rest\Router;
  9. use \Magento\Webapi\Controller\Rest\Router\Route;
  10. use Magento\Framework\App\RequestInterface as Request;
  11. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  12. class RouteTest extends \PHPUnit\Framework\TestCase
  13. {
  14. /**
  15. * @var ObjectManager
  16. */
  17. protected $objectManager;
  18. /**
  19. * @var Request|\PHPUnit_Framework_MockObject_MockObject
  20. */
  21. protected $request;
  22. protected function setUp()
  23. {
  24. $this->objectManager = new ObjectManager($this);
  25. $this->request = $this->getMockBuilder(\Magento\Framework\App\RequestInterface::class)
  26. ->setMethods(['getPathInfo'])
  27. ->getMockForAbstractClass();
  28. }
  29. /**
  30. * Test setServiceName and getServiceName methods
  31. *
  32. * @return void
  33. */
  34. public function testResourceName()
  35. {
  36. /** @var Route $model */
  37. $model = $this->objectManager->getObject(
  38. \Magento\Webapi\Controller\Rest\Router\Route::class,
  39. ['route' => '/V1/one']
  40. );
  41. /** Assert that new object has no Resource name set. */
  42. $this->assertNull($model->getServiceClass(), 'New object has a set Resource name.');
  43. /** Set Resource name. */
  44. $resourceName = 'Resource name';
  45. $model->setServiceClass($resourceName);
  46. /** Assert that Resource name was set. */
  47. $this->assertEquals($resourceName, $model->getServiceClass(), 'Resource name is wrong.');
  48. }
  49. /**
  50. * @param string $route
  51. * @param string $path
  52. * @param array|bool $params
  53. * @return void
  54. * @dataProvider dataProviderRoutes
  55. */
  56. public function testRoute($route, $path, $params)
  57. {
  58. /** @var Route $model */
  59. $model = $this->objectManager->getObject(
  60. \Magento\Webapi\Controller\Rest\Router\Route::class,
  61. ['route' => $route]
  62. );
  63. $this->request->expects($this->once())
  64. ->method('getPathInfo')
  65. ->willReturn($path);
  66. $match = $model->match($this->request);
  67. $this->assertEquals($params, $match);
  68. }
  69. /**
  70. * @return array
  71. */
  72. public function dataProviderRoutes()
  73. {
  74. return [
  75. // Success
  76. ['/V1/one', '/V1/one', []],
  77. ['/V1/one/:twoValue', '/V1/one/2', ['twoValue' => 2]],
  78. ['/V1/one/two', '/V1/one/two', []],
  79. ['/V1/one/two/:threeValue', '/V1/one/two/3', ['threeValue' => 3]],
  80. ['/V1/one/:twoValue/three', '/V1/one/2/three', ['twoValue' => 2]],
  81. ['/V1/one/:twoValue/three/:fourValue', '/V1/one/2/three/4', ['twoValue' => 2, 'fourValue' => 4]],
  82. ['/V1/one/:twoValue/three/four', '/V1/one/2/three/four', ['twoValue' => 2]],
  83. ['/V1/one/two/:threeValue/four/:fiveValue', '/V1/one/two/3/four/5', ['threeValue' => 3, 'fiveValue' => 5]],
  84. ['/v1/One', '/v1/One', []],
  85. ['/v1/oNe/:TwoValue', '/v1/oNe/2', ['TwoValue' => 2]],
  86. ['/v1/onE/:twovalue', '/v1/onE/2', ['twovalue' => 2]],
  87. ['/V1/one-one', '/V1/one-one', []],
  88. ['/V1/one-one/:twoValue', '/V1/one-one/2', ['twoValue' => 2]],
  89. ['/V1/one_one/:two-value', '/V1/one_one/2', ['two-value' => 2]],
  90. ['/V1/one-one/:two_value', '/V1/one-one/2', ['two_value' => 2]],
  91. // Error
  92. ['/v1/oNe', '/V1/one', false],
  93. ['/v1/onE', '/V1/oNe', false],
  94. ['/v1/One/:twoValue', '/V1/one/2', false],
  95. ['/V1/one', '/V1/two', false],
  96. ['/V1/one/:twoValue', '/V1/one', false],
  97. ['/V1/one/two', '/V1/one', false],
  98. ['/V1/one/two', '/V1/one/two/three', false],
  99. ['/V1/one/:twoValue/three', '/V1/one/two/3', false],
  100. ];
  101. }
  102. }