Skip to content

Commit f3b17ed

Browse files
committed
Fix issue when Proxy class wasn't generate during di compile
Add test coverage
1 parent 2ddc6d7 commit f3b17ed

File tree

4 files changed

+79
-17
lines changed

4 files changed

+79
-17
lines changed

setup/src/Magento/Setup/Module/Di/Code/Scanner/XmlScanner.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,13 @@ protected function _filterEntities(array $output)
109109
$entitySuffix = '\\' . ucfirst(ProxyGenerator::ENTITY_TYPE);
110110
$filteredEntities = [];
111111
foreach ($output as $className) {
112-
$entityName = substr($className, -strlen($entitySuffix)) === $entitySuffix
112+
$entityName = str_ends_with($className, $entitySuffix)
113113
? substr($className, 0, -strlen($entitySuffix))
114114
: $className;
115115
$isClassExists = false;
116116
try {
117117
$isClassExists = class_exists($className);
118-
} catch (\RuntimeException $e) {
118+
} catch (\RuntimeException $e) { //@codingStandardsIgnoreLine
119119
}
120120
if (false === $isClassExists) {
121121
if (class_exists($entityName) || interface_exists($entityName)) {

setup/src/Magento/Setup/Test/Unit/Module/Di/Code/Scanner/XmlScannerTest.php

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,32 +17,33 @@ class XmlScannerTest extends TestCase
1717
/**
1818
* @var XmlScanner
1919
*/
20-
protected $_model;
20+
private XmlScanner $model;
2121

2222
/**
2323
* @var MockObject
2424
*/
25-
protected $_logMock;
25+
private Log $logMock;
2626

2727
/**
2828
* @var array
2929
*/
30-
protected $_testFiles = [];
30+
private array $testFiles = [];
3131

3232
/**
3333
* @inheritdoc
3434
*/
3535
protected function setUp(): void
3636
{
37-
$this->_model = new XmlScanner(
38-
$this->_logMock = $this->createMock(Log::class)
39-
);
37+
$this->logMock = $this->createMock(Log::class);
38+
$this->model = new XmlScanner($this->logMock);
4039
$testDir = __DIR__ . '/../../' . '/_files';
41-
$this->_testFiles = [
40+
$this->testFiles = [
4241
$testDir . '/app/code/Magento/SomeModule/etc/adminhtml/system.xml',
4342
$testDir . '/app/code/Magento/SomeModule/etc/di.xml',
4443
$testDir . '/app/code/Magento/SomeModule/view/frontend/default.xml',
4544
];
45+
require_once __DIR__ . '/../../_files/app/code/Magento/SomeModule/Element.php';
46+
require_once __DIR__ . '/../../_files/app/code/Magento/SomeModule/NestedElement.php';
4647
}
4748

4849
/**
@@ -51,7 +52,7 @@ protected function setUp(): void
5152
public function testCollectEntities(): void
5253
{
5354
$className = 'Magento\Store\Model\Config\Invalidator\Proxy';
54-
$this->_logMock
55+
$this->logMock
5556
->method('add')
5657
->withConsecutive(
5758
[
@@ -61,17 +62,27 @@ public function testCollectEntities(): void
6162
],
6263
[
6364
4,
64-
'\Magento\SomeModule\Model\Element\Proxy',
65-
'Invalid proxy class for ' . substr('\Magento\SomeModule\Model\Element\Proxy', 0, -5)
65+
'Magento\SomeModule\Model\Element\Proxy',
66+
'Invalid proxy class for ' . substr('Magento\SomeModule\Model\Element\Proxy', 0, -5)
6667
],
6768
[
6869
4,
69-
'\Magento\SomeModule\Model\Nested\Element\Proxy',
70-
'Invalid proxy class for ' . substr('\Magento\SomeModule\Model\Nested\Element\Proxy', 0, -5)
71-
]
70+
'Magento\SomeModule\Model\Element2\Proxy',
71+
'Invalid proxy class for ' . substr('Magento\SomeModule\Model\Element2\Proxy', 0, -5)
72+
],
73+
[
74+
4,
75+
'Magento\SomeModule\Model\Nested\Element\Proxy',
76+
'Invalid proxy class for ' . substr('Magento\SomeModule\Model\Nested\Element\Proxy', 0, -5)
77+
],
78+
[
79+
4,
80+
'Magento\SomeModule\Model\Nested\Element2\Proxy',
81+
'Invalid proxy class for ' . substr('Magento\SomeModule\Model\Nested\Element2\Proxy', 0, -5)
82+
],
7283
);
73-
$actual = $this->_model->collectEntities($this->_testFiles);
74-
$expected = [];
84+
$actual = $this->model->collectEntities($this->testFiles);
85+
$expected = ['Magento\SomeModule\Element\Proxy', 'Magento\SomeModule\NestedElement\Proxy'];
7586
$this->assertEquals($expected, $actual);
7687
}
7788
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\SomeModule;
9+
10+
class NestedElement
11+
{
12+
}

setup/src/Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/di.xml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,48 @@
1313
</virtualType>
1414
<type name="Magento\SomeModule\Model\Test">
1515
<arguments>
16+
<!-- non-existing class proxy - inline -->
1617
<argument name="proxy" xsi:type="object">\Magento\SomeModule\Model\Element\Proxy</argument>
18+
<argument name="proxy2" xsi:type="object">Magento\SomeModule\Model\Element\Proxy</argument>
19+
<!-- non-existing class proxy - multi-line -->
20+
<argument name="proxy3" xsi:type="object">
21+
\Magento\SomeModule\Model\Element2\Proxy
22+
</argument>
23+
<argument name="proxy4" xsi:type="object">
24+
Magento\SomeModule\Model\Element2\Proxy
25+
</argument>
26+
<!-- existing class proxy - multi-line -->
27+
<argument name="proxy5" xsi:type="object">
28+
\Magento\SomeModule\Element\Proxy
29+
</argument>
30+
<argument name="proxy6" xsi:type="object">
31+
Magento\SomeModule\Element\Proxy
32+
</argument>
33+
<!-- existing class proxy - inline -->
34+
<argument name="proxy7" xsi:type="object">\Magento\SomeModule\Element\Proxy</argument>
35+
<argument name="proxy8" xsi:type="object">Magento\SomeModule\Element\Proxy</argument>
36+
1737
<argument name="array" xsi:type="array">
38+
<!-- non-existing class proxy - inline -->
1839
<item name="proxy" xsi:type="object">\Magento\SomeModule\Model\Nested\Element\Proxy</item>
40+
<item name="proxy2" xsi:type="object">Magento\SomeModule\Model\Nested\Element\Proxy</item>
41+
<!-- non-existing class proxy - multi-line -->
42+
<item name="proxy3" xsi:type="object">
43+
\Magento\SomeModule\Model\Nested\Element2\Proxy
44+
</item>
45+
<item name="proxy4" xsi:type="object">
46+
\Magento\SomeModule\Model\Nested\Element2\Proxy
47+
</item>
48+
<!-- existing class proxy - multi-line -->
49+
<item name="proxy5" xsi:type="object">
50+
\Magento\SomeModule\NestedElement\Proxy
51+
</item>
52+
<item name="proxy6" xsi:type="object">
53+
Magento\SomeModule\NestedElement\Proxy
54+
</item>
55+
<!-- existing class proxy - inline -->
56+
<item name="proxy7" xsi:type="object">\Magento\SomeModule\NestedElement\Proxy</item>
57+
<item name="proxy8" xsi:type="object">Magento\SomeModule\NestedElement\Proxy</item>
1958
</argument>
2059
</arguments>
2160
</type>

0 commit comments

Comments
 (0)