1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-25 00:17:37 +00:00
Files
matomo/tests/PHPUnit/Unit/Auth/PasswordStrengthTest.php
Michal Kleiner 78fea226f7 Add password strength rules with FE component and BE validation
* Add new System setting for enabling password strength check (#23362)

* Add new System setting for enabling password strength check

* Update broken UI tests

* Update default value to off, update some text

* Update broken UI test by description change

* Add PasswordStrength component (#23371)

* Add PasswordStrength component
* Wire up form submit button to strength check
* Allow the strength validator to work with external input
* Update UI test screenshots
* Add password strength field to UI demo page

* Add backend password strength checks to password set forms (#23378)

* Add backend password strength checks to password set forms
* Add UI test for user manager page
* Update UI fixture to enable strong passwords

* Update valid special characters

* Update text used in Login system settings notification email (#23404)

* Update special character checks to be more inclusive

* Remove readonly filter from event emit to keep the object further updatable (#23406)

* Remove readonly filter from event emit to keep the object further updatable

* Clone the parent user object when edit form is created to prevent silent nested prop manipulation

---------

Co-authored-by: Nathan Gavin <nathangavin987@gmail.com>
2025-07-04 09:20:31 +12:00

120 خطوط
4.0 KiB
PHP

<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Tests\Unit\Auth;
use Piwik\Auth\PasswordStrength;
/**
* @group Core
*/
class PasswordStrengthTest extends \PHPUnit\Framework\TestCase
{
public function testGetRulesFeatureDisabled()
{
$passwordStrength = new PasswordStrength($featureEnabled = false);
$rules = $passwordStrength->getRules();
$this->assertEmpty($rules);
}
public function testGetRulesFeatureEnabled()
{
$passwordStrength = new PasswordStrength($featureEnabled = true);
$rules = $passwordStrength->getRules();
$this->assertNotEmpty($rules);
foreach ($rules as $rule) {
$this->assertArrayHasKey('validationRegex', $rule);
$this->assertNotEmpty($rule['validationRegex']);
$this->assertArrayHasKey('ruleText', $rule);
$this->assertNotEmpty($rule['ruleText']);
}
}
/**
* @dataProvider passwordProvider
*/
public function testPasswordStrengthFeatureDisabled($password, $expected)
{
$passwordStrength = new PasswordStrength($featureEnabled = false);
$brokenRules = $passwordStrength->validatePasswordStrength($password);
$this->assertEmpty($brokenRules);
}
/**
* @dataProvider passwordProvider
*/
public function testPasswordStrengthRulesFeatureEnabled($password, $expected)
{
$passwordStrength = new PasswordStrength($featureEnabled = true);
$brokenRules = $passwordStrength->validatePasswordStrength($password);
$this->assertSame($expected, $brokenRules);
}
public function passwordProvider()
{
yield ['Testpassword1!', []];
yield ['Testpassword1"', []];
yield ['Testpassword1#', []];
yield ['Testpassword1$', []];
yield ['Testpassword1%', []];
yield ['Testpassword1&', []];
yield ["Testpassword1'", []];
yield ['Testpassword1(', []];
yield ['Testpassword1)', []];
yield ['Testpassword1*', []];
yield ['Testpassword1+', []];
yield ['Testpassword1,', []];
yield ['Testpassword1-', []];
yield ['Testpassword1.', []];
yield ['Testpassword1/', []];
yield ['Testpassword1:', []];
yield ['Testpassword1;', []];
yield ['Testpassword1<', []];
yield ['Testpassword1=', []];
yield ['Testpassword1>', []];
yield ['Testpassword1?', []];
yield ['Testpassword1@', []];
yield ['Testpassword1[', []];
yield ['Testpassword1\\', []];
yield ['Testpassword1]', []];
yield ['Testpassword1^', []];
yield ['Testpassword1_', []];
yield ['Testpassword1`', []];
yield ['Testpassword1{', []];
yield ['Testpassword1|', []];
yield ['Testpassword1}', []];
yield ['Testpassword1~', []];
yield ['Testword1!', ['General_PasswordStrengthValidationLength']];
yield ['TESTPASSWORD1!', ['General_PasswordStrengthValidationLowercase']];
yield ['testpassword1!', ['General_PasswordStrengthValidationUppercase']];
yield ['Testpassword!', ['General_PasswordStrengthValidationNumber']];
yield ['Testpassword1', ['General_PasswordStrengthValidationSpecialChar']];
yield ['testpassword1', [
'General_PasswordStrengthValidationUppercase',
'General_PasswordStrengthValidationSpecialChar'
]];
yield ['TESTWORD!', [
'General_PasswordStrengthValidationLength',
'General_PasswordStrengthValidationLowercase',
'General_PasswordStrengthValidationNumber'
]];
yield ['', [
'General_PasswordStrengthValidationLength',
'General_PasswordStrengthValidationLowercase',
'General_PasswordStrengthValidationUppercase',
'General_PasswordStrengthValidationNumber',
'General_PasswordStrengthValidationSpecialChar'
]];
}
}