diff --git a/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php b/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php index c6017a0b24..ca0464d9d5 100644 --- a/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php +++ b/lib/private/IntegrityCheck/Iterator/ExcludeFileByNameFilterIterator.php @@ -52,24 +52,27 @@ class ExcludeFileByNameFilterIterator extends \RecursiveFilterIterator { * * @var array */ - private $excludedFileNamePatterns = [ - '/\.webapp-nextcloud-(\d+\.){3}(-r\d+)?/', // Gentoo/Funtoo & derivatives use a tool known as webapp-config to manage wep-apps. + private $excludedFilenamePatterns = [ + '/^\.webapp-nextcloud-.*/', // Gentoo/Funtoo & derivatives use a tool known as webapp-config to manage wep-apps. ]; /** * @return bool */ public function accept() { - if($this->isDir()) { + /** @var \SplFileInfo $current */ + $current = $this->current(); + + if ($current->isDir()) { return true; } - $currentFileName = $this->current()->getFilename(); + $currentFileName = $current->getFilename(); if (in_array($currentFileName, $this->excludedFilenames, true)){ return false; } - foreach ($this->excludedFileNamePatterns as $pattern){ + foreach ($this->excludedFilenamePatterns as $pattern){ if (preg_match($pattern, $currentFileName) > 0){ return false; } diff --git a/tests/lib/IntegrityCheck/Iterator/ExcludeFileByNameFilterIteratorTest.php b/tests/lib/IntegrityCheck/Iterator/ExcludeFileByNameFilterIteratorTest.php index 109a37823d..335f6e3fd3 100644 --- a/tests/lib/IntegrityCheck/Iterator/ExcludeFileByNameFilterIteratorTest.php +++ b/tests/lib/IntegrityCheck/Iterator/ExcludeFileByNameFilterIteratorTest.php @@ -25,25 +25,25 @@ use \OC\IntegrityCheck\Iterator\ExcludeFileByNameFilterIterator; use Test\TestCase; class ExcludeFileByNameFilterIteratorTest extends TestCase { - /** @var ExcludeFileByNameFilterIterator */ + /** @var ExcludeFileByNameFilterIterator|\PHPUnit\Framework\MockObject\MockObject */ protected $filter; public function setUp() { parent::setUp(); $this->filter = $this->getMockBuilder(ExcludeFileByNameFilterIterator::class) ->disableOriginalConstructor() - ->getMock() - ; + ->setMethods(['current']) + ->getMock(); } - public function fileNameProvider(){ + public function fileNameProvider(): array { return [ ['a file', true], ['Thumbs.db', false], ['another file', true], ['.directory', false], - ['.webapp-netxcloud-12.0.5', false], + ['.webapp-nextcloud-12.0.5', false], ['wx.webapp-nextcloud-obee', true], ]; } @@ -53,17 +53,18 @@ class ExcludeFileByNameFilterIteratorTest extends TestCase { * @param string $fileName * @param bool $expectedResult */ - public function testAcceptForFiles($fileName, $expectedResult){ - $iteratorMock = $this->createMock(\DirectoryIterator::class); - $iteratorMock->method('getFilename') - ->will($this->returnValue($fileName)) - ; + public function testAcceptForFiles($fileName, $expectedResult): void { + $iteratorMock = $this->getMockBuilder(\RecursiveDirectoryIterator::class) + ->disableOriginalConstructor() + ->setMethods(['getFilename', 'isDir']) + ->getMock(); - $this->filter->method('isDir') - ->will($this->returnValue(false)); + $iteratorMock->method('getFilename') + ->willReturn($fileName); + $iteratorMock->method('isDir') + ->willReturn(false); $this->filter->method('current') - ->will($this->returnValue($iteratorMock)) - ; + ->willReturn($iteratorMock); $actualResult = $this->filter->accept(); $this->assertEquals($expectedResult, $actualResult); @@ -72,21 +73,22 @@ class ExcludeFileByNameFilterIteratorTest extends TestCase { /** * @dataProvider fileNameProvider * @param string $fileName - * @param bool $fakeExpectedResult + * @param bool $expectedResult */ - public function testAcceptForDirs($fileName, $fakeExpectedResult){ - $iteratorMock = $this->createMock(\DirectoryIterator::class); - $iteratorMock->method('getFilename') - ->will($this->returnValue($fileName)) - ; + public function testAcceptForDirs($fileName, $expectedResult): void { + $iteratorMock = $this->getMockBuilder(\RecursiveDirectoryIterator::class) + ->disableOriginalConstructor() + ->setMethods(['getFilename', 'isDir']) + ->getMock(); - $this->filter->method('isDir') - ->will($this->returnValue(true)); + $iteratorMock->method('getFilename') + ->willReturn($fileName); + $iteratorMock->method('isDir') + ->willReturn(true); $this->filter->method('current') - ->will($this->returnValue($iteratorMock)) - ; + ->willReturn($iteratorMock); $actualResult = $this->filter->accept(); - $this->assertFalse($actualResult); + $this->assertTrue($actualResult); } }