Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
InterceptionsTest.php
Go to the documentation of this file.
1 <?php
7 
9 
15 class InterceptionsTest extends \PHPUnit\Framework\TestCase
16 {
20  private $classesScanner;
21 
25  private $classReaderMock;
26 
30  private $model;
31 
35  private $validatorMock;
36 
40  private $logMock;
41 
45  protected function setUp()
46  {
47  $this->logMock = $this->getMockBuilder(\Magento\Setup\Module\Di\Compiler\Log\Log::class)
48  ->disableOriginalConstructor()
49  ->setMethods(['add', 'report'])
50  ->getMock();
51 
52  $this->classesScanner = $this->getMockBuilder(\Magento\Setup\Module\Di\Code\Reader\ClassesScanner::class)
53  ->disableOriginalConstructor()
54  ->setMethods(['getList'])
55  ->getMock();
56 
57  $this->classReaderMock = $this->getMockBuilder(\Magento\Framework\Code\Reader\ClassReader::class)
58  ->disableOriginalConstructor()
59  ->setMethods(['getParents'])
60  ->getMock();
61 
62  $this->validatorMock = $this->getMockBuilder(\Magento\Framework\Code\Validator::class)
63  ->disableOriginalConstructor()
64  ->setMethods(['validate', 'add'])
65  ->getMock();
66 
67  $this->model = new \Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions(
68  $this->classesScanner,
69  $this->classReaderMock,
70  $this->validatorMock,
71  new \Magento\Framework\Code\Validator\ConstructorIntegrity(),
72  $this->logMock
73  );
74  }
75 
76  public function testGetList()
77  {
78  $path = '/tmp/test';
79 
80  $classes = ['NameSpace1\ClassName1', 'NameSpace1\ClassName2'];
81 
82  $this->classesScanner->expects($this->once())
83  ->method('getList')
84  ->with($path)
85  ->willReturn($classes);
86 
87  $this->logMock->expects($this->never())
88  ->method('add');
89 
90  $this->logMock->expects($this->once())->method('report');
91 
92  $this->validatorMock->expects($this->exactly(count($classes)))
93  ->method('validate');
94 
95  $result = $this->model->getList($path);
96 
97  $this->assertEquals($result, $classes);
98  }
99 
100  public function testGetListNoValidation()
101  {
102  $path = '/generated/code';
103 
104  $classes = ['NameSpace1\ClassName1', 'NameSpace1\ClassName2'];
105 
106  $this->classesScanner->expects($this->once())
107  ->method('getList')
108  ->with($path)
109  ->willReturn($classes);
110 
111  $this->logMock->expects($this->never())
112  ->method('add');
113 
114  $this->validatorMock->expects($this->never())
115  ->method('validate');
116 
117  $this->logMock->expects($this->once())->method('report');
118 
119  $result = $this->model->getList($path);
120 
121  $this->assertEquals($result, $classes);
122  }
123 
129  public function testGetListException(\Exception $exception)
130  {
131  $path = '/tmp/test';
132 
133  $classes = ['NameSpace1\ClassName1'];
134 
135  $this->classesScanner->expects($this->once())
136  ->method('getList')
137  ->with($path)
138  ->willReturn($classes);
139 
140  $this->logMock->expects($this->once())
141  ->method('add')
142  ->with(Log::COMPILATION_ERROR, $classes[0], $exception->getMessage());
143 
144  $this->validatorMock->expects($this->exactly(count($classes)))
145  ->method('validate')
146  ->will(
147  $this->throwException($exception)
148  );
149 
150  $this->logMock->expects($this->once())->method('report');
151 
152  $result = $this->model->getList($path);
153 
154  $this->assertEquals($result, []);
155  }
156 
163  {
164  return [
165  [new \Magento\Framework\Exception\ValidatorException(new \Magento\Framework\Phrase('Not Valid!'))],
166  [new \ReflectionException('Not Valid!')]
167  ];
168  }
169 }