From 72df1995bd052c8d81544ba86f5a2f7580ec72d3 Mon Sep 17 00:00:00 2001 From: Marc Egger <marc.egger@uzh.ch> Date: Tue, 6 Oct 2020 14:25:08 +0200 Subject: [PATCH] Fix Unittests: add index to backup file if it already exists --- extension/Classes/Core/Form/FormAsFile.php | 14 +++++++---- .../Classes/Core/Report/ReportAsFile.php | 13 +++++++--- extension/Tests/Readme.md | 24 +++++++++++++++++++ 3 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 extension/Tests/Readme.md diff --git a/extension/Classes/Core/Form/FormAsFile.php b/extension/Classes/Core/Form/FormAsFile.php index 958af1bf1..2e31b9726 100644 --- a/extension/Classes/Core/Form/FormAsFile.php +++ b/extension/Classes/Core/Form/FormAsFile.php @@ -584,7 +584,7 @@ class FormAsFile } return $jsonFileNames = array_reduce($files, function ($result, $file) { $fileInfo = pathinfo($file); - if ($fileInfo['extension'] === 'json') { + if (array_key_exists('extension', $fileInfo) && $fileInfo['extension'] === 'json') { $result[] = $fileInfo['filename']; } return $result; @@ -681,10 +681,16 @@ class FormAsFile } } - // throw exception if backup file exists $cwdToBackupFile = Path::join($cwdToBackup, $formName . '.' . date('YmdHis') . ".$tag.json"); - if (file_exists($cwdToBackupFile)) { - Thrower::userFormException('Error while trying to backup form file.', "Backup file already exists: $cwdToBackupFile"); + + // add index to filename if backup file with current timestamp already exists + $index = 1; + while (file_exists($cwdToBackupFile)) { + $cwdToBackupFile = Path::join($cwdToBackup, $formName . '.' . date('YmdHis') . ".$index.$tag.json"); + $index ++; + if ($index > 100) { + Thrower::userFormException('Error while trying to backup form file.', 'Infinite loop.'); + } } return $cwdToBackupFile; } diff --git a/extension/Classes/Core/Report/ReportAsFile.php b/extension/Classes/Core/Report/ReportAsFile.php index 4b9c44f17..d6d9ab993 100644 --- a/extension/Classes/Core/Report/ReportAsFile.php +++ b/extension/Classes/Core/Report/ReportAsFile.php @@ -215,11 +215,18 @@ class ReportAsFile } } - // throw exception if backup file exists $cwdToBackupFile = Path::join($cwdToBackup, basename($cwdToReportFile, REPORT_FILE_EXTENSION) . '.' . date('YmdHis') . ".json"); - if (file_exists($cwdToBackupFile)) { - Thrower::userFormException('Error while trying to backup report file.', "Backup file already exists: $cwdToBackupFile"); + + // add index to filename if backup file with current timestamp already exists + $index = 1; + while (file_exists($cwdToBackupFile)) { + $cwdToBackupFile = Path::join($cwdToBackup, basename($cwdToReportFile, REPORT_FILE_EXTENSION) . '.' . date('YmdHis') . ".$index.json"); + $index ++; + if ($index > 100) { + Thrower::userFormException('Error while trying to backup report file.', 'Infinite loop.'); + } } + return $cwdToBackupFile; } diff --git a/extension/Tests/Readme.md b/extension/Tests/Readme.md new file mode 100644 index 000000000..3b973c2e0 --- /dev/null +++ b/extension/Tests/Readme.md @@ -0,0 +1,24 @@ + +# QFQ Tests + +## PhpUnit + +### Run unit tests from CLI: + +Make sure dev dependencies are installed: +```shell script +# in extension directory +composer update --dev +``` + +Run all tests: +```shell script +# in extension directory +vendor/bin/phpunit --configuration phpunit.xml +``` + +Run single test: +```shell script +# in extension directory +vendor/bin/phpunit --configuration phpunit.xml --filter <test_name> +``` -- GitLab