Optimized fixtures

This commit is contained in:
Kevin Frantz 2018-11-23 22:09:29 +01:00
parent 4066634af2
commit e16f2a44a8
4 changed files with 94 additions and 3 deletions

View File

@ -0,0 +1,19 @@
<?php
namespace App\DBAL\Types;
use Fresh\DoctrineEnumBundle\DBAL\Types\AbstractEnumType;
/**
* Containes the system slugs.
*
* @author kevinfrantz
*/
final class SystemSlugType extends AbstractEnumType
{
public const IMPRINT = 'IMPRINT';
protected static $choices = [
self::IMPRINT => 'imprint',
];
}

View File

@ -6,21 +6,31 @@ use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use App\Entity\User;
use FOS\UserBundle\Doctrine\UserManager;
use App\Entity\UserInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
/**
* Never execute this fixture on a livesystem!
*
* @author kevinfrantz
*/
class DummyFixtures extends Fixture
class DummyFixtures extends Fixture implements ContainerAwareInterface
{
private $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
public function load(ObjectManager $manager)
{
$this->addTestUser();
$manager->persist($this->getTestUser());
$manager->flush();
}
protected function addTestUser(): void
protected function getTestUser(): UserInterface
{
/**
* @var UserManager
@ -35,5 +45,7 @@ class DummyFixtures extends Fixture
$testUser->setPlainPassword('test');
$testUser->setEnabled(true);
$userManager->updateUser($testUser);
return $testUser;
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace App\DataFixtures;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use App\Entity\Source\Primitive\Text\TextSource;
use App\Entity\Source\Primitive\Text\TextSourceInterface;
use App\DBAL\Types\SystemSlugType;
class SourceFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
$manager->persist($this->getImpressum());
$manager->flush();
}
private function getImpressum(): TextSourceInterface
{
$source = new TextSource();
$source->setText('Example Impressum');
$source->setSlug(SystemSlugType::IMPRINT);
return $source;
}
}

View File

@ -0,0 +1,33 @@
<?php
namespace Tests\Integration;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Doctrine\ORM\EntityManager;
use App\Entity\Source\AbstractSource;
use App\DBAL\Types\SystemSlugType;
use App\Entity\Source\Primitive\Text\TextSourceInterface;
class FixturesIntegrationTest extends KernelTestCase
{
/**
* @var EntityManager
*/
protected $entityManager;
public function setUp(): void
{
self::bootKernel();
$this->entityManager = static::$kernel->getContainer()->get('doctrine')->getManager();
}
public function testImpressum(): void
{
$sourceRepository = $this->entityManager->getRepository(AbstractSource::class);
/**
* @var TextSourceInterface
*/
$imprint = $sourceRepository->findOneBy(['slug' => SystemSlugType::IMPRINT]);
$this->assertInternalType('string', $imprint->getText());
}
}