wallabag/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php
Jeremy Benoist a0a4ce3135
Lock deps for FOSUser
We’ll wait until the final release will be out and other related project will be update to support it.
Meanwhile we can safely lock to a previous version.
2016-10-11 18:59:08 +02:00

96 lines
2.7 KiB
PHP

<?php
namespace Tests\Wallabag\CoreBundle;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\BrowserKit\Cookie;
abstract class WallabagCoreTestCase extends WebTestCase
{
private $client = null;
public function getClient()
{
return $this->client;
}
public function setUp()
{
parent::setUp();
$this->client = static::createClient();
}
/**
* Login a user without making a HTTP request.
* If we make a HTTP request we lose ability to mock service in the container.
*
* @param string $username User to log in
*/
public function logInAs($username)
{
$container = $this->client->getContainer();
$session = $container->get('session');
$userManager = $container->get('fos_user.user_manager');
$loginManager = $container->get('fos_user.security.login_manager');
$firewallName = $container->getParameter('fos_user.firewall_name');
$user = $userManager->findUserBy(array('username' => $username));
$loginManager->loginUser($firewallName, $user);
$session->set('_security_'.$firewallName, serialize($container->get('security.token_storage')->getToken()));
$session->save();
$cookie = new Cookie($session->getName(), $session->getId());
$this->client->getCookieJar()->set($cookie);
}
/**
* Instead of `logInAs` this method use a HTTP request to log in the user.
* Could be better for some tests.
*
* @param string $username User to log in
*/
public function logInAsUsingHttp($username)
{
$crawler = $this->client->request('GET', '/login');
$form = $crawler->filter('button[type=submit]')->form();
$data = [
'_username' => $username,
'_password' => 'mypassword',
];
$this->client->submit($form, $data);
}
/**
* Return the user id of the logged in user.
* You should be sure that you called `logInAs` before.
*
* @return int
*/
public function getLoggedInUserId()
{
$token = static::$kernel->getContainer()->get('security.token_storage')->getToken();
if (null !== $token) {
return $token->getUser()->getId();
}
throw new \RuntimeException('No logged in User.');
}
/**
* Check if Redis is installed.
* If not, mark test as skip.
*/
protected function checkRedis()
{
try {
$this->client->getContainer()->get('wallabag_core.redis.client')->connect();
} catch (\Exception $e) {
$this->markTestSkipped('Redis is not installed/activated');
}
}
}