funpay-test
Тестовое задание для funpay. Полный текст задания указан в файле TASK.md
Примечание
Тестовое задание реализовано с неизменными классами и скриптами, что были предоставлены в начале, с двумя исключениями:
- создание mysqli объекта вынесено из тела теста в отдельный файл
mysqli.php
- автолоадер был вынесен в отдельный файл
autoload.php
Принцип работы
Формирование запроса происходит в 3 шага 1. Токенизация по MYSQL синтаксису: проверка закрытия кавычек и корректности значений 2. Токенизация по условным выражениям. Проверка skip-значений 3. Токенизация по идентификаторам, форматирование и экранирование значений
Каждый из типов токенизации вынесен в отдельную чистую функцию в классе QueryHelper
. Итоговая работа достигается композицией этих функций, описанием преобразований над токенизированным сроками и вставкой значений при помощи форматировщика в компоненте QueryProcessor
Проверка корректности итогового SQL-синтаксиса не проводится, т.к. происходит на стороне БД при получении запроса. Значения при вставке - экранируются от SQL-инъекций.
Скрипты
test.php
- Исходный тест. Проверка корректности работы программы.custom-hash-test.php
- Тест настраиваемого хэшаquery-helper-test.php
- Тест вспомогательного класса QueryHelperquery-processor-test.php
- Тест компонента QueryProcessorstring-helper-test
- Тест вспомогательного класса StringHelper
Вспомогательный классы
Содержат преимущественно чистые статические методы
AssertHelper
- содержит методы для продвинутой проверки значенийArrayHelper
- содержит методы для продвинутой обработки массивовIntervalHelper
- содержит методы для преобразования интерваловQueryHelper
- содержит чистые методы токенизации и преобразования частей SQL-запросовStringHelper
- содержит методы для продвинутой обработки строк
Автор
Анатолий стародубцев tostar74@mail.ru @pantagruel74