From 801aeb822064e2ef9fc63a7848b6db33fc1a1cfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20REYNAUD?= Date: Fri, 8 May 2026 23:53:30 +0200 Subject: [PATCH] feat: add `version` property to `Options` class --- src/Options.php | 4 ++++ tests/OptionsTest.php | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/Options.php b/src/Options.php index 0ce5d14..023b88b 100644 --- a/src/Options.php +++ b/src/Options.php @@ -24,6 +24,7 @@ final class Options private const DEFAULT_WATERMARK_SCALE = 75; private const DEFAULT_WATERMARK_OPACITY = 50; private const DEFAULT_SIGNATURE = null; + private const DEFAULT_VERSION = null; public function __construct( public readonly ?int $width = self::DEFAULT_WIDTH, @@ -33,6 +34,7 @@ public function __construct( public readonly int $watermarkScale = self::DEFAULT_WATERMARK_SCALE, public readonly int $watermarkOpacity = self::DEFAULT_WATERMARK_OPACITY, public readonly ?string $signature = self::DEFAULT_SIGNATURE, + public readonly ?string $version = self::DEFAULT_VERSION, ) { } @@ -47,6 +49,7 @@ public function toArray(bool $withSignature = true): array $options = [ 'w' => $this->width, 'h' => $this->height, + 'v' => $this->version, ]; if (true === $withSignature) { @@ -97,6 +100,7 @@ public static function fromArray(array $options): self (int) ($options['watermarkScale'] ?? $options['ws'] ?? $options['wat_scale'] ?? self::DEFAULT_WATERMARK_SCALE), (int) ($options['watermarkOpacity'] ?? $options['wo'] ?? $options['wat_opacity'] ?? self::DEFAULT_WATERMARK_OPACITY), $options[self::SIGNATURE_KEY] ?? self::DEFAULT_SIGNATURE, + $options['version'] ?? $options['v'] ?? self::DEFAULT_VERSION, ); } } diff --git a/tests/OptionsTest.php b/tests/OptionsTest.php index 2f4c6aa..1bd6eb6 100644 --- a/tests/OptionsTest.php +++ b/tests/OptionsTest.php @@ -161,4 +161,43 @@ public function testFromArrayNormalizesStringDimensionsToInt(): void self::assertSame(200, $options->width); self::assertSame(100, $options->height); } + + public function testToArrayIncludesVersionWhenSet(): void + { + $result = (new Options(version: '2'))->toArray(); + self::assertArrayHasKey('v', $result); + self::assertSame('2', $result['v']); + } + + public function testToArrayExcludesVersionWhenNull(): void + { + $result = (new Options())->toArray(); + self::assertArrayNotHasKey('v', $result); + } + + public function testBuildQueryWithVersion(): void + { + self::assertSame('w=200&v=2', (new Options(200, version: '2'))->buildQuery(false)); + } + + public function testFromArrayWithVersionShortAlias(): void + { + $options = Options::fromArray(['v' => '2']); + self::assertSame('2', $options->version); + } + + public function testFromArrayWithVersionLongAlias(): void + { + $options = Options::fromArray(['version' => '2']); + self::assertSame('2', $options->version); + } + + public function testSetSignaturePreservesVersion(): void + { + $original = new Options(200, version: 'abc'); + $new = $original->setSignature('xyz'); + + self::assertSame('abc', $new->version); + self::assertSame(200, $new->width); + } }