Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
FilePermissionsTest.php
Go to the documentation of this file.
1 <?php
7 
8 use \Magento\Framework\Setup\FilePermissions;
11 
12 class FilePermissionsTest extends \PHPUnit\Framework\TestCase
13 {
17  private $directoryWriteMock;
18 
22  private $filesystemMock;
23 
27  private $directoryListMock;
28 
32  private $stateMock;
33 
37  private $filePermissions;
38 
39  public function setUp()
40  {
41  $this->directoryWriteMock = $this->createMock(\Magento\Framework\Filesystem\Directory\Write::class);
42  $this->filesystemMock = $this->createMock(\Magento\Framework\Filesystem::class);
43  $this->stateMock = $this->createMock(State::class);
44 
45  $this->filesystemMock
46  ->expects($this->any())
47  ->method('getDirectoryWrite')
48  ->will($this->returnValue($this->directoryWriteMock));
49  $this->directoryListMock = $this->createMock(\Magento\Framework\App\Filesystem\DirectoryList::class);
50 
51  $this->filePermissions = new FilePermissions(
52  $this->filesystemMock,
53  $this->directoryListMock,
54  $this->stateMock
55  );
56  }
57 
62  public function testGetInstallationWritableDirectories($mageMode)
63  {
65  $this->stateMock->expects($this->once())
66  ->method('getMode')
67  ->willReturn($mageMode);
68 
69  $expected = [
70  BP . '/app/etc',
71  BP . '/var',
72  BP . '/pub/media',
73  BP . '/pub/static',
74  BP . '/generated'
75  ];
76 
77  $this->assertEquals($expected, $this->filePermissions->getInstallationWritableDirectories());
78  }
79 
81  {
83  $this->stateMock->expects($this->once())
84  ->method('getMode')
85  ->willReturn(State::MODE_PRODUCTION);
86 
87  $expected = [
88  BP . '/app/etc',
89  BP . '/var',
90  BP . '/pub/media',
91  BP . '/pub/static'
92  ];
93 
94  $this->assertEquals($expected, $this->filePermissions->getInstallationWritableDirectories());
95  }
96 
98  {
99  $this->directoryListMock
100  ->expects($this->once())
101  ->method('getPath')
102  ->with(DirectoryList::CONFIG)
103  ->will($this->returnValue(BP . '/app/etc'));
104 
105  $expected = [BP . '/app/etc'];
106  $this->assertEquals($expected, $this->filePermissions->getApplicationNonWritableDirectories());
107  }
108 
110  {
113 
114  $expected = [
115  BP . '/app/etc',
116  ];
117  $this->filePermissions->getInstallationWritableDirectories();
118  $this->assertEquals($expected, $this->filePermissions->getInstallationCurrentWritableDirectories());
119  }
120 
126  public function testGetApplicationCurrentNonWritableDirectories(array $mockMethods, array $expected)
127  {
128  $this->directoryListMock
129  ->expects($this->at(0))
130  ->method('getPath')
131  ->with(DirectoryList::CONFIG)
132  ->will($this->returnValue(BP . '/app/etc'));
133 
134  $index = 0;
135  foreach ($mockMethods as $mockMethod => $returnValue) {
136  $this->directoryWriteMock
137  ->expects($this->at($index))
138  ->method($mockMethod)
139  ->will($this->returnValue($returnValue));
140  $index += 1;
141  }
142 
143  $this->filePermissions->getApplicationNonWritableDirectories();
144  $this->assertEquals($expected, $this->filePermissions->getApplicationCurrentNonWritableDirectories());
145  }
146 
151  {
152  return [
153  [
154  [
155  'isExist' => true,
156  'isDirectory' => true,
157  'isReadable' => true,
158  'isWritable' => false
159  ],
160  [BP . '/app/etc'],
161  ],
162  [['isExist' => false], []],
163  [['isExist' => true, 'isDirectory' => false], []],
164  [['isExist' => true, 'isDirectory' => true, 'isReadable' => true, 'isWritable' => true], []],
165  ];
166  }
167 
175  {
178  $this->stateMock->expects($this->once())
179  ->method('getMode')
180  ->willReturn($mageMode);
181 
182  $expected = [
183  BP . '/var',
184  BP . '/pub/media',
185  BP . '/pub/static',
186  BP . '/generated'
187  ];
188 
189  $this->assertEquals(
190  $expected,
191  array_values($this->filePermissions->getMissingWritableDirectoriesForInstallation())
192  );
193 
194  $this->assertEquals(
195  $expected,
196  array_values($this->filePermissions->getMissingWritablePathsForInstallation())
197  );
198  }
199 
201  {
204  $this->stateMock->expects($this->once())
205  ->method('getMode')
206  ->willReturn(State::MODE_PRODUCTION);
207 
208  $expected = [
209  BP . '/var',
210  BP . '/pub/media',
211  BP . '/pub/static'
212  ];
213 
214  $this->assertEquals(
215  $expected,
216  array_values($this->filePermissions->getMissingWritableDirectoriesForInstallation())
217  );
218 
219  $this->assertEquals(
220  $expected,
221  array_values($this->filePermissions->getMissingWritablePathsForInstallation())
222  );
223  }
224 
226  {
227  $directoryMethods = ['isExist', 'isDirectory', 'isReadable', 'isWritable'];
228  foreach ($directoryMethods as $method) {
229  $this->directoryWriteMock->expects($this->exactly(2))
230  ->method($method)
231  ->willReturn(true);
232  }
233 
234  $this->assertEmpty($this->filePermissions->getMissingWritableDirectoriesForDbUpgrade());
235  }
236 
242  public function testGetUnnecessaryWritableDirectoriesForApplication(array $mockMethods, array $expected)
243  {
244  $this->directoryListMock
245  ->expects($this->at(0))
246  ->method('getPath')
247  ->with(DirectoryList::CONFIG)
248  ->will($this->returnValue(BP . '/app/etc'));
249 
250  $index = 0;
251  foreach ($mockMethods as $mockMethod => $returnValue) {
252  $this->directoryWriteMock
253  ->expects($this->at($index))
254  ->method($mockMethod)
255  ->will($this->returnValue($returnValue));
256  $index += 1;
257  }
258 
259  $this->assertEquals(
260  $expected,
261  array_values($this->filePermissions->getUnnecessaryWritableDirectoriesForApplication())
262  );
263  }
264 
269  {
270  return [
271  [['isExist' => true, 'isDirectory' => true, 'isReadable' => true, 'isWritable' => false], []],
272  [['isExist' => false], [BP . '/app/etc']],
273  ];
274  }
275 
277  {
279  $this->directoryListMock
280  ->expects($this->at(4))
281  ->method('getPath')
283  ->will($this->returnValue(BP . '/generated'));
284  }
285 
287  {
288  $this->directoryListMock
289  ->expects($this->at(0))
290  ->method('getPath')
291  ->with(DirectoryList::CONFIG)
292  ->will($this->returnValue(BP . '/app/etc'));
293  $this->directoryListMock
294  ->expects($this->at(1))
295  ->method('getPath')
296  ->with(DirectoryList::VAR_DIR)
297  ->will($this->returnValue(BP . '/var'));
298  $this->directoryListMock
299  ->expects($this->at(2))
300  ->method('getPath')
301  ->with(DirectoryList::MEDIA)
302  ->will($this->returnValue(BP . '/pub/media'));
303  $this->directoryListMock
304  ->expects($this->at(3))
305  ->method('getPath')
307  ->will($this->returnValue(BP . '/pub/static'));
308  }
309 
311  {
312  // CONFIG
313  $this->directoryWriteMock
314  ->expects($this->at(0))
315  ->method('isExist')
316  ->will($this->returnValue(true));
317  $this->directoryWriteMock
318  ->expects($this->at(1))
319  ->method('isDirectory')
320  ->will($this->returnValue(true));
321  $this->directoryWriteMock
322  ->expects($this->at(2))
323  ->method('isReadable')
324  ->will($this->returnValue(true));
325  $this->directoryWriteMock
326  ->expects($this->at(3))
327  ->method('isWritable')
328  ->will($this->returnValue(true));
329 
330  // VAR
331  $this->directoryWriteMock
332  ->expects($this->at(4))
333  ->method('isExist')
334  ->will($this->returnValue(false));
335 
336  // MEDIA
337  $this->directoryWriteMock
338  ->expects($this->at(5))
339  ->method('isExist')
340  ->will($this->returnValue(true));
341  $this->directoryWriteMock
342  ->expects($this->at(6))
343  ->method('isDirectory')
344  ->will($this->returnValue(false));
345 
346  // STATIC_VIEW
347  $this->directoryWriteMock
348  ->expects($this->at(7))
349  ->method('isExist')
350  ->will($this->returnValue(true));
351  $this->directoryWriteMock
352  ->expects($this->at(8))
353  ->method('isDirectory')
354  ->will($this->returnValue(true));
355  $this->directoryWriteMock
356  ->expects($this->at(9))
357  ->method('isReadable')
358  ->will($this->returnValue(true));
359  $this->directoryWriteMock
360  ->expects($this->at(10))
361  ->method('isWritable')
362  ->will($this->returnValue(false));
363  }
364 
368  public function modeDataProvider()
369  {
370  return [
373  ];
374  }
375 }
return false
Definition: gallery.phtml:36
testGetUnnecessaryWritableDirectoriesForApplication(array $mockMethods, array $expected)
$method
Definition: info.phtml:13
testGetApplicationCurrentNonWritableDirectories(array $mockMethods, array $expected)
const BP
Definition: autoload.php:14
$index
Definition: list.phtml:44