Дедлайн: 12.11 суббота 18:00
Домашнее задание состоит из 2 частей:
Реализовать валидацию данных, пришедших из формы оплаты и написать unit-тесты на валидатор.
Логика валидации должна быть реализована в src\Validation\PaymentRequestValidator::validate
Ниже перечислены параметры, которые обязательно должны присутствовать в переданном на валидацию массиве и правила, по которым должна происходить валидация.
- name
- строка из 2-х слов, разделенных пробелом
- минимальная длина слова - 2 символа
- примеры валидных значений: "Хамбар Дусалиев", "Ли Пак", "Kanye West"
- примеры невалидных значений: "Димас", "ВиниПух", "А Б", "", "Болат Болатбеков Болатович"
- cardNumber
- строка из 12 цифр
- expiration
- строка формата {число}{число}/{число}{число}, прям как на ваших настоящих карточках
- максимальное значение для первых пар чисел - 12, для вторых - 25
- минимальное значение для первых пар чисел - 01 (если число меньше 10, то вначале должен быть 0), для вторых - 22
- примеры валидных значений: 01/25, 06/23, 12/25
- примеры невалидных значений: 13/26, 1/22, 1225
- cvv
- 3-х значное число (0 допускается как первый символ)
Если валидация прошла успешно - метод validate должен вернуть пустой массив.
Если валидация не прошла, метод validate должен вернуть массив строк, где каждая строка будет сообщением об ошибке.
Валидатор не должен прерывать валидацию, если была найдена ошибка, а накопить все ошибки, перед тем, как вернуть их.
Пример массива, с ошибками валидации:
[
'name не состоит их 2-х слов',
'cvv не трехзначное число',
]
- Используйте в тестах провайдеры данных (https://phpunit.readthedocs.io/ru/latest/writing-tests-for-phpunit.html#writing-tests-for-phpunit-data-providers)
- Продумайте и реализуйте дополнительные кейсы валидации, напишите на них тесты
https://go.dev/play/p/ks3Wh4n7iCK
После того, как реализуете решение в песочнице, нажмите на кнопку share и вставьте полученную ссылку в pull request