Я разрабатываю приложение на Symfony (версия 4.2.3) и также использую несколько пакетов из проекта Соната, а также Платформа API.
У нас есть 4 разные роли пользователей с разными привилегиями. API доступен только для чтения и должен быть доступен ROLE_USER, но ROLE_USER не должен иметь доступ к области администрирования. Другие роли должны иметь доступ к административной области.
Я настроил брандмауэры и пути управления доступом в файле config/packages/security.yaml, создал свой собственный обработчик безопасности VoterSecurityHandler и использую его в config/packages/sonata_admin.yaml:
sonata_admin:
security:
handler: sonata.admin.security.handler.voter
Обработчик безопасности зарегистрирован в config/services.yaml:
sonata.admin.security.handler.voter:
class: App\Security\Handler\VoterSecurityHandler
arguments: ["@security.authorization_checker", ['ROLE_SUPER_ADMIN']]
Я написал тесты, используя LiipFunctionalTestBundle и предоставляя фикстуры данных от разных пользователей, чтобы проверить, правильно ли обрабатываются их разрешения.
Я пытаюсь следовать лучшим практикам и отображать всю структуру приложения из src/ в каталог tests/. Поскольку у меня есть src/Security/Handler/VoterSecurityHandler.php, я создал tests/Security/Handler/TestVoterSecurityHandler.php.
Однако VoterSecurityHandler должен управлять разрешениями для администратора сонаты, и я на самом деле тестирую настройки конфигурации в config/packages/security.yaml.
Мне кажется неправильным размещать все тесты в вышеупомянутом классе, но мне интересно, куда мне поместить такого рода «дымовые тесты»?
Мой вопрос:
Где разместить тесты, проверяющие конфигурацию в файлах YAML?






Хорошей практикой является размещение тестовых файлов под той же архитектурой, что и ваш src, но это не означает, что вы не можете писать другие тестовые файлы.
Если у вас нет контроллера, отправьте его прямо на тесты и назовите как хотите (FirewallTest?)
Я лично использую специальный функциональный тест, который тестирует разные маршруты для разных ролей и проверяет только, получаю ли я 403/200.
Как вы можете видеть здесь, в документация, они помещают свой файл непосредственно в тесты: tests/ApplicationAvailabilityFunctionalTest.php
Хорошей практикой является помещение тестовых файлов в ту же архитектуру, что и ваш src, но это не означает, что вы не можете писать другие тестовые файлы. Если у вас нет контроллера, отправьте его прямо на тесты и назовите как хотите (FirewallTest?)
Спасибо за последний комментарий. Это намного лучше, чем ваш ответ, потому что он действительно отвечает на вопрос. Если вы отредактируете свой ответ, изложив это, я проголосую за него и приму его (если пока нет лучших ответов).
Непосредственно под src/ находится файл Kernel.php, который генерируется автоматически при загрузке проекта Symfony. Он читает все настройки под packages. Так что теперь у меня есть соблазн поместить свои тесты в KernelTest.php.
Нет, это будет означать, что вы тестируете ядро. Обновление моего ответа
Спасибо за предоставленную ссылку. Я думаю, что это хорошо подводит итог.
Что касается второй части вашего ответа, у вас есть
SecurityController? Потому что у меня вообще нет контроллеров в моем приложении. Конечные точки API определены с помощью аннотаций, а для области администрирования у меня есть классы администратора. В противном случае это хорошая идея.