mirror of
https://github.com/solidtime-io/solidtime.git
synced 2026-08-17 12:42:15 +01:00
Error handling in importer for invalid ZIP
This commit is contained in:
@@ -6,6 +6,7 @@ namespace App\Service\Import\Importers;
|
|||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use Spatie\TemporaryDirectory\TemporaryDirectory;
|
use Spatie\TemporaryDirectory\TemporaryDirectory;
|
||||||
|
use ValueError;
|
||||||
use ZipArchive;
|
use ZipArchive;
|
||||||
|
|
||||||
class TogglDataImporter extends DefaultImporter
|
class TogglDataImporter extends DefaultImporter
|
||||||
@@ -20,7 +21,10 @@ class TogglDataImporter extends DefaultImporter
|
|||||||
$zip = new ZipArchive();
|
$zip = new ZipArchive();
|
||||||
$temporaryDirectory = TemporaryDirectory::make();
|
$temporaryDirectory = TemporaryDirectory::make();
|
||||||
file_put_contents($temporaryDirectory->path('import.zip'), $data);
|
file_put_contents($temporaryDirectory->path('import.zip'), $data);
|
||||||
$zip->open($temporaryDirectory->path('import.zip'), ZipArchive::RDONLY);
|
$res = $zip->open($temporaryDirectory->path('import.zip'), ZipArchive::RDONLY);
|
||||||
|
if ($res !== true) {
|
||||||
|
throw new ImportException('Invalid ZIP, error code: '.$res);
|
||||||
|
}
|
||||||
$temporaryDirectory = TemporaryDirectory::make();
|
$temporaryDirectory = TemporaryDirectory::make();
|
||||||
$zip->extractTo($temporaryDirectory->path());
|
$zip->extractTo($temporaryDirectory->path());
|
||||||
$zip->close();
|
$zip->close();
|
||||||
@@ -107,6 +111,8 @@ class TogglDataImporter extends DefaultImporter
|
|||||||
], [], (string) $task->id);
|
], [], (string) $task->id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (ValueError $exception) {
|
||||||
|
|
||||||
} catch (ImportException $exception) {
|
} catch (ImportException $exception) {
|
||||||
throw $exception;
|
throw $exception;
|
||||||
} catch (Exception $exception) {
|
} catch (Exception $exception) {
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ declare(strict_types=1);
|
|||||||
namespace Tests\Unit\Service\Import\Importer;
|
namespace Tests\Unit\Service\Import\Importer;
|
||||||
|
|
||||||
use App\Models\Organization;
|
use App\Models\Organization;
|
||||||
|
use App\Service\Import\Importers\ImportException;
|
||||||
use App\Service\Import\Importers\TogglDataImporter;
|
use App\Service\Import\Importers\TogglDataImporter;
|
||||||
|
use Exception;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Spatie\TemporaryDirectory\TemporaryDirectory;
|
use Spatie\TemporaryDirectory\TemporaryDirectory;
|
||||||
@@ -27,6 +29,25 @@ class TogglDataImporterTest extends ImporterTestAbstract
|
|||||||
return $zipPath;
|
return $zipPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_import_throws_exception_if_data_is_not_zip(): void
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
$organization = Organization::factory()->create();
|
||||||
|
$importer = new TogglDataImporter();
|
||||||
|
$importer->init($organization);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
try {
|
||||||
|
$importer->importData('not a zip');
|
||||||
|
} catch (Exception $e) {
|
||||||
|
$this->assertInstanceOf(ImportException::class, $e);
|
||||||
|
$this->assertSame('Invalid ZIP, error code: 19', $e->getMessage());
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$this->fail();
|
||||||
|
}
|
||||||
|
|
||||||
public function test_import_of_test_file_succeeds(): void
|
public function test_import_of_test_file_succeeds(): void
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
@@ -48,7 +69,6 @@ class TogglDataImporterTest extends ImporterTestAbstract
|
|||||||
$this->assertSame(1, $report->usersCreated);
|
$this->assertSame(1, $report->usersCreated);
|
||||||
$this->assertSame(2, $report->projectsCreated);
|
$this->assertSame(2, $report->projectsCreated);
|
||||||
$this->assertSame(1, $report->clientsCreated);
|
$this->assertSame(1, $report->clientsCreated);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function test_import_of_test_file_twice_succeeds(): void
|
public function test_import_of_test_file_twice_succeeds(): void
|
||||||
|
|||||||
Reference in New Issue
Block a user