RefreshTokenTest.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <?php
  2. /**
  3. * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
  4. */
  5. namespace Temando\Shipping\Controller\Adminhtml\Authentication;
  6. use Magento\Framework\DataObject;
  7. use Magento\TestFramework\Helper\Bootstrap;
  8. use Magento\TestFramework\TestCase\AbstractBackendController;
  9. use Temando\Shipping\Rest\AuthAdapter;
  10. use Temando\Shipping\Rest\Authentication;
  11. use Zend\Http\Request;
  12. /**
  13. * SaveCredentialsTest
  14. *
  15. * @magentoAppArea adminhtml
  16. *
  17. * @package Temando\Shipping\Test\Integration
  18. * @author Christoph Aßmann <christoph.assmann@netresearch.de>
  19. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  20. * @link http://www.temando.com/
  21. */
  22. class RefreshTokenTest extends AbstractBackendController
  23. {
  24. /**
  25. * The resource used to authorize action
  26. *
  27. * @var string
  28. */
  29. protected $resource = 'Magento_Sales::sales';
  30. /**
  31. * The uri at which to access the controller
  32. *
  33. * @var string
  34. */
  35. protected $uri = 'backend/temando/authentication/token';
  36. /**
  37. * @test
  38. */
  39. public function nonAjaxRequestForbidden()
  40. {
  41. $this->getRequest()->setMethod(Request::METHOD_GET);
  42. $this->dispatch($this->uri);
  43. $this->assertTrue($this->getResponse()->isForbidden());
  44. }
  45. /**
  46. * @test
  47. * @magentoConfigFixture default/carriers/temando/account_id 23
  48. * @magentoConfigFixture default/carriers/temando/bearer_token 808
  49. * @magentoConfigFixture default/carriers/temando/bearer_token_expiry 1999-01-19T03:03:33.000Z
  50. */
  51. public function refreshTokenRequestSuccess()
  52. {
  53. $sessionToken = 'foo';
  54. $sessionTokenExpiry = 'bar';
  55. $authResponse = new DataObject([
  56. 'attributes' => new DataObject([
  57. 'session_token' => $sessionToken,
  58. 'expiry' => $sessionTokenExpiry,
  59. ]),
  60. ]);
  61. $adapterMock = $this->getMockBuilder(AuthAdapter::class)
  62. ->setMethods(['startSession'])
  63. ->disableOriginalConstructor()
  64. ->getMock();
  65. $adapterMock->expects($this->once())->method('startSession')->willReturn($authResponse);
  66. $auth = Bootstrap::getObjectManager()->create(Authentication::class, [
  67. 'apiAdapter' => $adapterMock
  68. ]);
  69. Bootstrap::getObjectManager()->addSharedInstance($auth, Authentication::class);
  70. /** @var \Zend\Http\Headers $headers */
  71. $headers = $this->getRequest()->getHeaders();
  72. $headers->addHeaderLine('X_REQUESTED_WITH', 'XMLHttpRequest');
  73. $this->getRequest()->setHeaders($headers);
  74. $this->dispatch($this->uri);
  75. $responseJson = json_decode($this->getResponse()->getBody());
  76. $this->assertEquals($sessionToken, $responseJson->temando_api_token);
  77. $this->assertEquals($sessionTokenExpiry, $responseJson->temando_api_token_ttl);
  78. }
  79. /**
  80. * @test
  81. */
  82. public function refreshTokenNotNecessary()
  83. {
  84. $sessionToken = 'foo';
  85. $sessionTokenExpiry = '2038-01-19T03:03:33.000Z';
  86. /** @var \Magento\Backend\Model\Session $session */
  87. $session = Bootstrap::getObjectManager()->get(\Magento\Backend\Model\Session::class);
  88. $session->setData(Authentication::DATA_KEY_SESSION_TOKEN, $sessionToken);
  89. $session->setData(Authentication::DATA_KEY_SESSION_TOKEN_EXPIRY, $sessionTokenExpiry);
  90. $adapterMock = $this->getMockBuilder(AuthAdapter::class)
  91. ->setMethods(['startSession'])
  92. ->disableOriginalConstructor()
  93. ->getMock();
  94. $adapterMock->expects($this->never())->method('startSession');
  95. $auth = Bootstrap::getObjectManager()->create(Authentication::class, [
  96. 'apiAdapter' => $adapterMock,
  97. 'session' => $session,
  98. ]);
  99. Bootstrap::getObjectManager()->addSharedInstance($auth, Authentication::class);
  100. /** @var \Zend\Http\Headers $headers */
  101. $headers = $this->getRequest()->getHeaders();
  102. $headers->addHeaderLine('X_REQUESTED_WITH', 'XMLHttpRequest');
  103. $this->getRequest()->setHeaders($headers);
  104. $this->dispatch($this->uri);
  105. $responseJson = json_decode($this->getResponse()->getBody());
  106. $this->assertEquals($sessionToken, $responseJson->temando_api_token);
  107. $this->assertEquals($sessionTokenExpiry, $responseJson->temando_api_token_ttl);
  108. }
  109. /**
  110. * @test
  111. */
  112. public function refreshTokenRequestFailure()
  113. {
  114. $this->expectExceptionMessage('required');
  115. /** @var \Zend\Http\Headers $headers */
  116. $headers = $this->getRequest()->getHeaders();
  117. $headers->addHeaderLine('X_REQUESTED_WITH', 'XMLHttpRequest');
  118. $this->getRequest()->setHeaders($headers);
  119. $this->dispatch($this->uri);
  120. }
  121. public function testAclHasAccess()
  122. {
  123. $authMock = $this->getMockBuilder(Authentication::class)
  124. ->setMethods(['connect', 'getSessionToken', 'getSessionTokenExpiry'])
  125. ->disableOriginalConstructor()
  126. ->getMock();
  127. Bootstrap::getObjectManager()->addSharedInstance($authMock, Authentication::class);
  128. /** @var \Zend\Http\Headers $headers */
  129. $headers = $this->getRequest()->getHeaders();
  130. $headers->addHeaderLine('X_REQUESTED_WITH', 'XMLHttpRequest');
  131. $this->getRequest()->setHeaders($headers);
  132. parent::testAclHasAccess();
  133. }
  134. public function testAclNoAccess()
  135. {
  136. /** @var \Zend\Http\Headers $headers */
  137. $headers = $this->getRequest()->getHeaders();
  138. $headers->addHeaderLine('X_REQUESTED_WITH', 'XMLHttpRequest');
  139. $this->getRequest()->setHeaders($headers);
  140. parent::testAclNoAccess();
  141. }
  142. }