From 54f260da56af0213a43367d92991bf5df23d7aeb Mon Sep 17 00:00:00 2001 From: Jose Vicente Orts Romero Date: Thu, 4 Jun 2026 16:07:07 +0200 Subject: [PATCH] Update PHP requirements, add code style tooling, CI workflow, and clean tests --- .github/workflows/tests.yml | 52 +++++++++++++ .gitignore | 5 ++ .php-cs-fixer.php | 29 +++++++ CHANGELOG.md | 40 ++++++++++ README.md | 2 + composer.json | 19 +++-- phpunit.xml.dist | 38 +++------- src/Resized.php | 146 +++++++++--------------------------- tests/ResizedTest.php | 63 +++++++++------- 9 files changed, 225 insertions(+), 169 deletions(-) create mode 100644 .github/workflows/tests.yml create mode 100644 .php-cs-fixer.php create mode 100644 CHANGELOG.md diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000..bce2e56 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,52 @@ +name: Tests + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + cs: + runs-on: ubuntu-latest + name: Code Style + + steps: + - uses: actions/checkout@v4 + + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.4' + coverage: none + + - name: Install dependencies + run: composer install --no-interaction --prefer-dist + + - name: Check code style + run: ./vendor/bin/php-cs-fixer check --allow-risky=yes + + test: + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + php: ['8.2', '8.3', '8.4'] + + name: PHP ${{ matrix.php }} + + steps: + - uses: actions/checkout@v4 + + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + coverage: none + + - name: Install dependencies + run: composer install --no-interaction --prefer-dist + + - name: Run tests + run: ./vendor/bin/phpunit diff --git a/.gitignore b/.gitignore index f02a2f8..90842ba 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,8 @@ build composer.lock docs vendor +.php-cs-fixer.cache +.phpunit.result.cache +.claude +.idea +.php-cs-fixer.cache diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php new file mode 100644 index 0000000..9e00832 --- /dev/null +++ b/.php-cs-fixer.php @@ -0,0 +1,29 @@ +in([ + __DIR__ . '/src', + __DIR__ . '/tests', + ]); + +return (new PhpCsFixer\Config()) + ->setUnsupportedPhpVersionAllowed(true) + ->setRules([ + '@PSR12' => true, + 'array_syntax' => ['syntax' => 'short'], + 'ordered_imports' => ['sort_algorithm' => 'alpha'], + 'no_unused_imports' => true, + 'trailing_comma_in_multiline' => true, + 'phpdoc_scalar' => true, + 'unary_operator_spaces' => true, + 'binary_operator_spaces' => true, + 'blank_line_before_statement' => [ + 'statements' => ['break', 'continue', 'declare', 'return', 'throw', 'try'], + ], + 'phpdoc_single_line_var_spacing' => true, + 'phpdoc_var_without_name' => true, + 'single_trait_insert_per_statement' => true, + 'no_superfluous_phpdoc_tags' => true, + 'not_operator_with_successor_space' => true, + ]) + ->setFinder($finder); diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1ba40f2 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,40 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [2.0.0] - 2026-06-04 + +### Changed + +- Dropped support for PHP 7.x (EOL). +- Set minimum PHP requirement to 8.2. +- Updated PHPUnit dev dependency to support versions 11, 12, and 13. +- Updated phpunit.xml.dist to the PHPUnit 13.1 schema. + +## [1.3.0] + +- Added max slug length option. + +## [1.2.0] + +- Added support for image processing options (e.g. `quality`). + +## [1.1.1] + +- Bug fixes. + +## [1.1.0] + +- Added support for PHP 7.2. + +## [1.0.2] + +- Bug fixes. + +## [1.0.1] + +- Bug fixes. + +## [1.0] + +- Initial release. diff --git a/README.md b/README.md index 39bfc7f..b45f95b 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ This is the PHP client for resized.co, a realtime image resize manipulation service. +Requires PHP 8.2 or higher. + ## Install Via Composer diff --git a/composer.json b/composer.json index e3aa3b1..ec80b87 100644 --- a/composer.json +++ b/composer.json @@ -12,17 +12,20 @@ "authors": [ { "name": "Ciaran Maher", - "email": "hello@square1.io", + "email": "ciaran@square1.io", "homepage": "https://www.resized.co" + }, + { + "name": "Jose Vicente Orts", + "email": "vince@square1.io" } ], "require": { - "php" : "~7.2|~8.0" + "php": "^8.2" }, "require-dev": { - "phpunit/phpunit" : "~9.5.9", - "scrutinizer/ocular": "~1.1", - "squizlabs/php_codesniffer": "~2.3" + "phpunit/phpunit": "^11.0|^12.0|^13.0", + "friendsofphp/php-cs-fixer": "^3.0" }, "autoload": { "psr-4": { @@ -35,11 +38,13 @@ } }, "scripts": { - "test": "phpunit" + "test": "phpunit", + "format": "php-cs-fixer fix --allow-risky=yes", + "format:check": "php-cs-fixer check --allow-risky=yes" }, "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } } } diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 04bece4..d2d4733 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,29 +1,13 @@ - - - - tests - - - - - src/ - - - - - - - - - + + + + tests + + + + + src/ + + diff --git a/src/Resized.php b/src/Resized.php index b37d7f6..2e3089e 100644 --- a/src/Resized.php +++ b/src/Resized.php @@ -2,120 +2,68 @@ namespace Square1\Resized; +use InvalidArgumentException; +use JsonException; + class Resized { - /** - * @var string - */ - private $key; + protected string $key; - /** - * @var string - */ - private $secret; + protected string $secret; - /** - * @var string - */ - private $host = 'https://img.resized.co'; + private string $host = 'https://img.resized.co'; - /** - * @var string - */ - private $defaultImage = 'https://img.resized.co/no-image.png'; + private string $defaultImage = 'https://img.resized.co/no-image.png'; - /** - * @var array - */ - private $defaultOptions = []; - - - /** - * @var int - */ - private $maxSlugLength = 100; + private array $defaultOptions = []; + private int $maxSlugLength = 100; - /** - * Constructor - * - * @param string $key - * @param string $secret - * @param array $options - */ - public function __construct($key, $secret) + public function __construct(string $key, string $secret) { - if (strlen($secret) != 47) { - throw new \InvalidArgumentException('Invalid Secret'); + if (strlen($secret) !== 47) { + throw new InvalidArgumentException('Invalid Secret'); } $this->key = $key; $this->secret = $secret; } - /** - * Set host name - * - * @param string $url - */ - public function setHost($url) + public function setHost(string $url): void { if (filter_var($url, FILTER_VALIDATE_URL) === false) { - throw new \InvalidArgumentException('Invalid Host URL'); + throw new InvalidArgumentException('Invalid Host URL'); } $this->host = $url; } - /** - * Set default image url - * - * @param string $url - */ - public function setDefaultImage($url) + public function setDefaultImage(string $url): void { if (filter_var($url, FILTER_VALIDATE_URL) === false) { - throw new \InvalidArgumentException('Invalid Default Image URL'); + throw new InvalidArgumentException('Invalid Default Image URL'); } $this->defaultImage = $url; } - /** - * Set default image processing options - * - * @param array $options - */ - public function setDefaultOptions(array $options) + public function setDefaultOptions(array $options): void { $this->defaultOptions = $options; } - /** - * Set max slug length. - * - * @param int $length - */ - public function setMaxSlugLength(int $length) + public function setMaxSlugLength(int $length): void { $this->maxSlugLength = $length; } - /** - * Process image - * - * @param string $url - * @param int $width - * @param int $height - * @param string $title - * @param array $options - * - * @return string - */ - public function process($url, $width = '', $height = '', $title = '', $options = []) + * Width and height accept an empty string to indicate no constraint on that dimension. + * + * @throws JsonException + */ + public function process(string $url, string $width = '', string $height = '', string $title = '', array $options = []): string { - //If invalid URL passed, set to default image if (empty($url) || filter_var($url, FILTER_VALIDATE_URL) === false) { $url = $this->defaultImage; } @@ -125,75 +73,55 @@ public function process($url, $width = '', $height = '', $title = '', $options = 'width' => $width, 'height' => $height, 'default' => $this->defaultImage, - 'options' => array_merge($this->defaultOptions, $options) - ]); + 'options' => array_merge($this->defaultOptions, $options), + ], JSON_THROW_ON_ERROR); $uri = base64_encode(json_encode([ 'data' => $data, - 'hash' => sha1($this->key.$this->secret.$data) - ])); + 'hash' => sha1($this->key . $this->secret . $data), + ], JSON_THROW_ON_ERROR)); - // Make the b64 string url-safe $uri = str_replace(['+', '/'], ['-', '_'], $uri); $fullUrl = [ $this->host, $this->key, $uri, - $this->filename($url, $title) + $this->filename($url, $title), ]; return implode('/', $fullUrl); } - - /** - * Get seo slug and file extension - * - * @param string $url - * @param string $title - * - * @return string|null - */ - private function filename($url, $title = '') + private function filename(string $url, string $title = ''): ?string { - if (!empty($title)) { + if (! empty($title)) { $filename = $this->slug($title); } else { $filename = $this->slug(pathinfo($url, PATHINFO_FILENAME)); } $extension = pathinfo($url, PATHINFO_EXTENSION); - if (!empty($extension)) { - $maxLength = $this->maxSlugLength - strlen('.'.$extension); - return substr($filename, 0, $maxLength).'.'.$extension; + + if (! empty($extension)) { + $maxLength = $this->maxSlugLength - strlen('.' . $extension); + + return substr($filename, 0, $maxLength) . '.' . $extension; } return substr($filename, 0, $this->maxSlugLength); } - /** - * Generate a URL friendly "slug" from a given string. - * - * @param string $str - * - * @return string - */ - private function slug($str) + private function slug(string $str): string { - // replace non letter or digits by - $str = preg_replace('~[^\\pL\d]+~u', '-', $str); $str = trim($str, '-'); - // transliterate $str = iconv('utf-8', 'us-ascii//TRANSLIT', $str); $str = strtolower($str); - // remove unwanted characters - $str = preg_replace('~[^-\w]+~', '', $str); - - return $str; + return preg_replace('~[^-\w]+~', '', $str); } } diff --git a/tests/ResizedTest.php b/tests/ResizedTest.php index 3a78b94..6b06bfb 100644 --- a/tests/ResizedTest.php +++ b/tests/ResizedTest.php @@ -2,6 +2,8 @@ namespace Square1\Resized\Test; +use InvalidArgumentException; +use JsonException; use PHPUnit\Framework\TestCase; use Square1\Resized\Resized; @@ -10,20 +12,20 @@ class ResizedTest extends TestCase /** * Test invalid secret */ - public function testInvalidSecret() + public function testInvalidSecret(): void { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('Invalid Secret'); - $resized = new Resized('key', 'secret-123456789'); + new Resized('key', 'secret-123456789'); } /** * Test generating an image with a title */ - public function testInvalidDefaultURL() + public function testInvalidDefaultURL(): void { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('Invalid Default Image URL'); $resized = new Resized('key', 'secret-d0be2dc421be4fcd0172e5afceea3970e2f3d940'); @@ -33,9 +35,9 @@ public function testInvalidDefaultURL() /** * Test invalid host */ - public function testInvalidHost() + public function testInvalidHost(): void { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage('Invalid Host URL'); $resized = new Resized('key', 'secret-d0be2dc421be4fcd0172e5afceea3970e2f3d940'); @@ -44,110 +46,119 @@ public function testInvalidHost() /** * Test valid host + * @throws JsonException */ - public function testValidHost() + public function testValidHost(): void { $resized = new Resized('key', 'secret-d0be2dc421be4fcd0172e5afceea3970e2f3d940'); $resized->setDefaultImage('http://www.example.com/no-image.jpg'); $resized->setHost('https://different.resized.co'); $img = $resized->process('http://www.example.com/some-image-to-resize.jpg', '100', '100', 'A nice title'); - $this->assertEquals($img, 'https://different.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjJjZDZjZjNkNjk2MDc0YjUyZmRjYWZmZWUwMjY5YmIxMTA0OTZjY2QifQ==/a-nice-title.jpg'); + $this->assertEquals('https://different.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjJjZDZjZjNkNjk2MDc0YjUyZmRjYWZmZWUwMjY5YmIxMTA0OTZjY2QifQ==/a-nice-title.jpg', $img); } /** * Test generating an image with a title + * @throws JsonException */ - public function testEmptyURL() + public function testEmptyURL(): void { $resized = new Resized('key', 'secret-d0be2dc421be4fcd0172e5afceea3970e2f3d940'); $resized->setDefaultImage('http://www.example.com/no-image.jpg'); $img = $resized->process('', '100', '100', 'A nice title'); - $this->assertEquals($img, 'https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL25vLWltYWdlLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjMxOWI2MzM1Zjc2Njg3NmQ1N2U4NjhjZTg0NGQwN2Y4ZThlZTQwZDkifQ==/a-nice-title.jpg'); + $this->assertEquals('https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL25vLWltYWdlLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjMxOWI2MzM1Zjc2Njg3NmQ1N2U4NjhjZTg0NGQwN2Y4ZThlZTQwZDkifQ==/a-nice-title.jpg', $img); } /** * Test generating an image with a title + * @throws JsonException */ - public function testInvalidURL() + public function testInvalidURL(): void { $resized = new Resized('key', 'secret-d0be2dc421be4fcd0172e5afceea3970e2f3d940'); $resized->setDefaultImage('http://www.example.com/no-image.jpg'); $img = $resized->process('http:/www.example.com/some-image-to-resize.jpg', '100', '100', 'A nice title'); - $this->assertEquals($img, 'https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL25vLWltYWdlLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjMxOWI2MzM1Zjc2Njg3NmQ1N2U4NjhjZTg0NGQwN2Y4ZThlZTQwZDkifQ==/a-nice-title.jpg'); + $this->assertEquals('https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL25vLWltYWdlLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjMxOWI2MzM1Zjc2Njg3NmQ1N2U4NjhjZTg0NGQwN2Y4ZThlZTQwZDkifQ==/a-nice-title.jpg', $img); } /** * Test generating an image with a title + * @throws JsonException */ - public function testWithTitle() + public function testWithTitle(): void { $resized = new Resized('key', 'secret-d0be2dc421be4fcd0172e5afceea3970e2f3d940'); $resized->setDefaultImage('http://www.example.com/no-image.jpg'); $img = $resized->process('http://www.example.com/some-image-to-resize.jpg', '100', '100', 'A nice title'); - $this->assertEquals($img, 'https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjJjZDZjZjNkNjk2MDc0YjUyZmRjYWZmZWUwMjY5YmIxMTA0OTZjY2QifQ==/a-nice-title.jpg'); + $this->assertEquals('https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjJjZDZjZjNkNjk2MDc0YjUyZmRjYWZmZWUwMjY5YmIxMTA0OTZjY2QifQ==/a-nice-title.jpg', $img); } /** * Test generating an image with no title + * @throws JsonException */ - public function testWithNoTitle() + public function testWithNoTitle(): void { $resized = new Resized('key', 'secret-d0be2dc421be4fcd0172e5afceea3970e2f3d940'); $resized->setDefaultImage('http://www.example.com/no-image.jpg'); $img = $resized->process('http://www.example.com/some-image-to-resize.jpg', '100', '100'); - $this->assertEquals($img, 'https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjJjZDZjZjNkNjk2MDc0YjUyZmRjYWZmZWUwMjY5YmIxMTA0OTZjY2QifQ==/some-image-to-resize.jpg'); + $this->assertEquals('https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjJjZDZjZjNkNjk2MDc0YjUyZmRjYWZmZWUwMjY5YmIxMTA0OTZjY2QifQ==/some-image-to-resize.jpg', $img); } /** * Test generating an image with width constrained + * @throws JsonException */ - public function testConstrainWidth() + public function testConstrainWidth(): void { $resized = new Resized('key', 'secret-d0be2dc421be4fcd0172e5afceea3970e2f3d940'); $resized->setDefaultImage('http://www.example.com/no-image.jpg'); $img = $resized->process('http://www.example.com/some-image-to-resize.jpg', '100'); - $this->assertEquals($img, 'https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCJcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjM2YjEzNjljNmIyM2RhZmM4Y2VkZTQ1MTJiYzk5NTdlYWRjMDc1ZWMifQ==/some-image-to-resize.jpg'); + $this->assertEquals('https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIjEwMFwiLFwiaGVpZ2h0XCI6XCJcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjM2YjEzNjljNmIyM2RhZmM4Y2VkZTQ1MTJiYzk5NTdlYWRjMDc1ZWMifQ==/some-image-to-resize.jpg', $img); } /** * Test generating an image with height constrained + * @throws JsonException */ - public function testConstrainHeight() + public function testConstrainHeight(): void { $resized = new Resized('key', 'secret-d0be2dc421be4fcd0172e5afceea3970e2f3d940'); $resized->setDefaultImage('http://www.example.com/no-image.jpg'); $img = $resized->process('http://www.example.com/some-image-to-resize.jpg', '', '100'); - $this->assertEquals($img, 'https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIlwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjVhMWJmOTdjNDY1ZmU5YzEwNWIwMWZlODg1ZWIxNjM2MjRiMjZmZDAifQ==/some-image-to-resize.jpg'); + $this->assertEquals('https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIlwiLFwiaGVpZ2h0XCI6XCIxMDBcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjVhMWJmOTdjNDY1ZmU5YzEwNWIwMWZlODg1ZWIxNjM2MjRiMjZmZDAifQ==/some-image-to-resize.jpg', $img); } /** * Test empty contraints params + * @throws JsonException */ - public function testEmptyConstraintParams() + public function testEmptyConstraintParams(): void { $resized = new Resized('key', 'secret-d0be2dc421be4fcd0172e5afceea3970e2f3d940'); $resized->setDefaultImage('http://www.example.com/no-image.jpg'); - $img = $resized->process('http://www.example.com/some-image-to-resize.jpg', '', ''); + $img = $resized->process('http://www.example.com/some-image-to-resize.jpg'); - $this->assertEquals($img, 'https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIlwiLFwiaGVpZ2h0XCI6XCJcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjMzMGZhODdhOWFmNGJmNTZiOWI2ODQ5NjAxNTZmMmYwNWRiY2Y0ZTUifQ==/some-image-to-resize.jpg'); + $this->assertEquals('https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIlwiLFwiaGVpZ2h0XCI6XCJcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjMzMGZhODdhOWFmNGJmNTZiOWI2ODQ5NjAxNTZmMmYwNWRiY2Y0ZTUifQ==/some-image-to-resize.jpg', $img); } /** * Test no contraints params + * @throws JsonException */ - public function testNoConstraintParams() + public function testNoConstraintParams(): void { $resized = new Resized('key', 'secret-d0be2dc421be4fcd0172e5afceea3970e2f3d940'); $resized->setDefaultImage('http://www.example.com/no-image.jpg'); $img = $resized->process('http://www.example.com/some-image-to-resize.jpg'); - $this->assertEquals($img, 'https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIlwiLFwiaGVpZ2h0XCI6XCJcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjMzMGZhODdhOWFmNGJmNTZiOWI2ODQ5NjAxNTZmMmYwNWRiY2Y0ZTUifQ==/some-image-to-resize.jpg'); + $this->assertEquals('https://img.resized.co/key/eyJkYXRhIjoie1widXJsXCI6XCJodHRwOlxcXC9cXFwvd3d3LmV4YW1wbGUuY29tXFxcL3NvbWUtaW1hZ2UtdG8tcmVzaXplLmpwZ1wiLFwid2lkdGhcIjpcIlwiLFwiaGVpZ2h0XCI6XCJcIixcImRlZmF1bHRcIjpcImh0dHA6XFxcL1xcXC93d3cuZXhhbXBsZS5jb21cXFwvbm8taW1hZ2UuanBnXCIsXCJvcHRpb25zXCI6W119IiwiaGFzaCI6IjMzMGZhODdhOWFmNGJmNTZiOWI2ODQ5NjAxNTZmMmYwNWRiY2Y0ZTUifQ==/some-image-to-resize.jpg', $img); } }