From d62cef01a526dec16ab38d0cfb3b9c60ab6dae47 Mon Sep 17 00:00:00 2001 From: Ivan Moroz Date: Fri, 29 May 2026 14:32:26 +0300 Subject: [PATCH] CONV-052: Add JPG to PNG converter capability --- .../Converters/Image/JpgToPngConverter.php | 67 +++++++++++++++++++ .../Image/JpgToPngConverterTest.php | 27 ++++++++ 2 files changed, 94 insertions(+) create mode 100644 app/Support/Converters/Image/JpgToPngConverter.php create mode 100644 tests/Unit/Converters/Image/JpgToPngConverterTest.php diff --git a/app/Support/Converters/Image/JpgToPngConverter.php b/app/Support/Converters/Image/JpgToPngConverter.php new file mode 100644 index 0000000..a597748 --- /dev/null +++ b/app/Support/Converters/Image/JpgToPngConverter.php @@ -0,0 +1,67 @@ + 'resize', + 'type' => 'select', + 'label' => 'Resize', + 'default' => 'original', + 'options' => [ + ['value' => 'original', 'label' => 'Original'], + ['value' => '1920', 'label' => '1920 px'], + ['value' => '1280', 'label' => '1280 px'], + ['value' => 'custom', 'label' => 'Custom'], + ], + ], + [ + 'key' => 'remove_metadata', + 'type' => 'toggle', + 'label' => 'Remove metadata', + 'default' => true, + ], + ]; + } + + public function validateOptions(array $options): array + { + return $this->optionsValidator->validate($this->optionsSchema(), $options); + } +} diff --git a/tests/Unit/Converters/Image/JpgToPngConverterTest.php b/tests/Unit/Converters/Image/JpgToPngConverterTest.php new file mode 100644 index 0000000..4a0ec9c --- /dev/null +++ b/tests/Unit/Converters/Image/JpgToPngConverterTest.php @@ -0,0 +1,27 @@ +key())->toBe('jpg:png'); + expect($converter->sourceFormat())->toBe('jpg'); + expect($converter->targetFormat())->toBe('png'); + expect($converter->label())->toBe('PNG'); + expect($converter->description())->not->toBeEmpty(); +}); + +it('provides valid default options for jpg to png', function () { + $converter = app(JpgToPngConverter::class); + + $options = app(OptionsValidator::class)->validate( + $converter->optionsSchema(), + [] + ); + + expect($options)->toHaveKey('resize'); + expect($options)->toHaveKey('remove_metadata'); + expect($options)->not->toHaveKey('transparency'); +});