123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Analytics\Test\Unit\Model;
- use Magento\Analytics\Model\ConfigInterface;
- use Magento\Analytics\Model\ProviderFactory;
- use Magento\Analytics\Model\ReportWriter;
- use Magento\Analytics\ReportXml\DB\ReportValidator;
- use Magento\Analytics\ReportXml\ReportProvider;
- use Magento\Framework\Filesystem\Directory\WriteInterface;
- use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class ReportWriterTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var ConfigInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $configInterfaceMock;
- /**
- * @var ReportValidator|\PHPUnit_Framework_MockObject_MockObject
- */
- private $reportValidatorMock;
- /**
- * @var ProviderFactory|\PHPUnit_Framework_MockObject_MockObject
- */
- private $providerFactoryMock;
- /**
- * @var ReportProvider|\PHPUnit_Framework_MockObject_MockObject
- */
- private $reportProviderMock;
- /**
- * @var ObjectManagerHelper
- */
- private $objectManagerHelper;
- /**
- * @var WriteInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $directoryMock;
- /**
- * @var ReportWriter
- */
- private $reportWriter;
- /**
- * @var string
- */
- private $reportName = 'testReport';
- /**
- * @var string
- */
- private $providerName = 'testProvider';
- /**
- * @var string
- */
- private $providerClass = 'Magento\Analytics\Provider';
- /**
- * @return void
- */
- protected function setUp()
- {
- $this->configInterfaceMock = $this->getMockBuilder(ConfigInterface::class)->getMockForAbstractClass();
- $this->reportValidatorMock = $this->getMockBuilder(ReportValidator::class)
- ->disableOriginalConstructor()->getMock();
- $this->providerFactoryMock = $this->getMockBuilder(ProviderFactory::class)
- ->disableOriginalConstructor()->getMock();
- $this->reportProviderMock = $this->getMockBuilder(ReportProvider::class)
- ->disableOriginalConstructor()->getMock();
- $this->directoryMock = $this->getMockBuilder(WriteInterface::class)->getMockForAbstractClass();
- $this->objectManagerHelper = new ObjectManagerHelper($this);
- $this->reportWriter = $this->objectManagerHelper->getObject(
- ReportWriter::class,
- [
- 'config' => $this->configInterfaceMock,
- 'reportValidator' => $this->reportValidatorMock,
- 'providerFactory' => $this->providerFactoryMock
- ]
- );
- }
- /**
- * @param array $configData
- * @return void
- *
- * @dataProvider configDataProvider
- */
- public function testWrite(array $configData)
- {
- $errors = [];
- $fileData = [
- ['number' => 1, 'type' => 'Shoes Usual']
- ];
- $this->configInterfaceMock
- ->expects($this->once())
- ->method('get')
- ->with()
- ->willReturn([$configData]);
- $this->providerFactoryMock
- ->expects($this->once())
- ->method('create')
- ->with($this->providerClass)
- ->willReturn($this->reportProviderMock);
- $parameterName = isset(reset($configData)[0]['parameters']['name'])
- ? reset($configData)[0]['parameters']['name']
- : '';
- $this->reportProviderMock->expects($this->once())
- ->method('getReport')
- ->with($parameterName ?: null)
- ->willReturn($fileData);
- $errorStreamMock = $this->getMockBuilder(
- \Magento\Framework\Filesystem\File\WriteInterface::class
- )->getMockForAbstractClass();
- $errorStreamMock
- ->expects($this->once())
- ->method('lock')
- ->with();
- $errorStreamMock
- ->expects($this->exactly(2))
- ->method('writeCsv')
- ->withConsecutive(
- [array_keys($fileData[0])],
- [$fileData[0]]
- );
- $errorStreamMock->expects($this->once())->method('unlock');
- $errorStreamMock->expects($this->once())->method('close');
- if ($parameterName) {
- $this->reportValidatorMock
- ->expects($this->once())
- ->method('validate')
- ->with($parameterName)
- ->willReturn($errors);
- }
- $this->directoryMock
- ->expects($this->once())
- ->method('openFile')
- ->with(
- $this->stringContains('/var/tmp' . $parameterName ?: $this->reportName),
- 'w+'
- )->willReturn($errorStreamMock);
- $this->assertTrue($this->reportWriter->write($this->directoryMock, '/var/tmp'));
- }
- /**
- * @param array $configData
- * @return void
- *
- * @dataProvider configDataProvider
- */
- public function testWriteErrorFile($configData)
- {
- $errors = ['orders', 'SQL Error: test'];
- $this->configInterfaceMock->expects($this->once())->method('get')->willReturn([$configData]);
- $errorStreamMock = $this->getMockBuilder(
- \Magento\Framework\Filesystem\File\WriteInterface::class
- )->getMockForAbstractClass();
- $errorStreamMock->expects($this->once())->method('lock');
- $errorStreamMock->expects($this->once())->method('writeCsv')->with($errors);
- $errorStreamMock->expects($this->once())->method('unlock');
- $errorStreamMock->expects($this->once())->method('close');
- $this->reportValidatorMock->expects($this->once())->method('validate')->willReturn($errors);
- $this->directoryMock->expects($this->once())->method('openFile')->with('/var/tmp' . 'errors.csv', 'w+')
- ->willReturn($errorStreamMock);
- $this->assertTrue($this->reportWriter->write($this->directoryMock, '/var/tmp'));
- }
- /**
- * @return void
- */
- public function testWriteEmptyReports()
- {
- $this->configInterfaceMock->expects($this->once())->method('get')->willReturn([]);
- $this->reportValidatorMock->expects($this->never())->method('validate');
- $this->directoryMock->expects($this->never())->method('openFile');
- $this->assertTrue($this->reportWriter->write($this->directoryMock, '/var/tmp'));
- }
- /**
- * @return array
- */
- public function configDataProvider()
- {
- return [
- 'reportProvider' => [
- [
- 'providers' => [
- [
- 'name' => $this->providerName,
- 'class' => $this->providerClass,
- 'parameters' => [
- 'name' => $this->reportName
- ],
- ]
- ]
- ]
- ],
- ];
- }
- }
|