Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@
use Magento\Framework\View\Result\Layout;
use Magento\Framework\App\ResponseInterface;
use Magento\Framework\App\Action\HttpGetActionInterface;
use Magento\Framework\App\Action\HttpPostActionInterface;

/**
* Export Coupons to csv file
*
* Class \Magento\SalesRule\Controller\Adminhtml\Promo\Quote\ExportCouponsCsv
*/
class ExportCouponsCsv extends Quote implements HttpGetActionInterface
class ExportCouponsCsv extends Quote implements HttpGetActionInterface, HttpPostActionInterface
{
/**
* Export coupon codes as CSV file
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@
use Magento\Framework\View\Result\Layout;
use Magento\Framework\App\ResponseInterface;
use Magento\Framework\App\Action\HttpGetActionInterface;
use Magento\Framework\App\Action\HttpPostActionInterface;

/**
* Export coupons to xml file
*
* Class \Magento\SalesRule\Controller\Adminhtml\Promo\Quote\ExportCouponsXml
*/
class ExportCouponsXml extends Quote implements HttpGetActionInterface
class ExportCouponsXml extends Quote implements HttpGetActionInterface, HttpPostActionInterface
{
/**
* Export coupon codes as excel xml file
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\SalesRule\Controller\Adminhtml\Promo\Quote\ExportCoupons;

use Magento\Framework\App\ResourceConnection;
use Magento\SalesRule\Model\ResourceModel\Rule\Collection as RuleCollection;
use Magento\SalesRule\Model\Rule;
use Magento\TestFramework\TestCase\AbstractBackendController;
use Magento\TestFramework\Helper\Bootstrap;

/**
* Test export coupon csv
*
* Verify export csv
* @magentoAppArea adminhtml
* @magentoDataFixture Magento/SalesRule/_files/cart_rule_with_coupon_list.php
*/
class ExportCouponsCsvTest extends AbstractBackendController
{
/**
* @var string
*/
protected $uri = 'backend/sales_rule/promo_quote/exportCouponsCsv';

/**
* @var string
*/
protected $resource = 'Magento_SalesRule::quote';

/**
* @var Rule
*/
private $salesRule;

/**
* @var ResourceConnection
*/
private $resourceConnection;

/**
* @inheritdoc
*/
protected function setUp(): void
{
parent::setUp();
$this->resourceConnection = Bootstrap::getObjectManager()->get(ResourceConnection::class);
$this->initSalesRule();
}

/**
* Prepare request
*
* @return void
*/
private function prepareRequest(): void
{
$couponList = $this->getCouponsIdList();
if (count($couponList)) {
$this->getRequest()->setParams(['internal_ids' => $couponList[0]])->setMethod('POST');
}
}

/**
* Init current sales rule
*
* @return void
*/
private function initSalesRule(): void
{
/** @var RuleCollection $collection */
$collection = Bootstrap::getObjectManager()->create(RuleCollection::class);
$collection->addFieldToFilter('name', 'Rule with coupon list');
$this->salesRule = $collection->getFirstItem();
}

/**
* Retrieve id list of coupons
*
* @return array
*/
private function getCouponsIdList(): array
{
$select = $this->resourceConnection->getConnection()
->select()
->from($this->resourceConnection->getTableName('salesrule_coupon'))
->columns(['coupon_id'])
->where('rule_id=?', $this->salesRule->getId());

return $this->resourceConnection->getConnection()->fetchCol($select);
}

/**
* Test export csv
*
* @return void
*/
public function testExportCsv(): void
{
$this->prepareRequest();
$this->dispatch($this->uri);
$this->assertStringNotContainsString('404 Error', $this->getResponse()->getBody());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\SalesRule\Controller\Adminhtml\Promo\Quote\ExportCoupons;

use Magento\Framework\App\ResourceConnection;
use Magento\SalesRule\Model\ResourceModel\Rule\Collection as RuleCollection;
use Magento\SalesRule\Model\Rule;
use Magento\TestFramework\TestCase\AbstractBackendController;
use Magento\TestFramework\Helper\Bootstrap;

/**
* Test export coupon xml
*
* Verify export xml
* @magentoAppArea adminhtml
* @magentoDataFixture Magento/SalesRule/_files/cart_rule_with_coupon_list.php
*/
class ExportCouponsXmlTest extends AbstractBackendController
{
/**
* @var string
*/
protected $uri = 'backend/sales_rule/promo_quote/exportCouponsXml';

/**
* @var string
*/
protected $resource = 'Magento_SalesRule::quote';

/**
* @var Rule
*/
private $salesRule;

/**
* @var ResourceConnection
*/
private $resourceConnection;

/**
* @inheritdoc
*/
protected function setUp(): void
{
parent::setUp();
$this->resourceConnection = Bootstrap::getObjectManager()->get(ResourceConnection::class);
$this->initSalesRule();
}

/**
* Prepare request
*
* @return void
*/
private function prepareRequest(): void
{
$couponList = $this->getCouponsIdList();
if (count($couponList)) {
$this->getRequest()->setParams(['internal_ids' => $couponList[0]])->setMethod('POST');
}
}

/**
* Init current sales rule
*
* @return void
*/
private function initSalesRule(): void
{
/** @var RuleCollection $collection */
$collection = Bootstrap::getObjectManager()->create(RuleCollection::class);
$collection->addFieldToFilter('name', 'Rule with coupon list');
$this->salesRule = $collection->getFirstItem();
}

/**
* Retrieve id list of coupons
*
* @return array
*/
private function getCouponsIdList(): array
{
$select = $this->resourceConnection->getConnection()
->select()
->from($this->resourceConnection->getTableName('salesrule_coupon'))
->columns(['coupon_id'])
->where('rule_id=?', $this->salesRule->getId());

return $this->resourceConnection->getConnection()->fetchCol($select);
}

/**
* Test export xml
*
* @return void
*/
public function testExportCsv(): void
{
$this->prepareRequest();
$this->dispatch($this->uri);
$this->assertStringNotContainsString('404 Error', $this->getResponse()->getBody());
}
}