By running the following command after updating composer.json
```
composer update chillerlan/php-qrcode chillerlan/php-settings-container
```
This change fixes a deprecation warning from Preferences ->
Personal data / Authentication -> Authenticator (OTP).
```
Return type of chillerlan\Settings\SettingsContainerAbstract::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
1. vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php(19): ttrss_error_handler(Return type of chillerlan\Settings\SettingsContainerAbstract::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice, vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php)
2. vendor/composer/ClassLoader.php(571): include(/usr/share/webapps/tt-rss/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php)
3. vendor/composer/ClassLoader.php(428): Composer\Autoload\includeFile(/usr/share/webapps/tt-rss/vendor/composer/../chillerlan/php-settings-container/src/SettingsContainerAbstract.php)
4. vendor/chillerlan/php-qrcode/src/QROptions.php(59): loadClass(chillerlan\Settings\SettingsContainerAbstract)
5. vendor/composer/ClassLoader.php(571): include(/usr/share/webapps/tt-rss/vendor/chillerlan/php-qrcode/src/QROptions.php)
6. vendor/composer/ClassLoader.php(428): Composer\Autoload\includeFile(/usr/share/webapps/tt-rss/vendor/composer/../chillerlan/php-qrcode/src/QROptions.php)
7. vendor/chillerlan/php-qrcode/src/QRCode.php(113): loadClass(chillerlan\QRCode\QROptions)
8. classes/pref/prefs.php(958): __construct()
9. classes/pref/prefs.php(469): _get_otp_qrcode_img()
10. classes/pref/prefs.php(541): index_auth_2fa()
11. backend.php(136): index_auth()
```
The issue is fixed in php-settings-container 2.1.1 [1] Here I use the
latest php-qrcode version for another PHP 8.1 fix [2].
[1] 68bc5019c8 (diff-359c7f7a6d32d9935951e1b0742eb116fb654f4a932c8d40328bb5dcab2fa111L162)
[2] https://github.com/chillerlan/php-qrcode/issues/97
145 lines
3.5 KiB
PHP
145 lines
3.5 KiB
PHP
<?php
|
|
/**
|
|
* Class QROptionsTest
|
|
*
|
|
* @filesource QROptionsTest.php
|
|
* @created 08.11.2018
|
|
* @package chillerlan\QRCodeTest
|
|
* @author smiley <smiley@chillerlan.net>
|
|
* @copyright 2018 smiley
|
|
* @license MIT
|
|
*
|
|
* @noinspection PhpUnusedLocalVariableInspection
|
|
*/
|
|
|
|
namespace chillerlan\QRCodeTest;
|
|
|
|
use chillerlan\QRCode\{QRCode, QRCodeException, QROptions};
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
/**
|
|
* QROptions test
|
|
*/
|
|
class QROptionsTest extends TestCase{
|
|
|
|
/**
|
|
* @see testVersionClamp()
|
|
* @return int[][]
|
|
* @internal
|
|
*/
|
|
public function VersionProvider():array{
|
|
return [
|
|
'values > 40 should be clamped to 40' => [42, 40],
|
|
'values < 1 should be clamped to 1' => [-42, 1],
|
|
'values in between shold not be touched' => [21, 21],
|
|
'value -1 should be treated as is (default)' => [QRCode::VERSION_AUTO, -1],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Tests the $version clamping
|
|
*
|
|
* @dataProvider VersionProvider
|
|
*/
|
|
public function testVersionClamp(int $version, int $expected):void{
|
|
$o = new QROptions(['version' => $version]);
|
|
|
|
$this::assertSame($expected, $o->version);
|
|
}
|
|
|
|
/**
|
|
* @see testVersionMinMaxClamp()
|
|
* @return int[][]
|
|
* @internal
|
|
*/
|
|
public function VersionMinMaxProvider():array{
|
|
return [
|
|
'normal clamp' => [5, 10, 5, 10],
|
|
'exceeding values' => [-42, 42, 1, 40],
|
|
'min > max' => [10, 5, 5, 10],
|
|
'min > max, exceeding' => [42, -42, 1, 40],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Tests the $versionMin/$versionMax clamping
|
|
*
|
|
* @dataProvider VersionMinMaxProvider
|
|
*/
|
|
public function testVersionMinMaxClamp(int $versionMin, int $versionMax, int $expectedMin, int $expectedMax):void{
|
|
$o = new QROptions(['versionMin' => $versionMin, 'versionMax' => $versionMax]);
|
|
|
|
$this::assertSame($expectedMin, $o->versionMin);
|
|
$this::assertSame($expectedMax, $o->versionMax);
|
|
}
|
|
|
|
/**
|
|
* @see testMaskPatternClamp()
|
|
* @return int[][]
|
|
* @internal
|
|
*/
|
|
public function MaskPatternProvider():array{
|
|
return [
|
|
'exceed max' => [42, 7,],
|
|
'exceed min' => [-42, 0],
|
|
'default (-1)' => [QRCode::MASK_PATTERN_AUTO, -1],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Tests the $maskPattern clamping
|
|
*
|
|
* @dataProvider MaskPatternProvider
|
|
*/
|
|
public function testMaskPatternClamp(int $maskPattern, int $expected):void{
|
|
$o = new QROptions(['maskPattern' => $maskPattern]);
|
|
|
|
$this::assertSame($expected, $o->maskPattern);
|
|
}
|
|
|
|
/**
|
|
* Tests if an exception is thrown on an incorrect ECC level
|
|
*/
|
|
public function testInvalidEccLevelException():void{
|
|
$this->expectException(QRCodeException::class);
|
|
$this->expectExceptionMessage('Invalid error correct level: 42');
|
|
|
|
$o = new QROptions(['eccLevel' => 42]);
|
|
}
|
|
|
|
/**
|
|
* @see testClampRGBValues()
|
|
* @return int[][][]
|
|
* @internal
|
|
*/
|
|
public function RGBProvider():array{
|
|
return [
|
|
'exceeding values' => [[-1, 0, 999], [0, 0 ,255]],
|
|
'too few values' => [[1, 2], [255, 255, 255]],
|
|
'too many values' => [[1, 2, 3, 4, 5], [1, 2, 3]],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Tests clamping of the RGB values for $imageTransparencyBG
|
|
*
|
|
* @dataProvider RGBProvider
|
|
*/
|
|
public function testClampRGBValues(array $rgb, array $expected):void{
|
|
$o = new QROptions(['imageTransparencyBG' => $rgb]);
|
|
|
|
$this::assertSame($expected, $o->imageTransparencyBG);
|
|
}
|
|
|
|
/**
|
|
* Tests if an exception is thrown when a non-numeric RGB value was encoutered
|
|
*/
|
|
public function testInvalidRGBValueException():void{
|
|
$this->expectException(QRCodeException::class);
|
|
$this->expectExceptionMessage('Invalid RGB value.');
|
|
|
|
$o = new QROptions(['imageTransparencyBG' => ['r', 'g', 'b']]);
|
|
}
|
|
|
|
}
|