PageRenderTime 40ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/magento/module-sales-rule/Test/Unit/Model/Coupon/MassgeneratorTest.php

https://gitlab.com/yousafsyed/easternglamor
PHP | 340 lines | 247 code | 25 blank | 68 comment | 3 complexity | 50a81a92e514171f1701aad7add75ab2 MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\SalesRule\Test\Unit\Model\Coupon;
  7. /**
  8. * Class MassgeneratorTest
  9. */
  10. class MassgeneratorTest extends \PHPUnit_Framework_TestCase
  11. {
  12. /**
  13. * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
  14. */
  15. protected $objectManager;
  16. /**
  17. * @var string
  18. */
  19. protected $charset;
  20. protected function setUp()
  21. {
  22. $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  23. $this->charset = str_split(md5((string)time()));
  24. }
  25. /**
  26. * Run test generateCode method
  27. *
  28. * @param array $data
  29. * @param int $length
  30. *
  31. * @dataProvider generatorDataProvider
  32. */
  33. public function testGenerateCode(array $data, $length)
  34. {
  35. $salesRuleCouponMock = $this->getMock('Magento\SalesRule\Helper\Coupon', ['getCharset'], [], '', false);
  36. /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
  37. $massgenerator = $this->objectManager->getObject(
  38. 'Magento\SalesRule\Model\Coupon\Massgenerator',
  39. ['salesRuleCoupon' => $salesRuleCouponMock, 'data' => $data]
  40. );
  41. $salesRuleCouponMock->expects($this->once())
  42. ->method('getCharset')
  43. ->with($data['format'])
  44. ->will($this->returnValue($this->charset));
  45. $code = $massgenerator->generateCode();
  46. $this->assertTrue(strlen($code) === $length);
  47. $this->assertNotEmpty($code);
  48. if (isset($data['data'])) {
  49. $this->assertCount($data['length'] / $data['dash'], explode($data['delimiter'], $code));
  50. }
  51. }
  52. /**
  53. * Run test getDelimiter method
  54. *
  55. * @param array $data
  56. *
  57. * @dataProvider delimiterDataProvider
  58. */
  59. public function testGetDelimiter(array $data)
  60. {
  61. $salesRuleCouponMock = $this->getMock(
  62. 'Magento\SalesRule\Helper\Coupon',
  63. ['getCodeSeparator'],
  64. [],
  65. '',
  66. false
  67. );
  68. /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
  69. $massgenerator = $this->objectManager->getObject(
  70. 'Magento\SalesRule\Model\Coupon\Massgenerator',
  71. ['salesRuleCoupon' => $salesRuleCouponMock, 'data' => $data]
  72. );
  73. if (empty($data['delimiter'])) {
  74. $salesRuleCouponMock->expects($this->once())
  75. ->method('getCodeSeparator')
  76. ->will($this->returnValue('test-separator'));
  77. $this->assertEquals('test-separator', $massgenerator->getDelimiter());
  78. } else {
  79. $this->assertEquals($data['delimiter'], $massgenerator->getDelimiter());
  80. }
  81. }
  82. /**
  83. * Run test generatePool method
  84. */
  85. public function testGeneratePool()
  86. {
  87. $qty = 10;
  88. $data = [
  89. 'qty' => $qty,
  90. 'length' => 15,
  91. 'format' => 'test-format',
  92. ];
  93. $salesRuleCouponMock = $this->getMock('Magento\SalesRule\Helper\Coupon', ['getCharset'], [], '', false);
  94. $resourceMock = $this->getMock(
  95. 'Magento\SalesRule\Model\ResourceModel\Coupon',
  96. ['exists', '__wakeup', 'getIdFieldName'],
  97. [],
  98. '',
  99. false
  100. );
  101. $dateMock = $this->getMock('Magento\Framework\Stdlib\DateTime\DateTime', ['gmtTimestamp'], [], '', false);
  102. $dateTimeMock = $this->getMock('Magento\Framework\Stdlib\DateTime', ['formatDate'], [], '', false);
  103. $couponFactoryMock = $this->getMock('Magento\SalesRule\Model\CouponFactory', ['create'], [], '', false);
  104. $couponMock = $this->getMock(
  105. 'Magento\SalesRule\Model\Coupon',
  106. [
  107. '__wakeup',
  108. 'setId',
  109. 'setRuleId',
  110. 'setUsageLimit',
  111. 'setUsagePerCustomer',
  112. 'setExpirationDate',
  113. 'setCreatedAt',
  114. 'setType',
  115. 'setCode',
  116. 'save'
  117. ],
  118. [],
  119. '',
  120. false
  121. );
  122. $couponMock->expects($this->any())->method('setId')->will($this->returnSelf());
  123. $couponMock->expects($this->any())->method('setRuleId')->will($this->returnSelf());
  124. $couponMock->expects($this->any())->method('setUsageLimit')->will($this->returnSelf());
  125. $couponMock->expects($this->any())->method('setUsagePerCustomer')->will($this->returnSelf());
  126. $couponMock->expects($this->any())->method('setExpirationDate')->will($this->returnSelf());
  127. $couponMock->expects($this->any())->method('setCreatedAt')->will($this->returnSelf());
  128. $couponMock->expects($this->any())->method('setType')->will($this->returnSelf());
  129. $couponMock->expects($this->any())->method('setCode')->will($this->returnSelf());
  130. $couponMock->expects($this->any())->method('save')->will($this->returnSelf());
  131. $couponFactoryMock->expects($this->once())
  132. ->method('create')
  133. ->will($this->returnValue($couponMock));
  134. $salesRuleCouponMock->expects($this->any())
  135. ->method('getCharset')
  136. ->with($data['format'])
  137. ->will($this->returnValue($this->charset));
  138. /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
  139. $massgenerator = $this->objectManager->getObject(
  140. 'Magento\SalesRule\Model\Coupon\Massgenerator',
  141. [
  142. 'couponFactory' => $couponFactoryMock,
  143. 'dateTime' => $dateTimeMock,
  144. 'date' => $dateMock,
  145. 'resource' => $resourceMock,
  146. 'data' => $data,
  147. 'salesRuleCoupon' => $salesRuleCouponMock
  148. ]
  149. );
  150. $this->assertEquals($massgenerator, $massgenerator->generatePool());
  151. $this->assertEquals($qty, $massgenerator->getGeneratedCount());
  152. $codes = $massgenerator->getGeneratedCodes();
  153. ($qty > 0) ? $this->assertNotEmpty($codes) : $this->assertEmpty($codes);
  154. }
  155. /**
  156. * Run test generatePool method (throw exception)
  157. * @expectedException \Magento\Framework\Exception\LocalizedException
  158. * @expectedExceptionMessage We cannot create the requested Coupon Qty. Please check your settings and try again.
  159. */
  160. public function testGeneratePoolException()
  161. {
  162. $data = [
  163. 'qty' => 3,
  164. 'length' => 15,
  165. 'format' => 'test-format',
  166. 'max_attempts' => 0,
  167. ];
  168. $salesRuleCouponMock = $this->getMock('Magento\SalesRule\Helper\Coupon', ['getCharset'], [], '', false);
  169. $resourceMock = $this->getMock(
  170. 'Magento\SalesRule\Model\ResourceModel\Coupon',
  171. ['exists', '__wakeup', 'getIdFieldName'],
  172. [],
  173. '',
  174. false
  175. );
  176. $dateMock = $this->getMock('Magento\Framework\Stdlib\DateTime\DateTime', ['gmtTimestamp'], [], '', false);
  177. $dateTimeMock = $this->getMock('Magento\Framework\Stdlib\DateTime', ['formatDate'], [], '', false);
  178. $couponFactoryMock = $this->getMock('Magento\SalesRule\Model\CouponFactory', ['create'], [], '', false);
  179. $couponMock = $this->getMock('Magento\SalesRule\Model\Coupon', ['__wakeup'], [], '', false);
  180. $couponFactoryMock->expects($this->once())
  181. ->method('create')
  182. ->will($this->returnValue($couponMock));
  183. $salesRuleCouponMock->expects($this->any())
  184. ->method('getCharset')
  185. ->with($data['format'])
  186. ->will($this->returnValue($this->charset));
  187. $resourceMock->expects($this->any())
  188. ->method('exists')
  189. ->will($this->returnValue(true));
  190. /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
  191. $massgenerator = $this->objectManager->getObject(
  192. 'Magento\SalesRule\Model\Coupon\Massgenerator',
  193. [
  194. 'couponFactory' => $couponFactoryMock,
  195. 'dateTime' => $dateTimeMock,
  196. 'date' => $dateMock,
  197. 'resource' => $resourceMock,
  198. 'data' => $data,
  199. 'salesRuleCoupon' => $salesRuleCouponMock
  200. ]
  201. );
  202. $this->assertEquals($massgenerator, $massgenerator->generatePool());
  203. }
  204. /**
  205. * Run test validateData method
  206. *
  207. * @param array $data
  208. * @param bool $result
  209. *
  210. * @dataProvider validateDataProvider
  211. */
  212. public function testValidateData(array $data, $result)
  213. {
  214. /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
  215. $massgenerator = $this->objectManager->getObject('Magento\SalesRule\Model\Coupon\Massgenerator');
  216. $this->assertEquals($result, $massgenerator->validateData($data));
  217. }
  218. /**
  219. * Run test getGeneratedCount method
  220. */
  221. public function testGetGeneratedCount()
  222. {
  223. /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
  224. $massgenerator = $this->objectManager->getObject('Magento\SalesRule\Model\Coupon\Massgenerator');
  225. $this->assertEquals(0, $massgenerator->getGeneratedCount());
  226. }
  227. /**
  228. * Data for validate test
  229. *
  230. * @return array
  231. */
  232. public function validateDataProvider()
  233. {
  234. return [
  235. [
  236. 'data' => [
  237. 'qty' => 20,
  238. 'rule_id' => 1,
  239. 'length' => 15,
  240. 'format' => 'test-format',
  241. ],
  242. 'result' => true,
  243. ],
  244. [
  245. 'data' => [
  246. 'qty' => 0,
  247. 'rule_id' => 1,
  248. 'length' => 15,
  249. 'format' => 'test-format',
  250. ],
  251. 'result' => false
  252. ],
  253. [
  254. 'data' => [
  255. 'qty' => 0,
  256. 'rule_id' => 1,
  257. 'length' => 15,
  258. 'format' => '',
  259. ],
  260. 'result' => false
  261. ],
  262. [
  263. 'data' => [
  264. 'qty' => 2,
  265. 'length' => 15,
  266. ],
  267. 'result' => false
  268. ]
  269. ];
  270. }
  271. /**
  272. * Data for test getDelimiter method
  273. *
  274. * @return array
  275. */
  276. public function delimiterDataProvider()
  277. {
  278. return [
  279. [
  280. 'data' => [
  281. 'delimiter' => 'delimiter-value',
  282. ],
  283. ],
  284. [
  285. 'data' => []
  286. ]
  287. ];
  288. }
  289. /**
  290. * Data for code generation coupon
  291. *
  292. * @return array
  293. */
  294. public function generatorDataProvider()
  295. {
  296. return [
  297. [
  298. 'data' => [
  299. 'format' => 'test-format',
  300. 'length' => 10,
  301. ],
  302. 'length' => 10,
  303. ],
  304. [
  305. 'data' => [
  306. 'format' => 'test-format',
  307. 'length' => 18,
  308. 'dash' => 6,
  309. 'delimiter' => '-',
  310. ],
  311. 'length' => 20
  312. ]
  313. ];
  314. }
  315. }