namespace Tests\Wallabag\CoreBundle;
+use Symfony\Bundle\FrameworkBundle\Client;
+use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\BrowserKit\Cookie;
+use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Output\NullOutput;
+use Wallabag\CoreBundle\Entity\Config;
+use Wallabag\UserBundle\Entity\User;
abstract class WallabagCoreTestCase extends WebTestCase
{
+ /**
+ * @var Client|null
+ */
private $client = null;
public function getClient()
$this->client = static::createClient();
}
+ public function resetDatabase(Client $client)
+ {
+ $application = new Application($client->getKernel());
+ $application->setAutoExit(false);
+
+ $application->run(new ArrayInput([
+ 'command' => 'doctrine:schema:drop',
+ '--no-interaction' => true,
+ '--force' => true,
+ '--env' => 'test',
+ ]), new NullOutput());
+
+ $application->run(new ArrayInput([
+ 'command' => 'doctrine:schema:create',
+ '--no-interaction' => true,
+ '--env' => 'test',
+ ]), new NullOutput());
+
+ $application->run(new ArrayInput([
+ 'command' => 'doctrine:fixtures:load',
+ '--no-interaction' => true,
+ '--env' => 'test',
+ ]), new NullOutput());
+
+ /*
+ * Recreate client to avoid error:
+ *
+ * [Doctrine\DBAL\ConnectionException]
+ * Transaction commit failed because the transaction has been marked for rollback only.
+ */
+ $this->client = static::createClient();
+ }
+
+ public function getEntityManager()
+ {
+ return $this->client->getContainer()->get('doctrine.orm.entity_manager');
+ }
+
/**
* Login a user without making a HTTP request.
* If we make a HTTP request we lose ability to mock service in the container.
$firewallName = $container->getParameter('fos_user.firewall_name');
$user = $userManager->findUserBy(array('username' => $username));
- $loginManager->loginUser($firewallName, $user);
+ $loginManager->logInUser($firewallName, $user);
$session->set('_security_'.$firewallName, serialize($container->get('security.token_storage')->getToken()));
$session->save();
}
/**
- * Return the user id of the logged in user.
+ * Return the user of the logged in user.
* You should be sure that you called `logInAs` before.
*
- * @return int
+ * @return User
*/
- public function getLoggedInUserId()
+ public function getLoggedInUser()
{
$token = static::$kernel->getContainer()->get('security.token_storage')->getToken();
if (null !== $token) {
- return $token->getUser()->getId();
+ return $token->getUser();
}
throw new \RuntimeException('No logged in User.');
}
+ /**
+ * Return the user id of the logged in user.
+ * You should be sure that you called `logInAs` before.
+ *
+ * @return int
+ */
+ public function getLoggedInUserId()
+ {
+ return $this->getLoggedInUser()->getId();
+ }
+
+ public function useTheme($theme)
+ {
+ $config = $this->getEntityManager()->getRepository(Config::class)->findOneByUser($this->getLoggedInUser());
+ $config->setTheme($theme);
+ $this->getEntityManager()->persist($config);
+ $this->getEntityManager()->flush();
+ }
+
/**
* Check if Redis is installed.
* If not, mark test as skip.