PackagingViewTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. /**
  3. * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
  4. */
  5. namespace Temando\Shipping\ViewModel\Packaging;
  6. use Magento\TestFramework\Helper\Bootstrap;
  7. use Magento\TestFramework\Request;
  8. use Temando\Shipping\Model\Packaging;
  9. use Temando\Shipping\Model\PackagingInterface;
  10. use Temando\Shipping\ViewModel\DataProvider\EntityUrlInterface;
  11. use Temando\Shipping\ViewModel\PageActionsInterface;
  12. use Temando\Shipping\ViewModel\ShippingApiInterface;
  13. /**
  14. * Temando Packaging 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 PackagingViewTest extends \PHPUnit\Framework\TestCase
  22. {
  23. /**
  24. * @return PackagingInterface
  25. */
  26. private function getPackaging()
  27. {
  28. $packaging = Bootstrap::getObjectManager()->create(Packaging::class, ['data' => [
  29. PackagingInterface::NAME => 'Foo Packaging',
  30. PackagingInterface::PACKAGING_ID => '00000000-6000-0006-0000-000000000000',
  31. ]]);
  32. return $packaging;
  33. }
  34. /**
  35. * @test
  36. */
  37. public function backButtonIsAvailableInEditComponents()
  38. {
  39. /** @var PackagingEdit $packagingEdit */
  40. $packagingEdit = Bootstrap::getObjectManager()->get(PackagingEdit::class);
  41. $this->assertInstanceOf(PageActionsInterface::class, $packagingEdit);
  42. $actions = $packagingEdit->getMainActions();
  43. $this->assertNotEmpty($actions);
  44. $this->assertInternalType('array', $actions);
  45. $this->assertArrayHasKey('back', $actions);
  46. }
  47. /**
  48. * @test
  49. * @magentoConfigFixture default/carriers/temando/session_endpoint https://auth.temando.io/v1/
  50. * @magentoConfigFixture default/carriers/temando/sovereign_endpoint https://foo.temando.io/v1/
  51. */
  52. public function shippingApiCredentialsAreAvailableInPackagingComponents()
  53. {
  54. /** @var PackagingEdit $packagingEdit */
  55. $packagingEdit = Bootstrap::getObjectManager()->get(PackagingEdit::class);
  56. $this->assertInstanceOf(ShippingApiInterface::class, $packagingEdit);
  57. $this->assertEquals('https://foo.temando.io/v1/', $packagingEdit->getShippingApiAccess()->getApiEndpoint());
  58. }
  59. /**
  60. * @test
  61. */
  62. public function packagingIdIsAvailableInEditComponent()
  63. {
  64. $packaging = $this->getPackaging();
  65. $request = $this->getMockBuilder(Request::class)
  66. ->setMethods(['getParam'])
  67. ->disableOriginalConstructor()
  68. ->getMock();
  69. $request
  70. ->expects($this->exactly(1))
  71. ->method('getParam')
  72. ->with(PackagingInterface::PACKAGING_ID)
  73. ->willReturn($packaging->getPackagingId());
  74. /** @var PackagingEdit $packagingEdit */
  75. $packagingEdit = Bootstrap::getObjectManager()->create(PackagingEdit::class, [
  76. 'request' => $request,
  77. ]);
  78. $this->assertEquals($packaging->getPackagingId(), $packagingEdit->getPackagingId());
  79. }
  80. /**
  81. * @test
  82. */
  83. public function entityUrlsAreAvailableInPackagingComponents()
  84. {
  85. /** @var Packaging $packaging */
  86. $packaging = $this->getPackaging();
  87. /** @var PackagingEdit $packagingEdit */
  88. $packagingEdit = Bootstrap::getObjectManager()->get(PackagingEdit::class);
  89. $this->assertInstanceOf(EntityUrlInterface::class, $packagingEdit->getPackagingUrl());
  90. // application does not provide view action for containers
  91. $this->assertEmpty($packagingEdit->getPackagingUrl()->getViewActionUrl($packaging->getData()));
  92. $this->assertContains('new', $packagingEdit->getPackagingUrl()->getNewActionUrl());
  93. $this->assertContains('index', $packagingEdit->getPackagingUrl()->getListActionUrl());
  94. $editUrl = $packagingEdit->getPackagingUrl()->getEditActionUrl($packaging->getData());
  95. $this->assertContains('edit', $editUrl);
  96. $this->assertContains($packaging->getPackagingId(), $editUrl);
  97. $deleteUrl = $packagingEdit->getPackagingUrl()->getDeleteActionUrl($packaging->getData());
  98. $this->assertContains('delete', $deleteUrl);
  99. $this->assertContains($packaging->getPackagingId(), $deleteUrl);
  100. }
  101. /**
  102. * @test
  103. */
  104. public function maliciousParamValuesGetStripped()
  105. {
  106. $badPackagingId = '<script>alert("packaging");</script>';
  107. $request = $this->getMockBuilder(Request::class)
  108. ->setMethods(['getParam'])
  109. ->disableOriginalConstructor()
  110. ->getMock();
  111. $request
  112. ->expects($this->exactly(1))
  113. ->method('getParam')
  114. ->with(PackagingInterface::PACKAGING_ID)
  115. ->willReturn($badPackagingId);
  116. /** @var PackagingEdit $packagingEdit */
  117. $packagingEdit = Bootstrap::getObjectManager()->create(PackagingEdit::class, [
  118. 'request' => $request,
  119. ]);
  120. $this->assertRegExp('/^[\w0-9-_]+$/', $packagingEdit->getPackagingId());
  121. }
  122. }