/tests/Request/Payments/PaymentsRequestTest.php

https://github.com/yandex-money/yandex-checkout-sdk-php · PHP · 410 lines · 287 code · 40 blank · 83 comment · 18 complexity · b92e1b461e65336589d295d1ef9c0cda MD5 · raw file

  1. <?php
  2. namespace Tests\YandexCheckout\Request\Payments;
  3. use PHPUnit\Framework\TestCase;
  4. use YandexCheckout\Helpers\Random;
  5. use YandexCheckout\Helpers\StringObject;
  6. use YandexCheckout\Model\PaymentMethodType;
  7. use YandexCheckout\Model\PaymentStatus;
  8. use YandexCheckout\Request\Payments\PaymentsRequest;
  9. use YandexCheckout\Request\Payments\PaymentsRequestBuilder;
  10. class PaymentsRequestTest extends TestCase
  11. {
  12. /**
  13. * @return PaymentsRequest
  14. */
  15. protected function getTestInstance()
  16. {
  17. return new PaymentsRequest();
  18. }
  19. /**
  20. * @dataProvider validNetPageDataProvider
  21. * @param $value
  22. */
  23. public function testCursor($value)
  24. {
  25. $this->getterAndSetterTest($value, 'cursor', $value === null ? '' : (string)$value);
  26. }
  27. /**
  28. * @dataProvider invalidPageDataProvider
  29. * @expectedException \InvalidArgumentException
  30. * @param $value
  31. */
  32. public function testSetInvalidCursor($value)
  33. {
  34. $this->getTestInstance()->setCursor($value);
  35. }
  36. /**
  37. * @dataProvider validPaymentMethodDataProvider
  38. * @param $value
  39. */
  40. public function testPaymentMethod($value)
  41. {
  42. $this->getterAndSetterTest($value, 'paymentMethod', $value);
  43. }
  44. /**
  45. * @dataProvider invalidPaymentMethodDataProvider
  46. * @expectedException \InvalidArgumentException
  47. * @param $value
  48. */
  49. public function testSetInvalidPaymentMethod($value)
  50. {
  51. $this->getTestInstance()->setPaymentMethod($value);
  52. }
  53. /**
  54. * @dataProvider validDateDataProvider
  55. * @param $value
  56. */
  57. public function testDateMethods($value)
  58. {
  59. $properties = array(
  60. 'createdAtGte',
  61. 'createdAtGt',
  62. 'createdAtLte',
  63. 'createdAtLt',
  64. 'capturedAtGte',
  65. 'capturedAtGt',
  66. 'capturedAtLte',
  67. 'capturedAtLt',
  68. );
  69. $expected = null;
  70. if ($value instanceof \DateTime) {
  71. $expected = $value->format(DATE_ATOM);
  72. } elseif (is_numeric($value)) {
  73. $expected = date(DATE_ATOM, $value);
  74. } else {
  75. $expected = $value;
  76. }
  77. foreach ($properties as $property) {
  78. $this->getterAndSetterTest($value, $property, empty($expected) ? null : new \DateTime($expected));
  79. }
  80. }
  81. /**
  82. * @dataProvider invalidDateDataProvider
  83. * @expectedException \InvalidArgumentException
  84. * @param mixed $value
  85. */
  86. public function testSetInvalidCreatedAtGte($value)
  87. {
  88. $this->getTestInstance()->setCreatedAtGte($value);
  89. }
  90. /**
  91. * @dataProvider invalidDateDataProvider
  92. * @expectedException \InvalidArgumentException
  93. * @param mixed $value
  94. */
  95. public function testSetInvalidCreatedAtGt($value)
  96. {
  97. $this->getTestInstance()->setCreatedAtGt($value);
  98. }
  99. /**
  100. * @dataProvider invalidDateDataProvider
  101. * @expectedException \InvalidArgumentException
  102. * @param mixed $value
  103. */
  104. public function testSetInvalidCreatedAtLte($value)
  105. {
  106. $this->getTestInstance()->setCreatedAtLte($value);
  107. }
  108. /**
  109. * @dataProvider invalidDateDataProvider
  110. * @expectedException \InvalidArgumentException
  111. * @param mixed $value
  112. */
  113. public function testSetInvalidCreatedAtLt($value)
  114. {
  115. $this->getTestInstance()->setCreatedAtLt($value);
  116. }
  117. /**
  118. * @dataProvider invalidDateDataProvider
  119. * @expectedException \InvalidArgumentException
  120. * @param mixed $value
  121. */
  122. public function testSetInvalidCapturedAtGte($value)
  123. {
  124. $this->getTestInstance()->setCapturedAtGte($value);
  125. }
  126. /**
  127. * @dataProvider invalidDateDataProvider
  128. * @expectedException \InvalidArgumentException
  129. * @param mixed $value
  130. */
  131. public function testSetInvalidCapturedAtGt($value)
  132. {
  133. $this->getTestInstance()->setCapturedAtGt($value);
  134. }
  135. /**
  136. * @dataProvider invalidDateDataProvider
  137. * @expectedException \InvalidArgumentException
  138. * @param mixed $value
  139. */
  140. public function testSetInvalidCapturedAtLte($value)
  141. {
  142. $this->getTestInstance()->setCapturedAtLte($value);
  143. }
  144. /**
  145. * @dataProvider invalidDateDataProvider
  146. * @expectedException \InvalidArgumentException
  147. * @param mixed $value
  148. */
  149. public function testSetInvalidCapturedAtLt($value)
  150. {
  151. $this->getTestInstance()->setCapturedAtLt($value);
  152. }
  153. /**
  154. * @dataProvider validLimitDataProvider
  155. * @param $value
  156. */
  157. public function testLimit($value)
  158. {
  159. $this->getterAndSetterTest($value, 'limit', $value);
  160. }
  161. /**
  162. * @dataProvider invalidDataProvider
  163. * @expectedException \InvalidArgumentException
  164. * @param $value
  165. */
  166. public function testSetInvalidLimit($value)
  167. {
  168. $this->getTestInstance()->setLimit($value);
  169. }
  170. /**
  171. * @dataProvider validStatusDataProvider
  172. * @param $value
  173. */
  174. public function testStatus($value)
  175. {
  176. $this->getterAndSetterTest($value, 'status', $value === null ? '' : (string)$value);
  177. }
  178. /**
  179. * @dataProvider invalidDataProvider
  180. * @expectedException \InvalidArgumentException
  181. * @param $value
  182. */
  183. public function testSetInvalidStatus($value)
  184. {
  185. $this->getTestInstance()->setStatus($value);
  186. }
  187. public function testValidate()
  188. {
  189. $instance = new PaymentsRequest();
  190. self::assertTrue($instance->validate());
  191. }
  192. public function testBuilder()
  193. {
  194. $builder = PaymentsRequest::builder();
  195. self::assertTrue($builder instanceof PaymentsRequestBuilder);
  196. }
  197. public function validNetPageDataProvider()
  198. {
  199. return array(
  200. array(''),
  201. array(null),
  202. array(Random::str(1)),
  203. array(Random::str(2, 64)),
  204. array(new StringObject(Random::str(1))),
  205. array(new StringObject(Random::str(2, 64))),
  206. );
  207. }
  208. public function validPaymentMethodDataProvider()
  209. {
  210. $result = array(
  211. array(null),
  212. array(''),
  213. );
  214. foreach (PaymentMethodType::getValidValues() as $value) {
  215. $result[] = array($value);
  216. $result[] = array(new StringObject($value));
  217. }
  218. return $result;
  219. }
  220. public function validIdDataProvider()
  221. {
  222. return array(
  223. array(null),
  224. array(''),
  225. array('123'),
  226. array(Random::str(1, 64)),
  227. array(new StringObject(Random::str(1, 64))),
  228. );
  229. }
  230. public function validDateDataProvider()
  231. {
  232. return array(
  233. array(null),
  234. array(''),
  235. array(Random::int(0, time())),
  236. array(date(DATE_ATOM, Random::int(0, time()))),
  237. array(new \DateTime()),
  238. );
  239. }
  240. public function validStatusDataProvider()
  241. {
  242. $result = array(
  243. array(null),
  244. array(''),
  245. );
  246. foreach (PaymentStatus::getValidValues() as $value) {
  247. $result[] = array($value);
  248. $result[] = array(new StringObject($value));
  249. }
  250. return $result;
  251. }
  252. public function validLimitDataProvider()
  253. {
  254. return array(
  255. array(null),
  256. array(Random::int(1, PaymentsRequest::MAX_LIMIT_VALUE)),
  257. );
  258. }
  259. public function invalidIdDataProvider()
  260. {
  261. return array(
  262. array(array()),
  263. array(new \stdClass()),
  264. array(true),
  265. array(false),
  266. );
  267. }
  268. public function invalidDataProvider()
  269. {
  270. $result = array(
  271. array(array()),
  272. array(new \stdClass()),
  273. array(Random::str(10)),
  274. array(Random::bytes(10)),
  275. array(-1),
  276. array(PaymentsRequest::MAX_LIMIT_VALUE + 1),
  277. );
  278. return $result;
  279. }
  280. public function invalidPaymentMethodDataProvider()
  281. {
  282. return array(
  283. array(true),
  284. array(false),
  285. array(array()),
  286. array(new \stdClass()),
  287. array(Random::str(35)),
  288. array(Random::str(37)),
  289. array(new StringObject(Random::str(10))),
  290. );
  291. }
  292. public function invalidDateDataProvider()
  293. {
  294. return array(
  295. array(true),
  296. array(false),
  297. array(array()),
  298. array(new \stdClass()),
  299. array(Random::str(35)),
  300. array(Random::str(37)),
  301. array(new StringObject(Random::str(10))),
  302. array(-123),
  303. );
  304. }
  305. public function invalidPageDataProvider()
  306. {
  307. return array(
  308. array(array()),
  309. array(new \stdClass()),
  310. array(true),
  311. array(false),
  312. );
  313. }
  314. private function getterAndSetterTest($value, $property, $expected, $testHas = true)
  315. {
  316. $getter = 'get'.ucfirst($property);
  317. $setter = 'set'.ucfirst($property);
  318. $has = 'has'.ucfirst($property);
  319. $instance = $this->getTestInstance();
  320. if ($testHas) {
  321. self::assertFalse($instance->{$has}());
  322. }
  323. self::assertNull($instance->{$getter}());
  324. self::assertNull($instance->{$property});
  325. $instance->{$setter}($value);
  326. if ($value === null || $value === '') {
  327. if ($testHas) {
  328. self::assertFalse($instance->{$has}());
  329. }
  330. self::assertNull($instance->{$getter}());
  331. self::assertNull($instance->{$property});
  332. } else {
  333. if ($testHas) {
  334. self::assertTrue($instance->{$has}());
  335. }
  336. if ($expected instanceof \DateTime) {
  337. self::assertEquals($expected->getTimestamp(), $instance->{$getter}()->getTimestamp());
  338. self::assertEquals($expected->getTimestamp(), $instance->{$property}->getTimestamp());
  339. } else {
  340. self::assertEquals($expected, $instance->{$getter}());
  341. self::assertEquals($expected, $instance->{$property});
  342. }
  343. }
  344. $instance->{$setter}(null);
  345. if ($testHas) {
  346. self::assertFalse($instance->{$has}());
  347. }
  348. self::assertNull($instance->{$getter}());
  349. self::assertNull($instance->{$property});
  350. $instance->{$property} = $value;
  351. if ($value === null || $value === '') {
  352. if ($testHas) {
  353. self::assertFalse($instance->{$has}());
  354. }
  355. self::assertNull($instance->{$getter}());
  356. self::assertNull($instance->{$property});
  357. } else {
  358. if ($testHas) {
  359. self::assertTrue($instance->{$has}());
  360. }
  361. if ($expected instanceof \DateTime) {
  362. self::assertEquals($expected->getTimestamp(), $instance->{$getter}()->getTimestamp());
  363. self::assertEquals($expected->getTimestamp(), $instance->{$property}->getTimestamp());
  364. } else {
  365. self::assertEquals($expected, $instance->{$getter}());
  366. self::assertEquals($expected, $instance->{$property});
  367. }
  368. }
  369. }
  370. }