diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsCsv.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsCsv.php index 0f073ab4d65ce..513251ccbfe79 100644 --- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsCsv.php +++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsCsv.php @@ -4,30 +4,32 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + +declare(strict_types=1); + namespace Magento\SalesRule\Controller\Adminhtml\Promo\Quote; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Controller\ResultFactory; +use Magento\SalesRule\Controller\Adminhtml\Promo\Quote; +use Magento\SalesRule\Block\Adminhtml\Promo\Quote\Edit\Tab\Coupons\Grid; +use Magento\Framework\View\Result\Layout; +use Magento\Framework\App\ResponseInterface; -class ExportCouponsCsv extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote +class ExportCouponsCsv extends Quote { /** * Export coupon codes as CSV file * - * @return \Magento\Framework\App\ResponseInterface|null + * @return ResponseInterface|null */ public function execute() { $this->_initRule(); - $rule = $this->_coreRegistry->registry(\Magento\SalesRule\Model\RegistryConstants::CURRENT_SALES_RULE); - if ($rule->getId()) { - $fileName = 'coupon_codes.csv'; - $content = $this->_view->getLayout()->createBlock( - \Magento\SalesRule\Block\Adminhtml\Promo\Quote\Edit\Tab\Coupons\Grid::class - )->getCsvFile(); - return $this->_fileFactory->create($fileName, $content, DirectoryList::VAR_DIR); - } else { - $this->_redirect('sales_rule/*/detail', ['_current' => true]); - return; - } + $fileName = 'coupon_codes.csv'; + /** @var Layout $resultLayout */ + $resultLayout = $this->resultFactory->create(ResultFactory::TYPE_LAYOUT); + $content = $resultLayout->getLayout()->createBlock(Grid::class)->getCsvFile(); + return $this->_fileFactory->create($fileName, $content, DirectoryList::VAR_DIR); } } diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsXml.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsXml.php index 35d81d3a971fc..c5c61748b4729 100644 --- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsXml.php +++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/ExportCouponsXml.php @@ -4,32 +4,32 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ + +declare(strict_types=1); + namespace Magento\SalesRule\Controller\Adminhtml\Promo\Quote; use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Controller\ResultFactory; +use Magento\SalesRule\Controller\Adminhtml\Promo\Quote; +use Magento\SalesRule\Block\Adminhtml\Promo\Quote\Edit\Tab\Coupons\Grid; +use Magento\Framework\View\Result\Layout; +use Magento\Framework\App\ResponseInterface; -class ExportCouponsXml extends \Magento\SalesRule\Controller\Adminhtml\Promo\Quote +class ExportCouponsXml extends Quote { /** * Export coupon codes as excel xml file * - * @return \Magento\Framework\App\ResponseInterface|null + * @return ResponseInterface|null */ public function execute() { $this->_initRule(); - $rule = $this->_coreRegistry->registry(\Magento\SalesRule\Model\RegistryConstants::CURRENT_SALES_RULE); - if ($rule->getId()) { - $fileName = 'coupon_codes.xml'; - $content = $this->_view->getLayout()->createBlock( - \Magento\SalesRule\Block\Adminhtml\Promo\Quote\Edit\Tab\Coupons\Grid::class - )->getExcelFile( - $fileName - ); - return $this->_fileFactory->create($fileName, $content, DirectoryList::VAR_DIR); - } else { - $this->_redirect('sales_rule/*/detail', ['_current' => true]); - return; - } + $fileName = 'coupon_codes.xml'; + /** @var Layout $resultLayout */ + $resultLayout = $this->resultFactory->create(ResultFactory::TYPE_LAYOUT); + $content = $resultLayout->getLayout()->createBlock(Grid::class)->getExcelFile($fileName); + return $this->_fileFactory->create($fileName, $content, DirectoryList::VAR_DIR); } } diff --git a/app/code/Magento/SalesRule/Test/Unit/Controller/Adminhtml/Promo/Quote/ExportCouponsCsvTest.php b/app/code/Magento/SalesRule/Test/Unit/Controller/Adminhtml/Promo/Quote/ExportCouponsCsvTest.php new file mode 100644 index 0000000000000..f3658ab52f8bb --- /dev/null +++ b/app/code/Magento/SalesRule/Test/Unit/Controller/Adminhtml/Promo/Quote/ExportCouponsCsvTest.php @@ -0,0 +1,87 @@ +objectManagerHelper = new ObjectManagerHelper($this); + $this->fileFactoryMock = $this->createMock(FileFactory::class); + $this->resultFactoryMock = $this->createMock(ResultFactory::class); + + $this->controller = $this->objectManagerHelper->getObject( + ExportCouponsCsv::class, + [ + 'fileFactory' => $this->fileFactoryMock, + 'resultFactory' => $this->resultFactoryMock + ] + ); + } + + /** + * Test execute function + */ + public function testExecute() + { + $fileName = 'coupon_codes.csv'; + + $resultLayoutMock = $this->createMock(Layout::class); + $layoutMock = $this->createMock(LayoutInterface::class); + $contentMock = $this->createPartialMock(AbstractBlock::class, ['getCsvFile']); + $this->resultFactoryMock + ->expects($this->once()) + ->method('create') + ->with(ResultFactory::TYPE_LAYOUT)->willReturn($resultLayoutMock); + $resultLayoutMock->expects($this->once())->method('getLayout')->willReturn($layoutMock); + $layoutMock->expects($this->once())->method('createBlock')->with(Grid::class) + ->willReturn($contentMock); + $contentMock->expects($this->once())->method('getCsvFile')->willReturn('csvFile'); + $this->fileFactoryMock + ->expects($this->once()) + ->method('create') + ->with($fileName, 'csvFile', DirectoryList::VAR_DIR); + + $this->controller->execute(); + } +} diff --git a/app/code/Magento/SalesRule/Test/Unit/Controller/Adminhtml/Promo/Quote/ExportCouponsXmlTest.php b/app/code/Magento/SalesRule/Test/Unit/Controller/Adminhtml/Promo/Quote/ExportCouponsXmlTest.php new file mode 100644 index 0000000000000..83ad95171033f --- /dev/null +++ b/app/code/Magento/SalesRule/Test/Unit/Controller/Adminhtml/Promo/Quote/ExportCouponsXmlTest.php @@ -0,0 +1,89 @@ +objectManagerHelper = new ObjectManagerHelper($this); + $this->fileFactoryMock = $this->createMock(FileFactory::class); + $this->resultFactoryMock = $this->createMock(ResultFactory::class); + + $this->controller = $this->objectManagerHelper->getObject( + ExportCouponsXml::class, + [ + 'fileFactory' => $this->fileFactoryMock, + 'resultFactory' => $this->resultFactoryMock + ] + ); + } + + /** + * Test execute function + */ + public function testExecute() + { + $fileName = 'coupon_codes.xml'; + + $resultLayoutMock = $this->createMock(Layout::class); + $layoutMock = $this->createMock(LayoutInterface::class); + $contentMock = $this->createPartialMock(AbstractBlock::class, ['getExcelFile']); + $this->resultFactoryMock + ->expects($this->once()) + ->method('create') + ->with(ResultFactory::TYPE_LAYOUT)->willReturn($resultLayoutMock); + $resultLayoutMock->expects($this->once())->method('getLayout')->willReturn($layoutMock); + $layoutMock->expects($this->once())->method('createBlock')->with(Grid::class) + ->willReturn($contentMock); + $contentMock->expects($this->once())->method('getExcelFile') + ->with($fileName) + ->willReturn('xmlFile'); + $this->fileFactoryMock + ->expects($this->once()) + ->method('create') + ->with($fileName, 'xmlFile', DirectoryList::VAR_DIR); + + $this->controller->execute(); + } +}