Skip to content

Commit ff19419

Browse files
committed
MAGETWO-92986: Write Logs for Failed Process of Generating Factories in Extensions
- add logger to construct
1 parent 07dbc78 commit ff19419

File tree

2 files changed

+43
-30
lines changed

2 files changed

+43
-30
lines changed

lib/internal/Magento/Framework/Code/Generator.php

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
use Magento\Framework\Code\Generator\EntityAbstract;
1010
use Magento\Framework\Code\Generator\Io;
1111
use Magento\Framework\ObjectManagerInterface;
12-
use Psr\Log\LoggerInterface;
1312
use Magento\Framework\Phrase;
1413
use Magento\Framework\Filesystem\Driver\File;
14+
use Psr\Log\LoggerInterface;
1515

1616
class Generator
1717
{
@@ -41,19 +41,29 @@ class Generator
4141
*/
4242
protected $objectManager;
4343

44+
/**
45+
* Logger instance
46+
*
47+
* @var LoggerInterface
48+
*/
49+
private $logger;
50+
4451
/**
4552
* @param Generator\Io $ioObject
4653
* @param array $generatedEntities
4754
* @param DefinedClasses $definedClasses
55+
* @param LoggerInterface|null $logger
4856
*/
4957
public function __construct(
5058
Io $ioObject = null,
5159
array $generatedEntities = [],
52-
DefinedClasses $definedClasses = null
60+
DefinedClasses $definedClasses = null,
61+
LoggerInterface $logger = null
5362
) {
5463
$this->_ioObject = $ioObject ?: new Io(new File());
5564
$this->definedClasses = $definedClasses ?: new DefinedClasses();
5665
$this->_generatedEntities = $generatedEntities;
66+
$this->logger = $logger;
5767
}
5868

5969
/**
@@ -114,15 +124,14 @@ public function generateClass($className)
114124
$this->tryToLoadSourceClass($className, $generator);
115125
if (!($file = $generator->generate())) {
116126
/** @var $logger LoggerInterface */
117-
$logger = $this->getObjectManager()->get(LoggerInterface::class);
118127
$errors = $generator->getErrors();
119128
$errors[] = 'Class ' . $className . ' generation error: The requested class did not generate properly, '
120129
. 'because the \'generated\' directory permission is read-only. '
121130
. 'If --- after running the \'bin/magento setup:di:compile\' CLI command when the \'generated\' '
122131
. 'directory permission is set to write --- the requested class did not generate properly, then '
123132
. 'you must add the generated class object to the signature of the related construct method, only.';
124133
$message = implode(PHP_EOL, $errors);
125-
$logger->critical($message);
134+
$this->getLogger()->critical($message);
126135
throw new \RuntimeException($message);
127136
}
128137
if (!$this->definedClasses->isClassLoadableFromMemory($className)) {
@@ -132,6 +141,19 @@ public function generateClass($className)
132141
}
133142
}
134143

144+
/**
145+
* Retrieve logger
146+
*
147+
* @return LoggerInterface
148+
*/
149+
private function getLogger()
150+
{
151+
if (!$this->logger) {
152+
$this->logger = $this->getObjectManager()->get(LoggerInterface::class);
153+
}
154+
return $this->logger;
155+
}
156+
135157
/**
136158
* Create entity generator
137159
*

lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class GeneratorTest extends TestCase
3030
*
3131
* @var array
3232
*/
33-
protected $expectedEntities = [
33+
private $expectedEntities = [
3434
'factory' => Factory::ENTITY_TYPE,
3535
'proxy' => Proxy::ENTITY_TYPE,
3636
'interceptor' => Interceptor::ENTITY_TYPE,
@@ -41,38 +41,46 @@ class GeneratorTest extends TestCase
4141
*
4242
* @var Generator
4343
*/
44-
protected $model;
44+
private $model;
4545

4646
/**
4747
* @var Io|Mock
4848
*/
49-
protected $ioObjectMock;
49+
private $ioObjectMock;
5050

5151
/**
5252
* @var DefinedClasses|Mock
5353
*/
54-
protected $definedClassesMock;
54+
private $definedClassesMock;
55+
56+
/**
57+
* @var LoggerInterface|Mock
58+
*/
59+
private $loggerMock;
5560

5661
protected function setUp()
5762
{
5863
$this->definedClassesMock = $this->createMock(DefinedClasses::class);
5964
$this->ioObjectMock = $this->getMockBuilder(Io::class)
6065
->disableOriginalConstructor()
6166
->getMock();
62-
$this->model = $this->buildModel(
67+
$this->loggerMock = $this->getMockForAbstractClass(LoggerInterface::class);
68+
69+
$this->model = new Generator(
6370
$this->ioObjectMock,
6471
[
6572
'factory' => Factory::class,
6673
'proxy' => Proxy::class,
67-
'interceptor' => Interceptor::class
74+
'interceptor' => Interceptor::class,
6875
],
69-
$this->definedClassesMock
76+
$this->definedClassesMock,
77+
$this->loggerMock
7078
);
7179
}
7280

7381
public function testGetGeneratedEntities()
7482
{
75-
$this->model = $this->buildModel(
83+
$this->model = new Generator(
7684
$this->ioObjectMock,
7785
['factory', 'proxy', 'interceptor'],
7886
$this->definedClassesMock
@@ -149,7 +157,6 @@ public function testGenerateClassWithErrors()
149157
$entityGeneratorMock = $this->getMockBuilder(EntityAbstract::class)
150158
->disableOriginalConstructor()
151159
->getMock();
152-
$loggerMock = $this->createMock(LoggerInterface::class);
153160

154161
$objectManagerMock->expects($this->once())
155162
->method('create')
@@ -164,13 +171,10 @@ public function testGenerateClassWithErrors()
164171
$entityGeneratorMock->expects($this->once())
165172
->method('generate')
166173
->willReturn(false);
167-
$objectManagerMock->expects($this->once())
168-
->method('get')
169-
->willReturn($loggerMock);
170174
$entityGeneratorMock->expects($this->once())
171175
->method('getErrors')
172176
->willReturn($errorMessages);
173-
$loggerMock->expects($this->once())
177+
$this->loggerMock->expects($this->once())
174178
->method('critical')
175179
->with($FinalErrorMessage);
176180
$this->model->setObjectManager($objectManagerMock);
@@ -220,17 +224,4 @@ public function generateValidClassDataProvider()
220224
}
221225
return $data;
222226
}
223-
224-
/**
225-
* Build SUT object
226-
*
227-
* @param Io $ioObject
228-
* @param array $generatedEntities
229-
* @param DefinedClasses $definedClasses
230-
* @return Generator
231-
*/
232-
private function buildModel(Io $ioObject, array $generatedEntities, DefinedClasses $definedClasses)
233-
{
234-
return new Generator($ioObject, $generatedEntities, $definedClasses);
235-
}
236227
}

0 commit comments

Comments
 (0)