123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\SalesRule\Test\Unit\Model\Coupon;
- /**
- * Class MassgeneratorTest
- */
- class MassgeneratorTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
- */
- protected $objectManager;
- /**
- * @var string
- */
- protected $charset;
- protected function setUp()
- {
- $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- $this->charset = str_split(md5((string)time()));
- }
- /**
- * Run test generateCode method
- *
- * @param array $data
- * @param int $length
- *
- * @dataProvider generatorDataProvider
- */
- public function testGenerateCode(array $data, $length)
- {
- $salesRuleCouponMock = $this->createPartialMock(\Magento\SalesRule\Helper\Coupon::class, ['getCharset']);
- /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
- $massgenerator = $this->objectManager->getObject(
- \Magento\SalesRule\Model\Coupon\Massgenerator::class,
- ['salesRuleCoupon' => $salesRuleCouponMock, 'data' => $data]
- );
- $salesRuleCouponMock->expects($this->once())
- ->method('getCharset')
- ->with($data['format'])
- ->will($this->returnValue($this->charset));
- $code = $massgenerator->generateCode();
- $this->assertTrue(strlen($code) === $length);
- $this->assertNotEmpty($code);
- if (isset($data['data'])) {
- $this->assertCount($data['length'] / $data['dash'], explode($data['delimiter'], $code));
- }
- }
- /**
- * Run test getDelimiter method
- *
- * @param array $data
- *
- * @dataProvider delimiterDataProvider
- */
- public function testGetDelimiter(array $data)
- {
- $salesRuleCouponMock = $this->createPartialMock(\Magento\SalesRule\Helper\Coupon::class, ['getCodeSeparator']);
- /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
- $massgenerator = $this->objectManager->getObject(
- \Magento\SalesRule\Model\Coupon\Massgenerator::class,
- ['salesRuleCoupon' => $salesRuleCouponMock, 'data' => $data]
- );
- if (empty($data['delimiter'])) {
- $salesRuleCouponMock->expects($this->once())
- ->method('getCodeSeparator')
- ->will($this->returnValue('test-separator'));
- $this->assertEquals('test-separator', $massgenerator->getDelimiter());
- } else {
- $this->assertEquals($data['delimiter'], $massgenerator->getDelimiter());
- }
- }
- /**
- * Run test generatePool method
- */
- public function testGeneratePool()
- {
- $qty = 10;
- $data = [
- 'qty' => $qty,
- 'length' => 15,
- 'format' => 'test-format',
- ];
- $salesRuleCouponMock = $this->createPartialMock(\Magento\SalesRule\Helper\Coupon::class, ['getCharset']);
- $resourceMock = $this->createPartialMock(
- \Magento\SalesRule\Model\ResourceModel\Coupon::class,
- ['exists', '__wakeup', 'getIdFieldName']
- );
- $dateMock = $this->createPartialMock(\Magento\Framework\Stdlib\DateTime\DateTime::class, ['gmtTimestamp']);
- $dateTimeMock = $this->createPartialMock(\Magento\Framework\Stdlib\DateTime::class, ['formatDate']);
- $couponFactoryMock = $this->createPartialMock(\Magento\SalesRule\Model\CouponFactory::class, ['create']);
- $couponMock = $this->createPartialMock(\Magento\SalesRule\Model\Coupon::class, [
- '__wakeup',
- 'setId',
- 'setRuleId',
- 'setUsageLimit',
- 'setUsagePerCustomer',
- 'setExpirationDate',
- 'setCreatedAt',
- 'setType',
- 'setCode',
- 'save'
- ]);
- $couponMock->expects($this->any())->method('setId')->will($this->returnSelf());
- $couponMock->expects($this->any())->method('setRuleId')->will($this->returnSelf());
- $couponMock->expects($this->any())->method('setUsageLimit')->will($this->returnSelf());
- $couponMock->expects($this->any())->method('setUsagePerCustomer')->will($this->returnSelf());
- $couponMock->expects($this->any())->method('setExpirationDate')->will($this->returnSelf());
- $couponMock->expects($this->any())->method('setCreatedAt')->will($this->returnSelf());
- $couponMock->expects($this->any())->method('setType')->will($this->returnSelf());
- $couponMock->expects($this->any())->method('setCode')->will($this->returnSelf());
- $couponMock->expects($this->any())->method('save')->will($this->returnSelf());
- $couponFactoryMock->expects($this->once())
- ->method('create')
- ->will($this->returnValue($couponMock));
- $salesRuleCouponMock->expects($this->any())
- ->method('getCharset')
- ->with($data['format'])
- ->will($this->returnValue($this->charset));
- /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
- $massgenerator = $this->objectManager->getObject(
- \Magento\SalesRule\Model\Coupon\Massgenerator::class,
- [
- 'couponFactory' => $couponFactoryMock,
- 'dateTime' => $dateTimeMock,
- 'date' => $dateMock,
- 'resource' => $resourceMock,
- 'data' => $data,
- 'salesRuleCoupon' => $salesRuleCouponMock
- ]
- );
- $this->assertEquals($massgenerator, $massgenerator->generatePool());
- $this->assertEquals($qty, $massgenerator->getGeneratedCount());
- $codes = $massgenerator->getGeneratedCodes();
- ($qty > 0) ? $this->assertNotEmpty($codes) : $this->assertEmpty($codes);
- }
- /**
- * Run test generatePool method (throw exception)
- * @expectedException \Magento\Framework\Exception\LocalizedException
- * @expectedExceptionMessage We cannot create the requested Coupon Qty. Please check your settings and try again.
- */
- public function testGeneratePoolException()
- {
- $data = [
- 'qty' => 3,
- 'length' => 15,
- 'format' => 'test-format',
- 'max_attempts' => 0,
- ];
- $salesRuleCouponMock = $this->createPartialMock(\Magento\SalesRule\Helper\Coupon::class, ['getCharset']);
- $resourceMock = $this->createPartialMock(
- \Magento\SalesRule\Model\ResourceModel\Coupon::class,
- ['exists', '__wakeup', 'getIdFieldName']
- );
- $dateMock = $this->createPartialMock(\Magento\Framework\Stdlib\DateTime\DateTime::class, ['gmtTimestamp']);
- $dateTimeMock = $this->createPartialMock(\Magento\Framework\Stdlib\DateTime::class, ['formatDate']);
- $couponFactoryMock = $this->createPartialMock(\Magento\SalesRule\Model\CouponFactory::class, ['create']);
- $couponMock = $this->createPartialMock(\Magento\SalesRule\Model\Coupon::class, ['__wakeup']);
- $couponFactoryMock->expects($this->once())
- ->method('create')
- ->will($this->returnValue($couponMock));
- $salesRuleCouponMock->expects($this->any())
- ->method('getCharset')
- ->with($data['format'])
- ->will($this->returnValue($this->charset));
- $resourceMock->expects($this->any())
- ->method('exists')
- ->will($this->returnValue(true));
- /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
- $massgenerator = $this->objectManager->getObject(
- \Magento\SalesRule\Model\Coupon\Massgenerator::class,
- [
- 'couponFactory' => $couponFactoryMock,
- 'dateTime' => $dateTimeMock,
- 'date' => $dateMock,
- 'resource' => $resourceMock,
- 'data' => $data,
- 'salesRuleCoupon' => $salesRuleCouponMock
- ]
- );
- $this->assertEquals($massgenerator, $massgenerator->generatePool());
- }
- /**
- * Run test validateData method
- *
- * @param array $data
- * @param bool $result
- *
- * @dataProvider validateDataProvider
- */
- public function testValidateData(array $data, $result)
- {
- /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
- $massgenerator = $this->objectManager->getObject(\Magento\SalesRule\Model\Coupon\Massgenerator::class);
- $this->assertEquals($result, $massgenerator->validateData($data));
- }
- /**
- * Run test getGeneratedCount method
- */
- public function testGetGeneratedCount()
- {
- /** @var \Magento\SalesRule\Model\Coupon\Massgenerator $massgenerator */
- $massgenerator = $this->objectManager->getObject(\Magento\SalesRule\Model\Coupon\Massgenerator::class);
- $this->assertEquals(0, $massgenerator->getGeneratedCount());
- }
- /**
- * Data for validate test
- *
- * @return array
- */
- public function validateDataProvider()
- {
- return [
- [
- 'data' => [
- 'qty' => 20,
- 'rule_id' => 1,
- 'length' => 15,
- 'format' => 'test-format',
- ],
- 'result' => true,
- ],
- [
- 'data' => [
- 'qty' => 0,
- 'rule_id' => 1,
- 'length' => 15,
- 'format' => 'test-format',
- ],
- 'result' => false
- ],
- [
- 'data' => [
- 'qty' => 0,
- 'rule_id' => 1,
- 'length' => 15,
- 'format' => '',
- ],
- 'result' => false
- ],
- [
- 'data' => [
- 'qty' => 2,
- 'length' => 15,
- ],
- 'result' => false
- ]
- ];
- }
- /**
- * Data for test getDelimiter method
- *
- * @return array
- */
- public function delimiterDataProvider()
- {
- return [
- [
- 'data' => [
- 'delimiter' => 'delimiter-value',
- ],
- ],
- [
- 'data' => []
- ]
- ];
- }
- /**
- * Data for code generation coupon
- *
- * @return array
- */
- public function generatorDataProvider()
- {
- return [
- [
- 'data' => [
- 'format' => 'test-format',
- 'length' => 10,
- ],
- 'length' => 10,
- ],
- [
- 'data' => [
- 'format' => 'test-format',
- 'length' => 18,
- 'dash' => 6,
- 'delimiter' => '-',
- ],
- 'length' => 20
- ]
- ];
- }
- }
|