Skip to content

Instantly share code, notes, and snippets.

@jakzal
Last active May 2, 2022 10:18
Show Gist options
  • Save jakzal/8254962 to your computer and use it in GitHub Desktop.
Save jakzal/8254962 to your computer and use it in GitHub Desktop.
Logging user into a Symfony app in Behat
<?php
namespace Acme\Context;
use Acme\MyApp\User;
use Behat\MinkExtension\Context\RawMinkContext;
use Behat\Symfony2Extension\Context\KernelAwareInterface;
use Doctrine\ORM\EntityManager;
use HWI\Bundle\OAuthBundle\Security\Core\Authentication\Token\OAuthToken;
use Symfony\Component\HttpKernel\KernelInterface;
class LeaveRequestContext extends RawMinkContext implements KernelAwareInterface
{
/**
* @var KernelInterface
*/
private $kernel;
/**
* @var User
*/
private $user;
/**
* @param KernelInterface $kernel
*/
public function setKernel(KernelInterface $kernel)
{
$this->kernel = $kernel;
}
/**
* @Given /^I am logged in$/
*/
public function iAmLoggedIn()
{
$this->user = $this->createUser();
$token = $this->getOAuthToken($this->user, array('ROLE_USER'));
$firewall = 'secured_area';
$session = $this->kernel->getContainer()->get('session');
$session->set('_security_'.$firewall, serialize($token));
$session->save();
$this->getSession()->setCookie($session->getName(), $session->getId());
}
/**
* @return User
*/
private function createUser()
{
$user = new User();
$user->setName('Kuba');
$em = $this->getEntityManager();
$em->persist($user);
$em->flush();
return $user;
}
/**
* @param mixed $user
* @param array $roles
*
* @return OAuthToken
*/
private function getOAuthToken($user, array $roles)
{
$token = new OAuthToken('a-random-access-token', $roles);
$token->setResourceOwnerName('google');
$token->setUser($user);
return $token;
}
/**
* @return EntityManager
*/
private function getEntityManager()
{
return $this->kernel->getContainer()->get('doctrine')->getManager();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment