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
- 718 reads