X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests%2FWallabag%2FCoreBundle%2FWallabagCoreTestCase.php;h=1eda519946883052dc967584d180fd2c4edb4dd7;hb=f808b01692a835673f328d7221ba8c212caa9b61;hp=7bf4b43ce8f32ee462aaec0187e44df448dcea76;hpb=dbe94e73a9eaf3acb250812913b0303b35d01a2e;p=github%2Fwallabag%2Fwallabag.git diff --git a/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php index 7bf4b43c..1eda5199 100644 --- a/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php +++ b/tests/Wallabag/CoreBundle/WallabagCoreTestCase.php @@ -2,25 +2,72 @@ 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 setUp() + { + parent::setUp(); + + $this->client = static::createClient(); + } + public function getClient() { return $this->client; } - public function setUp() + public function resetDatabase(Client $client) { - parent::setUp(); - + $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. @@ -36,10 +83,10 @@ abstract class WallabagCoreTestCase extends WebTestCase $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); + $user = $userManager->findUserBy(['username' => $username]); + $loginManager->logInUser($firewallName, $user); - $session->set('_security_'.$firewallName, serialize($container->get('security.token_storage')->getToken())); + $session->set('_security_' . $firewallName, serialize($container->get('security.token_storage')->getToken())); $session->save(); $cookie = new Cookie($session->getName(), $session->getId()); @@ -65,22 +112,41 @@ abstract class WallabagCoreTestCase extends WebTestCase } /** - * 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.