From 493375601c42d011e42aac2e5887dcf0cc641fa2 Mon Sep 17 00:00:00 2001 From: Constantin Graf Date: Mon, 22 Apr 2024 16:26:48 +0200 Subject: [PATCH 1/6] Added extension services --- .github/workflows/build-private.yml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-private.yml b/.github/workflows/build-private.yml index b4fc20e7..ca4a8dd0 100644 --- a/.github/workflows/build-private.yml +++ b/.github/workflows/build-private.yml @@ -5,7 +5,7 @@ on: - develop pull_request: paths: - - 'workflows/build-private.yml' + - '.github/workflows/build-private.yml' - 'docker/prod/**' workflow_dispatch: @@ -37,6 +37,21 @@ jobs: only_args: --no-dev --no-ansi --no-interaction --prefer-dist --ignore-platform-reqs --classmap-authoritative php_version: 8.3 + - name: "Checkout services extension" + uses: actions/checkout@v4 + with: + repository: solidtime-io/extension-services + path: extensions/Services + ssh-key: ${{ secrets.SSH_PRIVATE_KEY_SERVICES_EXTENSION }} + + - name: "Install dependencies in services extension" + uses: php-actions/composer@v6 + with: + working_dir: "extensions/Services" + command: install + only_args: --no-dev --no-ansi --no-interaction --prefer-dist --ignore-platform-reqs --classmap-authoritative + php_version: 8.3 + - name: "Setup PHP with PECL extension" uses: shivammathur/setup-php@v2 with: @@ -65,6 +80,9 @@ jobs: - name: "Activate billing extension" run: php artisan module:enable Billing + - name: "Activate services extension" + run: php artisan module:enable Services + - name: "Login to GitHub Container Registry" uses: docker/login-action@v3 with: From ab9fa93ba144b4d4e008e8c48fd1b396373a6769 Mon Sep 17 00:00:00 2001 From: Constantin Graf Date: Mon, 22 Apr 2024 16:32:11 +0200 Subject: [PATCH 2/6] Removed parallel testing because of filament tests --- .github/workflows/build-public.yml | 2 +- .github/workflows/phpunit.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-public.yml b/.github/workflows/build-public.yml index b618e8c8..2bdf2346 100644 --- a/.github/workflows/build-public.yml +++ b/.github/workflows/build-public.yml @@ -5,7 +5,7 @@ on: - develop pull_request: paths: - - 'workflows/build-public.yml' + - '.github/workflows/build-public.yml' - 'docker/prod/**' workflow_dispatch: diff --git a/.github/workflows/phpunit.yml b/.github/workflows/phpunit.yml index 4848e9af..730d8558 100644 --- a/.github/workflows/phpunit.yml +++ b/.github/workflows/phpunit.yml @@ -50,8 +50,8 @@ jobs: php artisan key:generate php artisan passport:keys - - name: "Run PHPUnit in parallel" - run: php artisan test --parallel --stop-on-failure --coverage-text --coverage-clover=coverage.xml + - name: "Run PHPUnit" + run: php artisan test --stop-on-failure --coverage-text --coverage-clover=coverage.xml - name: "Upload coverage reports to Codecov" uses: codecov/codecov-action@v4.3.0 From 26af7041c2d5a2c3a78c2bb20809007fe253c631 Mon Sep 17 00:00:00 2001 From: Constantin Graf Date: Mon, 22 Apr 2024 17:16:57 +0200 Subject: [PATCH 3/6] Fixed production logging stack --- config/logging.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/logging.php b/config/logging.php index 7599b746..2a28ad4e 100644 --- a/config/logging.php +++ b/config/logging.php @@ -69,7 +69,7 @@ return [ 'stack_production' => [ 'driver' => 'stack', - 'channels' => ['single', 'sentry'], + 'channels' => ['stderr', 'sentry'], ], 'daily' => [ From 2605d738159f0280f0648374a97ea7fb9deb828c Mon Sep 17 00:00:00 2001 From: Constantin Graf Date: Mon, 22 Apr 2024 17:17:22 +0200 Subject: [PATCH 4/6] Error handling in importer for invalid ZIP --- .../Import/Importers/TogglDataImporter.php | 8 ++++++- .../Import/Importer/TogglDataImporterTest.php | 22 ++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/app/Service/Import/Importers/TogglDataImporter.php b/app/Service/Import/Importers/TogglDataImporter.php index eacb14a0..07a4bb04 100644 --- a/app/Service/Import/Importers/TogglDataImporter.php +++ b/app/Service/Import/Importers/TogglDataImporter.php @@ -6,6 +6,7 @@ namespace App\Service\Import\Importers; use Exception; use Spatie\TemporaryDirectory\TemporaryDirectory; +use ValueError; use ZipArchive; class TogglDataImporter extends DefaultImporter @@ -20,7 +21,10 @@ class TogglDataImporter extends DefaultImporter $zip = new ZipArchive(); $temporaryDirectory = TemporaryDirectory::make(); 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(); $zip->extractTo($temporaryDirectory->path()); $zip->close(); @@ -107,6 +111,8 @@ class TogglDataImporter extends DefaultImporter ], [], (string) $task->id); } } + } catch (ValueError $exception) { + } catch (ImportException $exception) { throw $exception; } catch (Exception $exception) { diff --git a/tests/Unit/Service/Import/Importer/TogglDataImporterTest.php b/tests/Unit/Service/Import/Importer/TogglDataImporterTest.php index 2066dae4..06ebb5c5 100644 --- a/tests/Unit/Service/Import/Importer/TogglDataImporterTest.php +++ b/tests/Unit/Service/Import/Importer/TogglDataImporterTest.php @@ -5,7 +5,9 @@ declare(strict_types=1); namespace Tests\Unit\Service\Import\Importer; use App\Models\Organization; +use App\Service\Import\Importers\ImportException; use App\Service\Import\Importers\TogglDataImporter; +use Exception; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; use Spatie\TemporaryDirectory\TemporaryDirectory; @@ -27,6 +29,25 @@ class TogglDataImporterTest extends ImporterTestAbstract 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 { // Arrange @@ -48,7 +69,6 @@ class TogglDataImporterTest extends ImporterTestAbstract $this->assertSame(1, $report->usersCreated); $this->assertSame(2, $report->projectsCreated); $this->assertSame(1, $report->clientsCreated); - } public function test_import_of_test_file_twice_succeeds(): void From f6c51b712247c1ae90917ccdf3b789396d780c8f Mon Sep 17 00:00:00 2001 From: Gregor Vostrak Date: Tue, 23 Apr 2024 02:54:28 +0200 Subject: [PATCH 5/6] fix timezone issues and add support for timezone user setting --- resources/js/Components/Common/TimePicker.vue | 14 ++++---- .../Dashboard/ActivityGraphCard.vue | 6 ++-- resources/js/Pages/Time.vue | 7 ++-- resources/js/utils/time.ts | 32 +++++++++++++++++-- resources/js/utils/useUser.ts | 6 +++- 5 files changed, 48 insertions(+), 17 deletions(-) diff --git a/resources/js/Components/Common/TimePicker.vue b/resources/js/Components/Common/TimePicker.vue index 49091822..081e72f1 100644 --- a/resources/js/Components/Common/TimePicker.vue +++ b/resources/js/Components/Common/TimePicker.vue @@ -1,26 +1,26 @@