Я исправил это.
Мои шаблоны регулярных выражений не соответствуют образцу данных, изменено на:
public function invalidPasswordProvider()
{
return [ // conditions not meet:
['J#$j#2'], // at least 8 characters
['LuAqA=uX'], // at least 1 digit (0 to 9)
['$OG3W4I1'], // at least 1 small case letter
['3su-a+aa'], // at least 1 upper case letter
['CJuC$AGc'], // at least 1 special character
];
}
Переменная шаблона удалена из PasswordComplexity.php
public $pattern = [
'/.{8,}/',
'/\d+/',
'/[a-z]+/',
'/[A-Z]+/',
'/[!@#$%\-_*+=]+/'
];
PasswordComplexityValidator.php заполнен функцией проверки и всеми необходимыми данными:
<?php
declare(strict_types=1);
namespace App\Components\Validator\Constraint;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Constraints\RegexValidator;
class PasswordComplexityValidator extends RegexValidator
{
const PASS_REQ_1 = '/.{8,}/'; // at least 8 characters
const PASS_REQ_2 = '/\d+/'; // at least 1 digit (0 to 9)
const PASS_REQ_3 = '/[a-z]+/'; // at least 1 small case letter
const PASS_REQ_4 = '/[A-Z]+/'; // at least 1 upper case letter
const PASS_REQ_5 = '/[!@#$%\-_*+=]+/'; // at least 1 special character (e.g.: !@#$%-_*+=)
public static $patterns = [
self::PASS_REQ_1,
self::PASS_REQ_2,
self::PASS_REQ_3,
self::PASS_REQ_4,
self::PASS_REQ_5,
];
public function validate($password, Constraint $constraint)
{
foreach (self::$patterns as $pattern) {
if (!preg_match($pattern, $password, $matches))
{
$this->context
->buildViolation($constraint->message)
->setParameter('{{ string }}', $password)
->addViolation();
}
}
}
}
Изменено также
/**
* @dataProvider invalidPasswordProvider
*/
public function testValidationFail($value)
{
$constraint = new PasswordComplexity();
/** @var ExecutionContextInterface|MockObject $context */
$context = $this->getMockExecutionContext();
$context->expects($this->once())
до
$context->expects($this->atLeast(1))
для проверки пароля, если не совпадают более одного регулярного выражения.
Испытание пройдено, я чувствую, что сейчас все так, как должно быть.
С уважением,
J * * тысяча двадцать-два