diff --git a/app/Support/Converters/Contracts/Converter.php b/app/Support/Converters/Contracts/Converter.php index 93e0529..d7094c2 100644 --- a/app/Support/Converters/Contracts/Converter.php +++ b/app/Support/Converters/Contracts/Converter.php @@ -17,4 +17,6 @@ public function description(): string; public function optionsSchema(): array; public function validateOptions(array $options): array; + + public function isRecommended(): bool; } diff --git a/app/Support/Converters/ConverterRegistry.php b/app/Support/Converters/ConverterRegistry.php index 453da71..7242ed7 100644 --- a/app/Support/Converters/ConverterRegistry.php +++ b/app/Support/Converters/ConverterRegistry.php @@ -53,7 +53,7 @@ public function targetsFor(string $source): array label: $converter->label(), description: $converter->description(), converterKey: $converter->key(), - recommended: false, + recommended: $converter->isRecommended(), ), $this->forSource($source), ); diff --git a/app/Support/Converters/Image/JpgToPdfConverter.php b/app/Support/Converters/Image/JpgToPdfConverter.php index 272b260..a75d14b 100644 --- a/app/Support/Converters/Image/JpgToPdfConverter.php +++ b/app/Support/Converters/Image/JpgToPdfConverter.php @@ -101,4 +101,9 @@ public function validateOptions(array $options): array { return $this->optionsValidator->validate($this->optionsSchema(), $options); } + + public function isRecommended(): bool + { + return false; + } } diff --git a/app/Support/Converters/Image/JpgToPngConverter.php b/app/Support/Converters/Image/JpgToPngConverter.php index a597748..d37b9a4 100644 --- a/app/Support/Converters/Image/JpgToPngConverter.php +++ b/app/Support/Converters/Image/JpgToPngConverter.php @@ -64,4 +64,9 @@ public function validateOptions(array $options): array { return $this->optionsValidator->validate($this->optionsSchema(), $options); } + + public function isRecommended(): bool + { + return false; + } } diff --git a/app/Support/Converters/Image/JpgToWebpConverter.php b/app/Support/Converters/Image/JpgToWebpConverter.php index 59dec70..500030f 100644 --- a/app/Support/Converters/Image/JpgToWebpConverter.php +++ b/app/Support/Converters/Image/JpgToWebpConverter.php @@ -75,4 +75,9 @@ public function validateOptions(array $options): array { return $this->optionsValidator->validate($this->optionsSchema(), $options); } + + public function isRecommended(): bool + { + return true; + } } diff --git a/app/Support/Converters/Image/PngToJpgConverter.php b/app/Support/Converters/Image/PngToJpgConverter.php index 580e3ad..d197ae5 100644 --- a/app/Support/Converters/Image/PngToJpgConverter.php +++ b/app/Support/Converters/Image/PngToJpgConverter.php @@ -81,4 +81,9 @@ public function validateOptions(array $options): array { return $this->optionsValidator->validate($this->optionsSchema(), $options); } + + public function isRecommended(): bool + { + return true; + } } diff --git a/app/Support/Converters/Image/PngToPdfConverter.php b/app/Support/Converters/Image/PngToPdfConverter.php index 4e50e43..a0bdd95 100644 --- a/app/Support/Converters/Image/PngToPdfConverter.php +++ b/app/Support/Converters/Image/PngToPdfConverter.php @@ -101,4 +101,9 @@ public function validateOptions(array $options): array { return $this->optionsValidator->validate($this->optionsSchema(), $options); } + + public function isRecommended(): bool + { + return false; + } } diff --git a/app/Support/Converters/Image/PngToWebpConverter.php b/app/Support/Converters/Image/PngToWebpConverter.php index 39a23e5..79c5a1c 100644 --- a/app/Support/Converters/Image/PngToWebpConverter.php +++ b/app/Support/Converters/Image/PngToWebpConverter.php @@ -81,4 +81,9 @@ public function validateOptions(array $options): array { return $this->optionsValidator->validate($this->optionsSchema(), $options); } + + public function isRecommended(): bool + { + return false; + } } diff --git a/tests/Fakes/Converters/FakeJpgToWebpConverter.php b/tests/Fakes/Converters/FakeJpgToWebpConverter.php index 0b3356c..469b86f 100644 --- a/tests/Fakes/Converters/FakeJpgToWebpConverter.php +++ b/tests/Fakes/Converters/FakeJpgToWebpConverter.php @@ -40,4 +40,9 @@ public function validateOptions(array $options): array { return $options; } + + public function isRecommended(): bool + { + return false; + } } diff --git a/tests/Fakes/Converters/FakePngToJpgConverter.php b/tests/Fakes/Converters/FakePngToJpgConverter.php index c667bba..21c53c8 100644 --- a/tests/Fakes/Converters/FakePngToJpgConverter.php +++ b/tests/Fakes/Converters/FakePngToJpgConverter.php @@ -40,4 +40,9 @@ public function validateOptions(array $options): array { return $options; } + + public function isRecommended(): bool + { + return false; + } } diff --git a/tests/Fakes/Converters/FakePngToPdfConverter.php b/tests/Fakes/Converters/FakePngToPdfConverter.php index 81bff9b..01a33cd 100644 --- a/tests/Fakes/Converters/FakePngToPdfConverter.php +++ b/tests/Fakes/Converters/FakePngToPdfConverter.php @@ -40,4 +40,9 @@ public function validateOptions(array $options): array { return $options; } + + public function isRecommended(): bool + { + return false; + } } diff --git a/tests/Unit/Converters/RecommendedTargetMetadataTest.php b/tests/Unit/Converters/RecommendedTargetMetadataTest.php new file mode 100644 index 0000000..02f5997 --- /dev/null +++ b/tests/Unit/Converters/RecommendedTargetMetadataTest.php @@ -0,0 +1,37 @@ +targetsFor('png')) + ->filter(fn ($target) => $target->recommended === true); + + expect($recommended)->toHaveCount(1); + expect($recommended->first()->format)->toBe('jpg'); +}); + +it('marks one jpg target as recommended', function () { + $recommended = collect(mvpRegistry()->targetsFor('jpg')) + ->filter(fn ($target) => $target->recommended === true); + + expect($recommended)->toHaveCount(1); + expect($recommended->first()->format)->toBe('webp'); +});