ProviderTest.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Integration\Test\Unit\Model\Oauth\Token;
  7. use Magento\Authorization\Model\UserContextInterface;
  8. use Magento\Integration\Model\Oauth\Token;
  9. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  10. /**
  11. * Unit test for \Magento\Integration\Model\Oauth\Token\Provider
  12. */
  13. class ProviderTest extends \PHPUnit\Framework\TestCase
  14. {
  15. /** @var \Magento\Integration\Model\Oauth\Token\Provider */
  16. protected $tokenProvider;
  17. /** @var \Magento\Integration\Model\Oauth\ConsumerFactory|\PHPUnit_Framework_MockObject_MockObject */
  18. protected $consumerFactoryMock;
  19. /** @var \Magento\Integration\Model\Oauth\TokenFactory|\PHPUnit_Framework_MockObject_MockObject */
  20. protected $tokenFactoryMock;
  21. /** @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject */
  22. protected $loggerMock;
  23. /** @var \Magento\Framework\Oauth\ConsumerInterface|\PHPUnit_Framework_MockObject_MockObject */
  24. protected $consumerMock;
  25. /** @var \Magento\Integration\Model\Oauth\Token|\PHPUnit_Framework_MockObject_MockObject */
  26. protected $requestTokenMock;
  27. /** @var \Magento\Integration\Model\Oauth\Token|\PHPUnit_Framework_MockObject_MockObject */
  28. protected $accessTokenMock;
  29. protected function setUp()
  30. {
  31. $objectManagerHelper = new ObjectManagerHelper($this);
  32. $this->consumerFactoryMock = $this->getMockBuilder(\Magento\Integration\Model\Oauth\ConsumerFactory::class)
  33. ->setMethods(['create'])
  34. ->disableOriginalConstructor()
  35. ->getMock();
  36. $this->tokenFactoryMock = $this->getMockBuilder(\Magento\Integration\Model\Oauth\TokenFactory::class)
  37. ->setMethods(['create'])
  38. ->disableOriginalConstructor()
  39. ->getMock();
  40. $this->loggerMock = $this->getMockBuilder(\Psr\Log\LoggerInterface::class)
  41. ->disableOriginalConstructor()
  42. ->getMock();
  43. $this->consumerMock = $this->getMockBuilder(\Magento\Framework\Oauth\ConsumerInterface::class)
  44. ->setMethods(
  45. [
  46. 'load',
  47. 'loadByKey',
  48. 'validate',
  49. 'getId',
  50. 'getKey',
  51. 'getSecret',
  52. 'getCallbackUrl',
  53. 'getCreatedAt',
  54. 'isValidForTokenExchange'
  55. ]
  56. )
  57. ->disableOriginalConstructor()
  58. ->getMock();
  59. $this->requestTokenMock = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class)
  60. ->setMethods(
  61. [
  62. 'loadByConsumerIdAndUserType',
  63. 'load',
  64. 'getId',
  65. 'getConsumerId',
  66. 'getType',
  67. 'getSecret',
  68. 'getToken',
  69. 'getVerifier',
  70. 'createRequestToken',
  71. 'convertToAccess'
  72. ]
  73. )
  74. ->disableOriginalConstructor()
  75. ->getMock();
  76. $this->accessTokenMock = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class)
  77. ->setMethods(
  78. [
  79. 'getToken',
  80. 'getSecret',
  81. 'load',
  82. 'getId',
  83. 'getConsumerId',
  84. 'getType',
  85. 'getRevoked'
  86. ]
  87. )
  88. ->disableOriginalConstructor()
  89. ->getMock();
  90. $this->tokenProvider = $objectManagerHelper->getObject(
  91. \Magento\Integration\Model\Oauth\Token\Provider::class,
  92. [
  93. 'consumerFactory' => $this->consumerFactoryMock,
  94. 'tokenFactory' => $this->tokenFactoryMock,
  95. 'logger' => $this->loggerMock,
  96. ]
  97. );
  98. }
  99. public function testValidateConsumer()
  100. {
  101. $this->consumerMock->expects($this->once())->method('isValidForTokenExchange')->willReturn(true);
  102. $this->assertEquals(true, $this->tokenProvider->validateConsumer($this->consumerMock));
  103. }
  104. /**
  105. * @expectedException \Magento\Framework\Oauth\Exception
  106. * @expectedExceptionMessage Consumer key has expired
  107. */
  108. public function testValidateConsumerException()
  109. {
  110. $this->consumerMock->expects($this->once())->method('isValidForTokenExchange')->willReturn(false);
  111. $this->tokenProvider->validateConsumer($this->consumerMock);
  112. }
  113. public function testGetIntegrationTokenByConsumerId()
  114. {
  115. $consumerId = 1;
  116. $tokenId = 1;
  117. $this->requestTokenMock->expects($this->once())
  118. ->method('loadByConsumerIdAndUserType')
  119. ->with($consumerId, UserContextInterface::USER_TYPE_INTEGRATION);
  120. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->requestTokenMock);
  121. $this->requestTokenMock->expects($this->once())->method('getId')->willReturn($tokenId);
  122. $actualToken = $this->tokenProvider->getIntegrationTokenByConsumerId($consumerId);
  123. $this->assertEquals($this->requestTokenMock, $actualToken);
  124. }
  125. /**
  126. * @expectedException \Magento\Framework\Oauth\Exception
  127. * @expectedExceptionMessage A token with consumer ID 1 does not exist
  128. */
  129. public function testGetIntegrationTokenByConsumerIdException()
  130. {
  131. $consumerId = 1;
  132. $tokenId = false;
  133. $this->requestTokenMock->expects($this->once())
  134. ->method('loadByConsumerIdAndUserType')
  135. ->with($consumerId, UserContextInterface::USER_TYPE_INTEGRATION);
  136. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->requestTokenMock);
  137. $this->requestTokenMock->expects($this->once())->method('getId')->willReturn($tokenId);
  138. $this->tokenProvider->getIntegrationTokenByConsumerId($consumerId);
  139. }
  140. public function testCreateRequestToken()
  141. {
  142. $consumerId = 1;
  143. $tokenId = 1;
  144. $tokenString = '12345678901234567890123456789012';
  145. $secret = 'secret';
  146. $tokenMock = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class)
  147. ->setMethods(
  148. [
  149. 'loadByConsumerIdAndUserType',
  150. 'getId',
  151. 'getType',
  152. 'createRequestToken'
  153. ]
  154. )
  155. ->disableOriginalConstructor()
  156. ->getMock();
  157. $tokenMock->expects($this->once())
  158. ->method('loadByConsumerIdAndUserType')
  159. ->with($consumerId, UserContextInterface::USER_TYPE_INTEGRATION);
  160. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($tokenMock);
  161. $tokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  162. $tokenMock->expects($this->once())->method('createRequestToken')->willReturn(
  163. $this->requestTokenMock
  164. );
  165. $tokenMock->expects($this->any())->method('getType')->willReturn(Token::TYPE_VERIFIER);
  166. $this->consumerMock->expects($this->once())->method('getId')->willReturn($consumerId);
  167. $this->consumerMock->expects($this->once())->method('getCallbackUrl');
  168. $this->requestTokenMock->expects($this->any())->method('getToken')->willReturn($tokenString);
  169. $this->requestTokenMock->expects($this->any())->method('getSecret')->willReturn($secret);
  170. $response = $this->tokenProvider->createRequestToken($this->consumerMock);
  171. $this->assertArrayHasKey('oauth_token', $response);
  172. $this->assertArrayHasKey('oauth_token_secret', $response);
  173. $this->assertEquals($tokenString, $response['oauth_token']);
  174. $this->assertEquals($secret, $response['oauth_token_secret']);
  175. }
  176. /**
  177. * @expectedException \Magento\Framework\Oauth\Exception
  178. * @expectedExceptionMessage Cannot create request token because consumer token is not a verifier token
  179. */
  180. public function testCreateRequestTokenIncorrectType()
  181. {
  182. $consumerId = 1;
  183. $tokenId = 1;
  184. $tokenMock = $this->getMockBuilder(\Magento\Integration\Model\Oauth\Token::class)
  185. ->setMethods(
  186. [
  187. 'loadByConsumerIdAndUserType',
  188. 'getId',
  189. 'getType',
  190. 'createRequestToken'
  191. ]
  192. )
  193. ->disableOriginalConstructor()
  194. ->getMock();
  195. $tokenMock->expects($this->once())
  196. ->method('loadByConsumerIdAndUserType')
  197. ->with($consumerId, UserContextInterface::USER_TYPE_INTEGRATION);
  198. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($tokenMock);
  199. $tokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  200. $tokenMock->expects($this->any())->method('getType')->willReturn('incorrectType');
  201. $this->consumerMock->expects($this->once())->method('getId')->willReturn($consumerId);
  202. $this->tokenProvider->createRequestToken($this->consumerMock);
  203. }
  204. public function testGetAccessToken()
  205. {
  206. $consumerId = 1;
  207. $tokenId = 1;
  208. $tokenString = '12345678901234567890123456789012';
  209. $secret = 'secret';
  210. $this->consumerMock->expects($this->once())->method('getId')->willReturn($consumerId);
  211. $this->requestTokenMock->expects($this->once())
  212. ->method('loadByConsumerIdAndUserType')
  213. ->with($consumerId, UserContextInterface::USER_TYPE_INTEGRATION);
  214. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->requestTokenMock);
  215. $this->requestTokenMock->expects($this->once())->method('getId')->willReturn($tokenId);
  216. $this->requestTokenMock->expects($this->once())->method('getType')->willReturn(Token::TYPE_REQUEST);
  217. $this->requestTokenMock->expects($this->once())->method('convertToAccess')->willReturn($this->accessTokenMock);
  218. $this->accessTokenMock->expects($this->once())->method('getToken')->willReturn($tokenString);
  219. $this->accessTokenMock->expects($this->once())->method('getSecret')->willReturn($secret);
  220. $response = $this->tokenProvider->getAccessToken($this->consumerMock);
  221. $this->assertArrayHasKey('oauth_token', $response);
  222. $this->assertArrayHasKey('oauth_token_secret', $response);
  223. $this->assertEquals($tokenString, $response['oauth_token']);
  224. $this->assertEquals($secret, $response['oauth_token_secret']);
  225. }
  226. /**
  227. * @expectedException \Magento\Framework\Oauth\Exception
  228. * @expectedExceptionMessage Cannot get access token because consumer token is not a request token
  229. */
  230. public function testGetAccessTokenIsNotRequestToken()
  231. {
  232. $consumerId = 1;
  233. $tokenId = 1;
  234. $this->consumerMock->expects($this->once())->method('getId')->willReturn($consumerId);
  235. $this->requestTokenMock->expects($this->once())
  236. ->method('loadByConsumerIdAndUserType')
  237. ->with($consumerId, UserContextInterface::USER_TYPE_INTEGRATION);
  238. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->requestTokenMock);
  239. $this->requestTokenMock->expects($this->once())->method('getId')->willReturn($tokenId);
  240. $this->requestTokenMock->expects($this->once())->method('getType')->willReturn('isNotRequestToken');
  241. $this->tokenProvider->getAccessToken($this->consumerMock);
  242. }
  243. public function testValidateRequestToken()
  244. {
  245. $requestTokenString = '12345678901234567890123456789012';
  246. $oauthVerifier = '12345678901234567890123456789012';
  247. $consumerId = 1;
  248. $tokenId = 1;
  249. $secret = 'secret';
  250. $this->requestTokenMock->expects($this->once())
  251. ->method('load')
  252. ->with($requestTokenString, 'token')
  253. ->willReturnSelf();
  254. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->requestTokenMock);
  255. $this->requestTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  256. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  257. $this->requestTokenMock->expects($this->once())->method('getConsumerId')->willReturn($consumerId);
  258. $this->requestTokenMock->expects($this->once())->method('getType')->willReturn(Token::TYPE_REQUEST);
  259. $this->requestTokenMock->expects($this->once())->method('getSecret')->willReturn($secret);
  260. $this->requestTokenMock->expects($this->once())->method('getVerifier')->willReturn($oauthVerifier);
  261. $this->assertEquals(
  262. $secret,
  263. $this->tokenProvider->validateRequestToken($requestTokenString, $this->consumerMock, $oauthVerifier)
  264. );
  265. }
  266. /**
  267. * @expectedException \Magento\Framework\Oauth\Exception
  268. * @expectedExceptionMessage Specified token does not exist
  269. */
  270. public function testValidateRequestTokenNotExistentToken()
  271. {
  272. $requestTokenString = '12345678901234567890123456789012';
  273. $oauthVerifier = '12345678901234567890123456789012';
  274. $this->requestTokenMock->expects($this->once())
  275. ->method('load')
  276. ->with($requestTokenString, 'token')
  277. ->willReturnSelf();
  278. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->requestTokenMock);
  279. $this->requestTokenMock->expects($this->any())->method('getId')->willReturn(0);
  280. $this->tokenProvider->validateRequestToken($requestTokenString, $this->consumerMock, $oauthVerifier);
  281. }
  282. /**
  283. * @expectedException \Magento\Framework\Oauth\Exception
  284. * @expectedExceptionMessage The token length is invalid. Check the length and try again.
  285. */
  286. public function testValidateRequestTokenIncorrectLengthToken()
  287. {
  288. $requestTokenString = '123';
  289. $oauthVerifier = '12345678901234567890123456789012';
  290. $this->tokenProvider->validateRequestToken($requestTokenString, $this->consumerMock, $oauthVerifier);
  291. }
  292. /**
  293. * @expectedException \Magento\Framework\Oauth\Exception
  294. * @expectedExceptionMessage Verifier is invalid
  295. */
  296. public function testValidateRequestTokenInvalidVerifier()
  297. {
  298. $requestTokenString = '12345678901234567890123456789012';
  299. $oauthVerifier = 1;
  300. $consumerId = 1;
  301. $tokenId = 1;
  302. $this->requestTokenMock->expects($this->once())
  303. ->method('load')
  304. ->with($requestTokenString, 'token')
  305. ->willReturnSelf();
  306. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->requestTokenMock);
  307. $this->requestTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  308. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  309. $this->requestTokenMock->expects($this->once())->method('getConsumerId')->willReturn($consumerId);
  310. $this->requestTokenMock->expects($this->once())->method('getType')->willReturn(Token::TYPE_REQUEST);
  311. $this->requestTokenMock->expects($this->once())->method('getVerifier')->willReturn($oauthVerifier);
  312. $this->tokenProvider->validateRequestToken($requestTokenString, $this->consumerMock, $oauthVerifier);
  313. }
  314. /**
  315. * @expectedException \Magento\Framework\Oauth\Exception
  316. * @expectedExceptionMessage Verifier is not the correct length
  317. */
  318. public function testValidateRequestTokenIncorrectLengthVerifier()
  319. {
  320. $requestTokenString = '12345678901234567890123456789012';
  321. $oauthVerifier = '123';
  322. $consumerId = 1;
  323. $tokenId = 1;
  324. $this->requestTokenMock->expects($this->once())
  325. ->method('load')
  326. ->with($requestTokenString, 'token')
  327. ->willReturnSelf();
  328. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->requestTokenMock);
  329. $this->requestTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  330. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  331. $this->requestTokenMock->expects($this->once())->method('getConsumerId')->willReturn($consumerId);
  332. $this->requestTokenMock->expects($this->once())->method('getType')->willReturn(Token::TYPE_REQUEST);
  333. $this->requestTokenMock->expects($this->once())->method('getVerifier')->willReturn($oauthVerifier);
  334. $this->tokenProvider->validateRequestToken($requestTokenString, $this->consumerMock, $oauthVerifier);
  335. }
  336. /**
  337. * @expectedException \Magento\Framework\Oauth\Exception
  338. * @expectedExceptionMessage Token verifier and verifier token do not match
  339. */
  340. public function testValidateRequestTokenNotMatchedVerifier()
  341. {
  342. $requestTokenString = '12345678901234567890123456789012';
  343. $oauthVerifier = '12345678901234567890123456789012';
  344. $notMatchedVerifier = '123';
  345. $consumerId = 1;
  346. $tokenId = 1;
  347. $this->requestTokenMock->expects($this->once())
  348. ->method('load')
  349. ->with($requestTokenString, 'token')
  350. ->willReturnSelf();
  351. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->requestTokenMock);
  352. $this->requestTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  353. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  354. $this->requestTokenMock->expects($this->once())->method('getConsumerId')->willReturn($consumerId);
  355. $this->requestTokenMock->expects($this->once())->method('getType')->willReturn(Token::TYPE_REQUEST);
  356. $this->requestTokenMock->expects($this->once())->method('getVerifier')->willReturn($notMatchedVerifier);
  357. $this->tokenProvider->validateRequestToken($requestTokenString, $this->consumerMock, $oauthVerifier);
  358. }
  359. /**
  360. * @expectedException \Magento\Framework\Oauth\Exception
  361. * @expectedExceptionMessage Request token is not associated with the specified consumer
  362. */
  363. public function testValidateRequestTokenNotAssociatedToken()
  364. {
  365. $requestTokenString = '12345678901234567890123456789012';
  366. $oauthVerifier = '12345678901234567890123456789012';
  367. $consumerId = 1;
  368. $notCustomerId = 2;
  369. $tokenId = 1;
  370. $this->requestTokenMock->expects($this->once())
  371. ->method('load')
  372. ->with($requestTokenString, 'token')
  373. ->willReturnSelf();
  374. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->requestTokenMock);
  375. $this->requestTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  376. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  377. $this->requestTokenMock->expects($this->once())->method('getConsumerId')->willReturn($notCustomerId);
  378. $this->tokenProvider->validateRequestToken($requestTokenString, $this->consumerMock, $oauthVerifier);
  379. }
  380. /**
  381. * @expectedException \Magento\Framework\Oauth\Exception
  382. * @expectedExceptionMessage Token is already being used
  383. */
  384. public function testValidateRequestTokenAlreadyUsedToken()
  385. {
  386. $requestTokenString = '12345678901234567890123456789012';
  387. $oauthVerifier = '12345678901234567890123456789012';
  388. $consumerId = 1;
  389. $tokenId = 1;
  390. $this->requestTokenMock->expects($this->once())
  391. ->method('load')
  392. ->with($requestTokenString, 'token')
  393. ->willReturnSelf();
  394. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->requestTokenMock);
  395. $this->requestTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  396. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  397. $this->requestTokenMock->expects($this->once())->method('getConsumerId')->willReturn($consumerId);
  398. $this->requestTokenMock->expects($this->once())->method('getType')->willReturn('alreadyUsedToken');
  399. $this->tokenProvider->validateRequestToken($requestTokenString, $this->consumerMock, $oauthVerifier);
  400. }
  401. public function testValidateAccessTokenRequest()
  402. {
  403. $accessTokenString = '12345678901234567890123456789012';
  404. $tokenId = 1;
  405. $consumerId = 1;
  406. $secret = 'secret';
  407. $this->accessTokenMock->expects($this->once())
  408. ->method('load')
  409. ->with($accessTokenString, 'token')
  410. ->willReturnSelf();
  411. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->accessTokenMock);
  412. $this->accessTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  413. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  414. $this->accessTokenMock->expects($this->once())->method('getConsumerId')->willReturn($consumerId);
  415. $this->accessTokenMock->expects($this->once())->method('getType')->willReturn(Token::TYPE_ACCESS);
  416. $this->accessTokenMock->expects($this->once())->method('getRevoked')->willReturn(0);
  417. $this->accessTokenMock->expects($this->once())->method('getSecret')->willReturn($secret);
  418. $this->assertEquals(
  419. $secret,
  420. $this->tokenProvider->validateAccessTokenRequest($accessTokenString, $this->consumerMock)
  421. );
  422. }
  423. /**
  424. * @expectedException \Magento\Framework\Oauth\Exception
  425. * @expectedExceptionMessage Token is not associated with the specified consumer
  426. */
  427. public function testValidateAccessTokenRequestNotAssociatedToken()
  428. {
  429. $accessTokenString = '12345678901234567890123456789012';
  430. $tokenId = 1;
  431. $consumerId = 1;
  432. $notCustomerId = 2;
  433. $this->accessTokenMock->expects($this->once())
  434. ->method('load')
  435. ->with($accessTokenString, 'token')
  436. ->willReturnSelf();
  437. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->accessTokenMock);
  438. $this->accessTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  439. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  440. $this->accessTokenMock->expects($this->once())->method('getConsumerId')->willReturn($notCustomerId);
  441. $this->tokenProvider->validateAccessTokenRequest($accessTokenString, $this->consumerMock);
  442. }
  443. /**
  444. * @expectedException \Magento\Framework\Oauth\Exception
  445. * @expectedExceptionMessage Token is not an access token
  446. */
  447. public function testValidateAccessTokenRequestNotAccessToken()
  448. {
  449. $accessTokenString = '12345678901234567890123456789012';
  450. $tokenId = 1;
  451. $consumerId = 1;
  452. $this->accessTokenMock->expects($this->once())
  453. ->method('load')
  454. ->with($accessTokenString, 'token')
  455. ->willReturnSelf();
  456. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->accessTokenMock);
  457. $this->accessTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  458. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  459. $this->accessTokenMock->expects($this->once())->method('getConsumerId')->willReturn($consumerId);
  460. $this->accessTokenMock->expects($this->once())->method('getType')->willReturn('notAccessToken');
  461. $this->tokenProvider->validateAccessTokenRequest($accessTokenString, $this->consumerMock);
  462. }
  463. /**
  464. * @expectedException \Magento\Framework\Oauth\Exception
  465. * @expectedExceptionMessage Access token has been revoked
  466. */
  467. public function testValidateAccessTokenRequestRevokedToken()
  468. {
  469. $accessTokenString = '12345678901234567890123456789012';
  470. $tokenId = 1;
  471. $consumerId = 1;
  472. $this->accessTokenMock->expects($this->once())
  473. ->method('load')
  474. ->with($accessTokenString, 'token')
  475. ->willReturnSelf();
  476. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->accessTokenMock);
  477. $this->accessTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  478. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  479. $this->accessTokenMock->expects($this->once())->method('getConsumerId')->willReturn($consumerId);
  480. $this->accessTokenMock->expects($this->once())->method('getType')->willReturn(Token::TYPE_ACCESS);
  481. $this->accessTokenMock->expects($this->once())->method('getRevoked')->willReturn(1);
  482. $this->tokenProvider->validateAccessTokenRequest($accessTokenString, $this->consumerMock);
  483. }
  484. public function testValidateAccessToken()
  485. {
  486. $accessTokenString = '12345678901234567890123456789012';
  487. $tokenId = 1;
  488. $consumerId = 1;
  489. $this->accessTokenMock->expects($this->once())
  490. ->method('load')
  491. ->with($accessTokenString, 'token')
  492. ->willReturnSelf();
  493. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->accessTokenMock);
  494. $this->accessTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  495. $this->accessTokenMock->expects($this->any())->method('getConsumerId')->willReturn($consumerId);
  496. $this->consumerFactoryMock->expects($this->any())->method('create')->willReturn($this->consumerMock);
  497. $this->consumerMock->expects($this->any())->method('load')->willReturnSelf();
  498. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  499. $this->accessTokenMock->expects($this->once())->method('getType')->willReturn(Token::TYPE_ACCESS);
  500. $this->accessTokenMock->expects($this->once())->method('getRevoked')->willReturn(0);
  501. $this->assertEquals(
  502. $consumerId,
  503. $this->tokenProvider->validateAccessToken($accessTokenString)
  504. );
  505. }
  506. /**
  507. * @expectedException \Magento\Framework\Oauth\Exception
  508. * @expectedExceptionMessage A consumer with the ID 1 does not exist
  509. */
  510. public function testValidateAccessTokenNotExistentConsumer()
  511. {
  512. $accessTokenString = '12345678901234567890123456789012';
  513. $tokenId = 1;
  514. $consumerId = 1;
  515. $this->accessTokenMock->expects($this->once())
  516. ->method('load')
  517. ->with($accessTokenString, 'token')
  518. ->willReturnSelf();
  519. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->accessTokenMock);
  520. $this->accessTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  521. $this->accessTokenMock->expects($this->any())->method('getConsumerId')->willReturn($consumerId);
  522. $this->consumerFactoryMock->expects($this->any())->method('create')->willReturn($this->consumerMock);
  523. $this->consumerMock->expects($this->any())->method('load')->willReturnSelf();
  524. $this->consumerMock->expects($this->any())->method('getId')->willReturn(0);
  525. $this->tokenProvider->validateAccessToken($accessTokenString);
  526. }
  527. /**
  528. * @expectedException \Magento\Framework\Oauth\Exception
  529. * @expectedExceptionMessage Token is not an access token
  530. */
  531. public function testValidateAccessTokenNotAccessToken()
  532. {
  533. $accessTokenString = '12345678901234567890123456789012';
  534. $tokenId = 1;
  535. $consumerId = 1;
  536. $this->accessTokenMock->expects($this->once())
  537. ->method('load')
  538. ->with($accessTokenString, 'token')
  539. ->willReturnSelf();
  540. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->accessTokenMock);
  541. $this->accessTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  542. $this->accessTokenMock->expects($this->any())->method('getConsumerId')->willReturn($consumerId);
  543. $this->consumerFactoryMock->expects($this->any())->method('create')->willReturn($this->consumerMock);
  544. $this->consumerMock->expects($this->any())->method('load')->willReturnSelf();
  545. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  546. $this->accessTokenMock->expects($this->once())->method('getType')->willReturn('notAccessToken');
  547. $this->tokenProvider->validateAccessToken($accessTokenString);
  548. }
  549. /**
  550. * @expectedException \Magento\Framework\Oauth\Exception
  551. * @expectedExceptionMessage Access token has been revoked
  552. */
  553. public function testValidateAccessTokenRevoked()
  554. {
  555. $accessTokenString = '12345678901234567890123456789012';
  556. $tokenId = 1;
  557. $consumerId = 1;
  558. $this->accessTokenMock->expects($this->once())
  559. ->method('load')
  560. ->with($accessTokenString, 'token')
  561. ->willReturnSelf();
  562. $this->tokenFactoryMock->expects($this->once())->method('create')->willReturn($this->accessTokenMock);
  563. $this->accessTokenMock->expects($this->any())->method('getId')->willReturn($tokenId);
  564. $this->accessTokenMock->expects($this->any())->method('getConsumerId')->willReturn($consumerId);
  565. $this->consumerFactoryMock->expects($this->any())->method('create')->willReturn($this->consumerMock);
  566. $this->consumerMock->expects($this->any())->method('load')->willReturnSelf();
  567. $this->consumerMock->expects($this->any())->method('getId')->willReturn($consumerId);
  568. $this->accessTokenMock->expects($this->once())->method('getType')->willReturn(Token::TYPE_ACCESS);
  569. $this->accessTokenMock->expects($this->once())->method('getRevoked')->willReturn(1);
  570. $this->tokenProvider->validateAccessToken($accessTokenString);
  571. }
  572. public function testValidateOauthToken()
  573. {
  574. $tokenString = '12345678901234567890123456789012';
  575. $this->assertTrue($this->tokenProvider->validateOauthToken($tokenString));
  576. }
  577. public function testGetConsumerByKey()
  578. {
  579. $consumerKeyString = '12345678901234567890123456789012';
  580. $consumerId = 1;
  581. $this->consumerFactoryMock->expects($this->once())->method('create')->willReturn($this->consumerMock);
  582. $this->consumerMock->expects($this->once())->method('loadByKey')->with($consumerKeyString)->willReturnSelf();
  583. $this->consumerMock->expects($this->once())->method('getId')->willReturn($consumerId);
  584. $this->assertEquals($this->consumerMock, $this->tokenProvider->getConsumerByKey($consumerKeyString));
  585. }
  586. /**
  587. * @expectedException \Magento\Framework\Oauth\Exception
  588. * @expectedExceptionMessage Consumer key is not the correct length
  589. */
  590. public function testGetConsumerByKeyWrongConsumerKey()
  591. {
  592. $consumerKeyString = '123';
  593. $this->tokenProvider->getConsumerByKey($consumerKeyString);
  594. }
  595. /**
  596. * @expectedException \Magento\Framework\Oauth\Exception
  597. * @expectedExceptionMessage A consumer having the specified key does not exist
  598. */
  599. public function testGetConsumerByKeyNonExistentConsumer()
  600. {
  601. $consumerKeyString = '12345678901234567890123456789012';
  602. $consumerId = null;
  603. $this->consumerFactoryMock->expects($this->once())->method('create')->willReturn($this->consumerMock);
  604. $this->consumerMock->expects($this->once())->method('loadByKey')->with($consumerKeyString)->willReturnSelf();
  605. $this->consumerMock->expects($this->once())->method('getId')->willReturn($consumerId);
  606. $this->tokenProvider->getConsumerByKey($consumerKeyString);
  607. }
  608. }