summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/Encryption/DecryptAll.php6
-rw-r--r--tests/lib/Encryption/DecryptAllTest.php41
2 files changed, 37 insertions, 10 deletions
diff --git a/lib/private/Encryption/DecryptAll.php b/lib/private/Encryption/DecryptAll.php
index 12bda54a52e..16eee347334 100644
--- a/lib/private/Encryption/DecryptAll.php
+++ b/lib/private/Encryption/DecryptAll.php
@@ -252,6 +252,12 @@ class DecryptAll {
*/
protected function decryptFile($path) {
+ // skip already decrypted files
+ $fileInfo = $this->rootView->getFileInfo($path);
+ if ($fileInfo !== false && !$fileInfo->isEncrypted()) {
+ return true;
+ }
+
$source = $path;
$target = $path . '.decrypted.' . $this->getTimestamp();
diff --git a/tests/lib/Encryption/DecryptAllTest.php b/tests/lib/Encryption/DecryptAllTest.php
index 59c24fb3c1d..4e4b2438a25 100644
--- a/tests/lib/Encryption/DecryptAllTest.php
+++ b/tests/lib/Encryption/DecryptAllTest.php
@@ -311,7 +311,10 @@ class DecryptAllTest extends TestCase {
}
- public function testDecryptFile() {
+ /**
+ * @dataProvider dataTrueFalse
+ */
+ public function testDecryptFile($isEncrypted) {
$path = 'test.txt';
@@ -327,15 +330,26 @@ class DecryptAllTest extends TestCase {
->setMethods(['getTimestamp'])
->getMock();
- $instance->expects($this->any())->method('getTimestamp')->willReturn(42);
-
- $this->view->expects($this->once())
- ->method('copy')
- ->with($path, $path . '.decrypted.42');
- $this->view->expects($this->once())
- ->method('rename')
- ->with($path . '.decrypted.42', $path);
-
+ $fileInfo = $this->createMock(FileInfo::class);
+ $fileInfo->expects($this->any())->method('isEncrypted')
+ ->willReturn($isEncrypted);
+ $this->view->expects($this->any())->method('getFileInfo')
+ ->willReturn($fileInfo);
+
+ if ($isEncrypted) {
+ $instance->expects($this->any())->method('getTimestamp')->willReturn(42);
+
+ $this->view->expects($this->once())
+ ->method('copy')
+ ->with($path, $path . '.decrypted.42');
+ $this->view->expects($this->once())
+ ->method('rename')
+ ->with($path . '.decrypted.42', $path);
+ } else {
+ $instance->expects($this->never())->method('getTimestamp');
+ $this->view->expects($this->never())->method('copy');
+ $this->view->expects($this->never())->method('rename');
+ }
$this->assertTrue(
$this->invokePrivate($instance, 'decryptFile', [$path])
);
@@ -356,6 +370,13 @@ class DecryptAllTest extends TestCase {
->setMethods(['getTimestamp'])
->getMock();
+
+ $fileInfo = $this->createMock(FileInfo::class);
+ $fileInfo->expects($this->any())->method('isEncrypted')
+ ->willReturn(true);
+ $this->view->expects($this->any())->method('getFileInfo')
+ ->willReturn($fileInfo);
+
$instance->expects($this->any())->method('getTimestamp')->willReturn(42);
$this->view->expects($this->once())