kraso4niy
@kraso4niy
fullstack

Как осуществить тестирование действий, требующих авторизацию в symfony 2.4?

Не получается написать тест для проверки страницы, доступ на которую разрешен только определенной группе пользователей (ROLE_USER). При этом проверка SecurityContext->isGranted('ROLE_USER') проходит. А когда стучусь на страницу, идет редирект на /login . Что не так?
Пример кода файла теста:
//...src/...Tests/SomeTest.php

private function login()
{
    $session = $this->container->get('session');
        
        $user = $this->doctrine->getManager()
            ->getRepository('ApplicationSonataUserBundle:User')
            ->findOneBy(
                array(
                    'username' => self::LOGIN
                )
            );
    $userManager = $this->container->get('fos_user.user_manager');
    $sfUser      = $userManager->findUserByUsername(self::LOGIN);
    $token = new UsernamePasswordToken($sfUser, $user->getPassword(),'main', $user->getRoles() );
    $session->set('_security_'.self::FIREWALL, serialize($token));
    $session->save();

    $cookie = new Cookie($session->getName(), $session->getId());
    $this->client->getCookieJar()->set($cookie);
    $this->container->get('security.context')->setToken($token);
    return $session->getId();
}

public function testPriceListPageActive()
{
        $PHPSESSID = $this->login();
        $securityContext = $this->container->get('security.context');
       //вот здесь проверка проходит - все ок
        if( $securityContext->isGranted('ROLE_USER') ){
            //а request не проходит, делает редирект на /login
            $crawler = $this->client->request( 'GET', '/pricelist/page' ,[],[],['Cookie' => 'PHPSESSID='.$PHPSESSID] );
        }
        else {
            throw new \Exception("Error Access Denied");
        }
}

Буду рад ответу тем кто реализовал такие тесты без HTTP_BASIC авторизации.
Прошу подсказать, возможно, неверные заголовки отсылаю.
  • Вопрос задан
  • 3145 просмотров
Пригласить эксперта
Ответы на вопрос 3
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
Был такая же проблема, как по мне то лучше использовать codeception и phantomjs и написать acceptance тест. Делать авторизацию как делает её обычный пользователь на сайте.
Ответ написан
Комментировать
war-tushkan
@war-tushkan
можно попробовать Behat
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы