Add test and fix migration

This commit is contained in:
Nicolas Lœuillet 2016-04-15 13:42:13 +02:00
parent 222e09f140
commit a7e2218e25
3 changed files with 51 additions and 5 deletions

View File

@ -4,16 +4,43 @@ namespace Application\Migrations;
use Doctrine\DBAL\Migrations\AbstractMigration;
use Doctrine\DBAL\Schema\Schema;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Wallabag\CoreBundle\Entity\Entry;
class Version20160410190541 extends AbstractMigration
class Version20160410190541 extends AbstractMigration implements ContainerAwareInterface
{
/**
* @var ContainerInterface
*/
private $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
/**
* @param Schema $schema
*/
public function up(Schema $schema)
{
$this->addSql('ALTER TABLE wallabag_entry ADD uuid LONGTEXT DEFAULT NULL');
$this->addSql('UPDATE wallabag_entry SET uuid = uuid()');
$this->addSql('ALTER TABLE `wallabag_entry` ADD `uuid` LONGTEXT DEFAULT NULL');
$em = $this->container->get('doctrine.orm.entity_manager');
$queryBuilder = $this->connection->createQueryBuilder();
$queryBuilder
->select('e.uuid')
->andWhere('e.uuid IS NULL');
$entries = $queryBuilder->execute();
/** @var Entry $entry */
foreach ($entries as $entry) {
$entry->generateUuid();
$em->persist($entry);
$em->clear();
}
$em->flush();
}
/**
@ -21,6 +48,6 @@ class Version20160410190541 extends AbstractMigration
*/
public function down(Schema $schema)
{
$this->addSql('ALTER TABLE `wallabag_entry` DROP uuid');
$this->addSql('ALTER TABLE `wallabag_entry` DROP `uuid`');
}
}

View File

@ -630,7 +630,8 @@ class Entry
public function generateUuid()
{
if (empty($this->uuid) || is_null($this->uuid)) {
$this->uuid = uniqid();
// @see http://blog.kevingomez.fr/til/2015/07/26/why-is-uniqid-slow/ for true parameter
$this->uuid = uniqid('', true);
}
}
}

View File

@ -698,4 +698,22 @@ class EntryControllerTest extends WallabagCoreTestCase
$crawler = $client->submit($form, $data);
$this->assertCount(2, $crawler->filter('div[class=entry]'));
}
public function testCache()
{
$this->logInAs('admin');
$client = $this->getClient();
$content = $client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->findOneByUser($this->getLoggedInUserId());
$client->request('GET', '/share/'.$content->getUuid());
$this->assertContains('max-age=25200, public', $client->getResponse()->headers->get('cache-control'));
$this->assertNotContains('no-cache', $client->getResponse()->headers->get('cache-control'));
$client->request('GET', '/view/'.$content->getId());
$this->assertContains('no-cache', $client->getResponse()->headers->get('cache-control'));
}
}