codeception symfony functional Программная авторизация в тестах, мок пользователя, подмена - изолированное тестирование
Primary tabs
Предварительная информация
Ниже речь идет об организации авторизации в функциональных тестов на симфони с помощью кодесепшн в случае, если нам нужно программно авторизоваться, чтобы не зависить от модуля/микросервиса авторизации.
В основе кода, приведенного ниже, лежит использование симфоневского метода loginUser().
Как подменить объект пользователя (полезно при изоляции авторизации, напр. в микросервисе)
Опишем класс, с теми ролями, что нам нужны, и можно описать методы для проведения авторизации:
/** * Авторизация под обычным пользователем * * @param FunctionalTester $I */ protected function authAsSimpleUser(FunctionalTester $I) { $this->client = $this->getUnauthedClient(); $client = $this->client; $simpleUser = new SimpleUser(); $client->loginUser($simpleUser); } protected function getUnauthedClient(): KernelBrowser { $client = $this->functionalTester->grabService('kernel')->getContainer()->get('test.client'); $client->catchExceptions(false); // выключаем перехват исключений return $client; }
-- тут мы используем loginUser(), опираясь на authAsSimpleUser() (с помощью аннотаций codeception) мы можем использовать уже авторизованного пользователя для выполнения к запроса к методу, для которого нужно обладать ролью:
/** * @before authAsSimpleUser */ public function test(FunctionalTester $I) { $client = $this->client; $client->request( 'GET', '/api/' . $this->getApiVersion() . '/test', [], [], [], ); $rsContent = json_decode($client->getResponse()->getContent(), true); $I->pre($rsContent); }
Возможные проблемы
При использовании такой авторизации могут быть проблемы:
Видео-материалы
- Подмена пользователя, авторизация с указанной ролью (в т.ч. для несуществующего пользователя): https://youtu.be/j4-ttbmaOFM
- Log in to post comments
- 413 reads