CarrierViewTest.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <?php
  2. /**
  3. * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
  4. */
  5. namespace Temando\Shipping\ViewModel\Carrier;
  6. use Magento\TestFramework\Helper\Bootstrap;
  7. use Magento\TestFramework\Request;
  8. use Temando\Shipping\Model\Carrier;
  9. use Temando\Shipping\Model\CarrierInterface;
  10. use Temando\Shipping\ViewModel\DataProvider\EntityUrlInterface;
  11. use Temando\Shipping\ViewModel\PageActionsInterface;
  12. use Temando\Shipping\ViewModel\ShippingApiInterface;
  13. /**
  14. * Temando Carrier View Model Test
  15. *
  16. * @package Temando\Shipping\Test\Integration
  17. * @author Christoph Aßmann <christoph.assmann@netresearch.de>
  18. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  19. * @link http://www.temando.com/
  20. */
  21. class CarrierViewTest extends \PHPUnit\Framework\TestCase
  22. {
  23. /**
  24. * @return CarrierInterface
  25. */
  26. private function getCarrier()
  27. {
  28. $carrier = Bootstrap::getObjectManager()->create(Carrier::class, ['data' => [
  29. CarrierInterface::NAME => 'Foo Carrier',
  30. CarrierInterface::CONFIGURATION_ID => '00000000-5000-0005-0000-000000000000',
  31. CarrierInterface::INTEGRATION_ID => 'carrier-integration-foo',
  32. ]]);
  33. return $carrier;
  34. }
  35. /**
  36. * @test
  37. */
  38. public function backButtonIsAvailableInEditComponents()
  39. {
  40. /** @var CarrierEdit $carrierEdit */
  41. $carrierEdit = Bootstrap::getObjectManager()->get(CarrierEdit::class);
  42. $this->assertInstanceOf(PageActionsInterface::class, $carrierEdit);
  43. $actions = $carrierEdit->getMainActions();
  44. $this->assertNotEmpty($actions);
  45. $this->assertInternalType('array', $actions);
  46. $this->assertArrayHasKey('back', $actions);
  47. }
  48. /**
  49. * @test
  50. */
  51. public function backButtonIsNotAvailableInRegistrationComponents()
  52. {
  53. /** @var CarrierRegistration $carrierRegistration */
  54. $carrierRegistration = Bootstrap::getObjectManager()->get(CarrierRegistration::class);
  55. $this->assertNotInstanceOf(PageActionsInterface::class, $carrierRegistration);
  56. }
  57. /**
  58. * @test
  59. * @magentoConfigFixture default/carriers/temando/session_endpoint https://auth.temando.io/v1/
  60. * @magentoConfigFixture default/carriers/temando/sovereign_endpoint https://foo.temando.io/v1/
  61. */
  62. public function shippingApiCredentialsAreAvailableInCarrierComponents()
  63. {
  64. /** @var CarrierEdit $carrierEdit */
  65. $carrierEdit = Bootstrap::getObjectManager()->get(CarrierEdit::class);
  66. $this->assertInstanceOf(ShippingApiInterface::class, $carrierEdit);
  67. $this->assertEquals('https://foo.temando.io/v1/', $carrierEdit->getShippingApiAccess()->getApiEndpoint());
  68. /** @var CarrierRegistration $carrierRegistration */
  69. $carrierRegistration = Bootstrap::getObjectManager()->get(CarrierRegistration::class);
  70. $this->assertInstanceOf(ShippingApiInterface::class, $carrierRegistration);
  71. $this->assertEquals(
  72. 'https://foo.temando.io/v1/',
  73. $carrierRegistration->getShippingApiAccess()->getApiEndpoint()
  74. );
  75. }
  76. /**
  77. * @test
  78. */
  79. public function carrierIdsAreAvailableInEditComponent()
  80. {
  81. $carrier = $this->getCarrier();
  82. $request = $this->getMockBuilder(Request::class)
  83. ->setMethods(['getParam'])
  84. ->disableOriginalConstructor()
  85. ->getMock();
  86. $request
  87. ->expects($this->exactly(2))
  88. ->method('getParam')
  89. ->withConsecutive(
  90. [CarrierInterface::CONFIGURATION_ID, null],
  91. [CarrierInterface::INTEGRATION_ID, null]
  92. )
  93. ->willReturnOnConsecutiveCalls($carrier->getConfigurationId(), $carrier->getIntegrationId());
  94. /** @var CarrierEdit $carrierEdit */
  95. $carrierEdit = Bootstrap::getObjectManager()->create(CarrierEdit::class, [
  96. 'request' => $request,
  97. ]);
  98. $this->assertEquals($carrier->getConfigurationId(), $carrierEdit->getCarrierConfigurationId());
  99. $this->assertEquals($carrier->getIntegrationId(), $carrierEdit->getCarrierIntegrationId());
  100. }
  101. /**
  102. * @test
  103. */
  104. public function carrierIntegrationIdIsAvailableInRegistrationComponent()
  105. {
  106. $carrier = $this->getCarrier();
  107. $request = $this->getMockBuilder(Request::class)
  108. ->setMethods(['getParam'])
  109. ->disableOriginalConstructor()
  110. ->getMock();
  111. $request
  112. ->expects($this->once())
  113. ->method('getParam')
  114. ->with(CarrierInterface::INTEGRATION_ID)
  115. ->willReturn($carrier->getIntegrationId());
  116. /** @var CarrierRegistration $carrierRegistration */
  117. $carrierRegistration = Bootstrap::getObjectManager()->create(CarrierRegistration::class, [
  118. 'request' => $request,
  119. ]);
  120. $this->assertEquals($carrier->getIntegrationId(), $carrierRegistration->getCarrierIntegrationId());
  121. }
  122. /**
  123. * @test
  124. */
  125. public function entityUrlsAreAvailableInCarrierComponents()
  126. {
  127. /** @var Carrier $carrier */
  128. $carrier = $this->getCarrier();
  129. /** @var CarrierEdit $carrierEdit */
  130. $carrierEdit = Bootstrap::getObjectManager()->get(CarrierEdit::class);
  131. $this->assertInstanceOf(EntityUrlInterface::class, $carrierEdit->getCarrierUrl());
  132. /** @var CarrierRegistration $carrierRegistration */
  133. $carrierRegistration = Bootstrap::getObjectManager()->get(CarrierRegistration::class);
  134. $this->assertInstanceOf(EntityUrlInterface::class, $carrierRegistration->getCarrierUrl());
  135. // application does not provide view action for carriers
  136. $this->assertEmpty($carrierRegistration->getCarrierUrl()->getViewActionUrl($carrier->getData()));
  137. $this->assertContains('new', $carrierRegistration->getCarrierUrl()->getNewActionUrl());
  138. $this->assertContains('index', $carrierRegistration->getCarrierUrl()->getListActionUrl());
  139. $this->assertContains('register', $carrierRegistration->getCarrierUrl()->getCarrierRegistrationPageUrl());
  140. $editUrl = $carrierRegistration->getCarrierUrl()->getEditActionUrl($carrier->getData());
  141. $this->assertContains('edit', $editUrl);
  142. $this->assertContains($carrier->getConfigurationId(), $editUrl);
  143. $this->assertContains($carrier->getIntegrationId(), $editUrl);
  144. $deleteUrl = $carrierRegistration->getCarrierUrl()->getDeleteActionUrl($carrier->getData());
  145. $this->assertContains('delete', $deleteUrl);
  146. $this->assertContains($carrier->getConfigurationId(), $deleteUrl);
  147. $this->assertNotContains($carrier->getIntegrationId(), $deleteUrl);
  148. }
  149. /**
  150. * @test
  151. */
  152. public function maliciousParamValuesGetStripped()
  153. {
  154. $badIntegrationId = '<script>alert("integration");</script>';
  155. $badConfigId = '<script>alert("config");</script>';
  156. $request = $this->getMockBuilder(Request::class)
  157. ->setMethods(['getParam'])
  158. ->disableOriginalConstructor()
  159. ->getMock();
  160. $request
  161. ->expects($this->exactly(3))
  162. ->method('getParam')
  163. ->withConsecutive(
  164. [CarrierInterface::INTEGRATION_ID, null],
  165. [CarrierInterface::INTEGRATION_ID, null],
  166. [CarrierInterface::CONFIGURATION_ID, null]
  167. )
  168. ->willReturnOnConsecutiveCalls($badIntegrationId, $badIntegrationId, $badConfigId);
  169. /** @var CarrierRegistration $carrierRegistration */
  170. $carrierRegistration = Bootstrap::getObjectManager()->create(CarrierRegistration::class, [
  171. 'request' => $request,
  172. ]);
  173. $this->assertRegExp('/^[\w0-9-_]+$/', $carrierRegistration->getCarrierIntegrationId());
  174. /** @var CarrierEdit $carrierEdit */
  175. $carrierEdit = Bootstrap::getObjectManager()->create(CarrierEdit::class, [
  176. 'request' => $request,
  177. ]);
  178. $this->assertRegExp('/^[\w0-9-_]+$/', $carrierEdit->getCarrierIntegrationId());
  179. $this->assertRegExp('/^[\w0-9-_]+$/', $carrierEdit->getCarrierConfigurationId());
  180. }
  181. }