PageRenderTime 43ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/woocommerce-gateway-paypal-powered-by-braintree/braintree_sdk/tests/integration/OAuthTest.php

https://gitlab.com/hunt9310/ras
PHP | 298 lines | 260 code | 34 blank | 4 comment | 0 complexity | df5ecaaea6b47a4566da53fb0900c4dc MD5 | raw file
  1. <?php
  2. namespace Test\Integration;
  3. require_once dirname(__DIR__) . '/Setup.php';
  4. use Test;
  5. use Test\Setup;
  6. use Braintree;
  7. class OAuthTest extends Setup
  8. {
  9. public function testCreateTokenFromCode()
  10. {
  11. $gateway = new Braintree\Gateway([
  12. 'clientId' => 'client_id$development$integration_client_id',
  13. 'clientSecret' => 'client_secret$development$integration_client_secret'
  14. ]);
  15. $code = Test\Braintree\OAuthTestHelper::createGrant($gateway, [
  16. 'merchant_public_id' => 'integration_merchant_id',
  17. 'scope' => 'read_write'
  18. ]);
  19. $result = $gateway->oauth()->createTokenFromCode([
  20. 'code' => $code,
  21. 'scope' => 'read_write',
  22. ]);
  23. $this->assertEquals(true, $result->success);
  24. $credentials = $result->credentials;
  25. $this->assertNotNull($credentials->accessToken);
  26. $this->assertNotNull($credentials->refreshToken);
  27. $this->assertEquals('bearer', $credentials->tokenType);
  28. $this->assertNotNull($credentials->expiresAt);
  29. }
  30. /**
  31. * @expectedException Braintree\Exception\Configuration
  32. * @expectedExceptionMessage clientSecret needs to be passed to Braintree\Gateway.
  33. */
  34. public function testAssertsHasCredentials()
  35. {
  36. $gateway = new Braintree\Gateway([
  37. 'clientId' => 'client_id$development$integration_client_id'
  38. ]);
  39. $gateway->oauth()->createTokenFromCode([
  40. 'code' => 'integration_oauth_auth_code_' . rand(0,299)
  41. ]);
  42. }
  43. public function testCreateTokenFromCodeWithMixedCredentials()
  44. {
  45. $gateway = new Braintree\Gateway([
  46. 'clientId' => 'client_id$development$integration_client_id',
  47. 'clientSecret' => 'client_secret$development$integration_client_secret',
  48. 'accessToken' => 'access_token$development$integration_merchant_id$f9ac33b3dd',
  49. ]);
  50. $code = Test\Braintree\OAuthTestHelper::createGrant($gateway, [
  51. 'merchant_public_id' => 'integration_merchant_id',
  52. 'scope' => 'read_write'
  53. ]);
  54. $result = $gateway->oauth()->createTokenFromCode([
  55. 'code' => $code,
  56. 'scope' => 'read_write',
  57. ]);
  58. $this->assertEquals(true, $result->success);
  59. $credentials = $result->credentials;
  60. $this->assertNotNull($credentials->accessToken);
  61. $this->assertNotNull($credentials->refreshToken);
  62. $this->assertEquals('bearer', $credentials->tokenType);
  63. $this->assertNotNull($credentials->expiresAt);
  64. }
  65. public function testCreateTokenFromCode_JsonAPI()
  66. {
  67. $gateway = new Braintree\Gateway([
  68. 'clientId' => 'client_id$development$integration_client_id',
  69. 'clientSecret' => 'client_secret$development$integration_client_secret'
  70. ]);
  71. $code = Test\Braintree\OAuthTestHelper::createGrant($gateway, [
  72. 'merchant_public_id' => 'integration_merchant_id',
  73. 'scope' => 'read_write'
  74. ]);
  75. $result = $gateway->oauth()->createTokenFromCode([
  76. 'code' => $code,
  77. 'scope' => 'read_write',
  78. ]);
  79. $this->assertEquals(true, $result->success);
  80. $this->assertNotNull($result->accessToken);
  81. $this->assertNotNull($result->refreshToken);
  82. $this->assertEquals('bearer', $result->tokenType);
  83. $this->assertNotNull($result->expiresAt);
  84. }
  85. public function testCreateTokenFromCode_ValidationErrorTest()
  86. {
  87. $gateway = new Braintree\Gateway([
  88. 'clientId' => 'client_id$development$integration_client_id',
  89. 'clientSecret' => 'client_secret$development$integration_client_secret'
  90. ]);
  91. $result = $gateway->oauth()->createTokenFromCode([
  92. 'code' => 'bad_code',
  93. 'scope' => 'read_write',
  94. ]);
  95. $this->assertEquals(false, $result->success);
  96. $errors = $result->errors->forKey('credentials')->onAttribute('code');
  97. $this->assertEquals(Braintree\Error\Codes::OAUTH_INVALID_GRANT, $errors[0]->code);
  98. $this->assertEquals(1, preg_match('/Invalid grant: code not found/', $result->message));
  99. }
  100. public function testCreateTokenFromCode_OldError()
  101. {
  102. $gateway = new Braintree\Gateway([
  103. 'clientId' => 'client_id$development$integration_client_id',
  104. 'clientSecret' => 'client_secret$development$integration_client_secret'
  105. ]);
  106. $result = $gateway->oauth()->createTokenFromCode([
  107. 'code' => 'bad_code',
  108. 'scope' => 'read_write',
  109. ]);
  110. $this->assertEquals(false, $result->success);
  111. $this->assertEquals('invalid_grant', $result->error);
  112. $this->assertEquals('code not found', $result->errorDescription);
  113. }
  114. public function testCreateTokenFromRefreshToken()
  115. {
  116. $gateway = new Braintree\Gateway([
  117. 'clientId' => 'client_id$development$integration_client_id',
  118. 'clientSecret' => 'client_secret$development$integration_client_secret'
  119. ]);
  120. $code = Test\Braintree\OAuthTestHelper::createGrant($gateway, [
  121. 'merchant_public_id' => 'integration_merchant_id',
  122. 'scope' => 'read_write'
  123. ]);
  124. $refreshToken = $gateway->oauth()->createTokenFromCode([
  125. 'code' => $code,
  126. 'scope' => 'read_write',
  127. ])->credentials->refreshToken;
  128. $result = $gateway->oauth()->createTokenFromRefreshToken([
  129. 'refreshToken' => $refreshToken,
  130. 'scope' => 'read_write',
  131. ]);
  132. $this->assertEquals(true, $result->success);
  133. $credentials = $result->credentials;
  134. $this->assertNotNull($credentials->accessToken);
  135. $this->assertNotNull($credentials->refreshToken);
  136. $this->assertEquals('bearer', $credentials->tokenType);
  137. $this->assertNotNull($credentials->expiresAt);
  138. }
  139. public function testBuildConnectUrl()
  140. {
  141. $gateway = new Braintree\Gateway([
  142. 'clientId' => 'client_id$development$integration_client_id',
  143. 'clientSecret' => 'client_secret$development$integration_client_secret'
  144. ]);
  145. $url = $gateway->oauth()->connectUrl([
  146. 'merchantId' => 'integration_merchant_id',
  147. 'redirectUri' => 'http://bar.example.com',
  148. 'scope' => 'read_write',
  149. 'state' => 'baz_state',
  150. 'user' => [
  151. 'country' => 'USA',
  152. 'email' => 'foo@example.com',
  153. 'firstName' => 'Bob',
  154. 'lastName' => 'Jones',
  155. 'phone' => '555-555-5555',
  156. 'dobYear' => '1970',
  157. 'dobMonth' => '01',
  158. 'dobDay' => '01',
  159. 'streetAddress' => '222 W Merchandise Mart',
  160. 'locality' => 'Chicago',
  161. 'region' => 'IL',
  162. 'postalCode' => '60606',
  163. ],
  164. 'business' => [
  165. 'name' => '14 Ladders',
  166. 'registeredAs' => '14.0 Ladders',
  167. 'industry' => 'Ladders',
  168. 'description' => 'We sell the best ladders',
  169. 'streetAddress' => '111 N Canal',
  170. 'locality' => 'Chicago',
  171. 'region' => 'IL',
  172. 'postalCode' => '60606',
  173. 'country' => 'USA',
  174. 'annualVolumeAmount' => '1000000',
  175. 'averageTransactionAmount' => '100',
  176. 'maximumTransactionAmount' => '10000',
  177. 'shipPhysicalGoods' => true,
  178. 'fulfillmentCompletedIn' => 7,
  179. 'currency' => 'USD',
  180. 'website' => 'http://example.com',
  181. ],
  182. 'paymentMethods' => ['credit_card'],
  183. ]);
  184. $components = parse_url($url);
  185. $queryString = $components['query'];
  186. parse_str($queryString, $query);
  187. $this->assertEquals('localhost', $components['host']);
  188. $this->assertEquals('/oauth/connect', $components['path']);
  189. $this->assertEquals('integration_merchant_id', $query['merchant_id']);
  190. $this->assertEquals('client_id$development$integration_client_id', $query['client_id']);
  191. $this->assertEquals('http://bar.example.com', $query['redirect_uri']);
  192. $this->assertEquals('read_write', $query['scope']);
  193. $this->assertEquals('baz_state', $query['state']);
  194. $this->assertEquals('USA', $query['user']['country']);
  195. $this->assertEquals('foo@example.com', $query['user']['email']);
  196. $this->assertEquals('Bob', $query['user']['first_name']);
  197. $this->assertEquals('Jones', $query['user']['last_name']);
  198. $this->assertEquals('555-555-5555', $query['user']['phone']);
  199. $this->assertEquals('1970', $query['user']['dob_year']);
  200. $this->assertEquals('01', $query['user']['dob_month']);
  201. $this->assertEquals('01', $query['user']['dob_day']);
  202. $this->assertEquals('222 W Merchandise Mart', $query['user']['street_address']);
  203. $this->assertEquals('Chicago', $query['user']['locality']);
  204. $this->assertEquals('IL', $query['user']['region']);
  205. $this->assertEquals('60606', $query['user']['postal_code']);
  206. $this->assertEquals('14 Ladders', $query['business']['name']);
  207. $this->assertEquals('14.0 Ladders', $query['business']['registered_as']);
  208. $this->assertEquals('Ladders', $query['business']['industry']);
  209. $this->assertEquals('We sell the best ladders', $query['business']['description']);
  210. $this->assertEquals('111 N Canal', $query['business']['street_address']);
  211. $this->assertEquals('Chicago', $query['business']['locality']);
  212. $this->assertEquals('IL', $query['business']['region']);
  213. $this->assertEquals('60606', $query['business']['postal_code']);
  214. $this->assertEquals('USA', $query['business']['country']);
  215. $this->assertEquals('1000000', $query['business']['annual_volume_amount']);
  216. $this->assertEquals('100', $query['business']['average_transaction_amount']);
  217. $this->assertEquals('10000', $query['business']['maximum_transaction_amount']);
  218. $this->assertEquals(true, $query['business']['ship_physical_goods']);
  219. $this->assertEquals(7, $query['business']['fulfillment_completed_in']);
  220. $this->assertEquals('USD', $query['business']['currency']);
  221. $this->assertEquals('http://example.com', $query['business']['website']);
  222. $this->assertCount(1, $query['payment_methods']);
  223. $this->assertEquals('credit_card', $query['payment_methods'][0]);
  224. $this->assertEquals(64, strlen($query['signature']));
  225. $this->assertEquals('SHA256', $query['algorithm']);
  226. }
  227. public function testBuildConnectUrlWithoutOptionalParams()
  228. {
  229. $gateway = new Braintree\Gateway([
  230. 'clientId' => 'client_id$development$integration_client_id',
  231. 'clientSecret' => 'client_secret$development$integration_client_secret'
  232. ]);
  233. $url = $gateway->oauth()->connectUrl();
  234. $queryString = parse_url($url)['query'];
  235. parse_str($queryString, $query);
  236. $this->assertEquals('client_id$development$integration_client_id', $query['client_id']);
  237. $this->assertArrayNotHasKey('merchant_id', $query);
  238. $this->assertArrayNotHasKey('redirect_uri', $query);
  239. $this->assertArrayNotHasKey('scope', $query);
  240. }
  241. public function testBuildConnectUrlWithPaymentMethods()
  242. {
  243. $gateway = new Braintree\Gateway([
  244. 'clientId' => 'client_id$development$integration_client_id',
  245. 'clientSecret' => 'client_secret$development$integration_client_secret'
  246. ]);
  247. $url = $gateway->oauth()->connectUrl([
  248. 'paymentMethods' => ['credit_card', 'paypal']
  249. ]);
  250. $queryString = parse_url($url)['query'];
  251. parse_str($queryString, $query);
  252. $this->assertEquals(['credit_card', 'paypal'], $query['payment_methods']);
  253. }
  254. public function testComputeSignature()
  255. {
  256. $gateway = new Braintree\Gateway([
  257. 'clientId' => 'client_id$development$integration_client_id',
  258. 'clientSecret' => 'client_secret$development$integration_client_secret'
  259. ]);
  260. $urlToSign = 'http://localhost:3000/oauth/connect?business%5Bname%5D=We+Like+Spaces&client_id=client_id%24development%24integration_client_id';
  261. $signature = $gateway->oauth()->computeSignature($urlToSign);
  262. $this->assertEquals("a36bcf10dd982e2e47e0d6a2cb930aea47ade73f954b7d59c58dae6167894d41", $signature);
  263. }
  264. }