Symfony2: получение учетных данных пользователя из тестовой конфигурации - PullRequest
3 голосов
/ 02 февраля 2012

Я выполняю некоторое функциональное тестирование в моем приложении Symfony2 и хочу заявить о безопасности контроллера, проверив, что только пользователи с соответствующими ролями могут получить доступ к действиям моего контроллера. Я настроил двух пользователей с разными ролями, которые проходят аутентификацию с базовыми учетными данными:

providers:
    in_memory:
        users:
            basic: { password: basic, roles: ROLE_BASIC }
            admin: { password: admin, roles: ROLE_ADMIN }

Я не хочу жестко кодировать этих пользователей в каждом тесте, который я пишу (я буду много писать). В идеале я хотел бы получить подробную информацию о пользователях, которые я определил в моей конфигурации, из контейнера. Это возможно? И.Е. вместо этого:

$crawler = $client->request('GET', '/inventory/index', array(), array(), 
    array(
        'PHP_AUTH_USER' => 'admin',
        'PHP_AUTH_PW' => 'admin'
    ));

Я хочу сделать это:

// Get the user details from the container
$users = $this->container->get('something');
$user = $users['admin'];

$crawler = $client->request('GET', '/inventory/index', array(), array(), 
    array(
        'PHP_AUTH_USER' => $user->getUsername(),
        'PHP_AUTH_PW' => $user->getPassword()
    ));

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Если вы находитесь в тестовой среде и не хотите погружаться в сложные вещи, действительно самый простой способ - это проанализировать файл, содержащий вашего провайдера в памяти, с использованием анализатора Yaml, и использоватьон служит для подачи запросов вашего клиента.

Использование LiipFunctionalTestBundle заставит вас определить одного и только одного пользователя для подключения.Более того, это заставит вас дублировать эту информацию, один раз в разделе поставщиков услуг безопасности и один раз в параметрах DI.

Последний вариант - определить собственную службу, которая использует частные службы безопасности для своей конфигурации.Это гораздо сложнее и менее затратно, чем простой анализ yaml:).

1 голос
/ 02 февраля 2012

Взгляните на LiipFunctionalTestBundle , в частности базовый класс WebTestCase, здесь .

Я не использовал этот комплект лично, но он утверждаетдля учета аутентификации изнутри ваших тестовых случаев.

Обновление

Возможно, вам лучше загружать пользователей как устройства, а не в память.Если вы не используете базу данных, настройте LiipFunctionalTestBundle для использования SQLite.Таким образом, вы можете получить доступ к каждому пользователю из ваших тестов.

Также, хотя, вероятно, не рекомендуется, вы можете в любой момент изменить liip_functional_test.authentication, выполнив что-то вроде этого:

$this->getContainer()->setParameter('liip_functional_test.authentication', 'new_value');
...