Create a simple test to play with foundry - problem with test db remaining

This commit is contained in:
Julie Lenaerts 2024-02-13 16:04:10 +01:00
parent aee8e17cfa
commit 1a213ab5f8
5 changed files with 366 additions and 0 deletions

View File

@ -0,0 +1,58 @@
<?php
namespace Chill\MainBundle\Factory\Embeddable;
use Chill\MainBundle\Entity\Embeddable\PrivateCommentEmbeddable;
use Zenstruck\Foundry\ModelFactory;
use Zenstruck\Foundry\Proxy;
/**
* @extends ModelFactory<PrivateCommentEmbeddable>
*
* @method PrivateCommentEmbeddable|Proxy create(array|callable $attributes = [])
* @method static PrivateCommentEmbeddable|Proxy createOne(array $attributes = [])
* @method static PrivateCommentEmbeddable[]|Proxy[] createMany(int $number, array|callable $attributes = [])
* @method static PrivateCommentEmbeddable[]|Proxy[] createSequence(iterable|callable $sequence)
*
* @phpstan-method Proxy<PrivateCommentEmbeddable> create(array|callable $attributes = [])
* @phpstan-method static Proxy<PrivateCommentEmbeddable> createOne(array $attributes = [])
*/
final class PrivateCommentEmbeddableFactory extends ModelFactory
{
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services
*
* @todo inject services if required
*/
public function __construct()
{
parent::__construct();
}
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories
*
* @todo add your default values here
*/
protected function getDefaults(): array
{
return [
];
}
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization
*/
protected function initialize(): self
{
return $this
->withoutPersisting()
// ->afterInstantiate(function(PrivateCommentEmbeddable $privateCommentEmbeddable): void {})
;
}
protected static function getClass(): string
{
return PrivateCommentEmbeddable::class;
}
}

View File

@ -0,0 +1,83 @@
<?php
namespace Chill\MainBundle\Factory;
use Chill\MainBundle\Entity\User;
use Doctrine\ORM\EntityRepository;
use Zenstruck\Foundry\ModelFactory;
use Zenstruck\Foundry\Proxy;
use Zenstruck\Foundry\RepositoryProxy;
/**
* @extends ModelFactory<User>
*
* @method User|Proxy create(array|callable $attributes = [])
* @method static User|Proxy createOne(array $attributes = [])
* @method static User|Proxy find(object|array|mixed $criteria)
* @method static User|Proxy findOrCreate(array $attributes)
* @method static User|Proxy first(string $sortedField = 'id')
* @method static User|Proxy last(string $sortedField = 'id')
* @method static User|Proxy random(array $attributes = [])
* @method static User|Proxy randomOrCreate(array $attributes = [])
* @method static EntityRepository|RepositoryProxy repository()
* @method static User[]|Proxy[] all()
* @method static User[]|Proxy[] createMany(int $number, array|callable $attributes = [])
* @method static User[]|Proxy[] createSequence(iterable|callable $sequence)
* @method static User[]|Proxy[] findBy(array $attributes)
* @method static User[]|Proxy[] randomRange(int $min, int $max, array $attributes = [])
* @method static User[]|Proxy[] randomSet(int $number, array $attributes = [])
*
* @phpstan-method Proxy<User> create(array|callable $attributes = [])
* @phpstan-method static Proxy<User> createOne(array $attributes = [])
* @phpstan-method static Proxy<User> find(object|array|mixed $criteria)
* @phpstan-method static Proxy<User> findOrCreate(array $attributes)
* @phpstan-method static Proxy<User> first(string $sortedField = 'id')
* @phpstan-method static Proxy<User> last(string $sortedField = 'id')
* @phpstan-method static Proxy<User> random(array $attributes = [])
* @phpstan-method static Proxy<User> randomOrCreate(array $attributes = [])
* @phpstan-method static RepositoryProxy<User> repository()
*/
final class UserFactory extends ModelFactory
{
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services
*
* @todo inject services if required
*/
public function __construct()
{
parent::__construct();
}
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories
*
* @todo add your default values here
*/
protected function getDefaults(): array
{
return [
'attributes' => [],
'enabled' => self::faker()->boolean(),
'label' => self::faker()->text(200),
'locked' => self::faker()->boolean(),
'password' => self::faker()->text(255),
'username' => self::faker()->text(80),
];
}
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization
*/
protected function initialize(): self
{
return $this
// ->afterInstantiate(function(User $user): void {})
;
}
protected static function getClass(): string
{
return User::class;
}
}

View File

@ -0,0 +1,83 @@
<?php
namespace Chill\PersonBundle\Factory\AccompanyingPeriod;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Doctrine\ORM\EntityRepository;
use Zenstruck\Foundry\ModelFactory;
use Zenstruck\Foundry\Proxy;
use Zenstruck\Foundry\RepositoryProxy;
/**
* @extends ModelFactory<AccompanyingPeriod>
*
* @method AccompanyingPeriod|Proxy create(array|callable $attributes = [])
* @method static AccompanyingPeriod|Proxy createOne(array $attributes = [])
* @method static AccompanyingPeriod|Proxy find(object|array|mixed $criteria)
* @method static AccompanyingPeriod|Proxy findOrCreate(array $attributes)
* @method static AccompanyingPeriod|Proxy first(string $sortedField = 'id')
* @method static AccompanyingPeriod|Proxy last(string $sortedField = 'id')
* @method static AccompanyingPeriod|Proxy random(array $attributes = [])
* @method static AccompanyingPeriod|Proxy randomOrCreate(array $attributes = [])
* @method static EntityRepository|RepositoryProxy repository()
* @method static AccompanyingPeriod[]|Proxy[] all()
* @method static AccompanyingPeriod[]|Proxy[] createMany(int $number, array|callable $attributes = [])
* @method static AccompanyingPeriod[]|Proxy[] createSequence(iterable|callable $sequence)
* @method static AccompanyingPeriod[]|Proxy[] findBy(array $attributes)
* @method static AccompanyingPeriod[]|Proxy[] randomRange(int $min, int $max, array $attributes = [])
* @method static AccompanyingPeriod[]|Proxy[] randomSet(int $number, array $attributes = [])
*
* @phpstan-method Proxy<AccompanyingPeriod> create(array|callable $attributes = [])
* @phpstan-method static Proxy<AccompanyingPeriod> createOne(array $attributes = [])
* @phpstan-method static Proxy<AccompanyingPeriod> find(object|array|mixed $criteria)
* @phpstan-method static Proxy<AccompanyingPeriod> findOrCreate(array $attributes)
* @phpstan-method static Proxy<AccompanyingPeriod> first(string $sortedField = 'id')
* @phpstan-method static Proxy<AccompanyingPeriod> last(string $sortedField = 'id')
* @phpstan-method static Proxy<AccompanyingPeriod> random(array $attributes = [])
* @phpstan-method static Proxy<AccompanyingPeriod> randomOrCreate(array $attributes = [])
* @phpstan-method static RepositoryProxy<AccompanyingPeriod> repository()
* @phpstan-method static list<Proxy<AccompanyingPeriod>> all()
*/
final class AccompanyingPeriodFactory extends ModelFactory
{
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services
*
* @todo inject services if required
*/
public function __construct()
{
parent::__construct();
}
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories
*
* @todo add your default values here
*/
protected function getDefaults(): array
{
return [
'confidential' => self::faker()->boolean(),
'emergency' => self::faker()->boolean(),
'openingDate' => self::faker()->dateTime(),
'remark' => self::faker()->text(),
'requestorAnonymous' => self::faker()->boolean(),
];
}
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization
*/
protected function initialize(): self
{
return $this
// ->afterInstantiate(function(AccompanyingPeriod $accompanyingPeriod): void {})
;
}
protected static function getClass(): string
{
return AccompanyingPeriod::class;
}
}

View File

@ -0,0 +1,89 @@
<?php
namespace Chill\PersonBundle\Factory\AccompanyingPeriod;
use Chill\MainBundle\Factory\Embeddable\PrivateCommentEmbeddableFactory;
use Chill\MainBundle\Factory\UserFactory;
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
use Doctrine\ORM\EntityRepository;
use Zenstruck\Foundry\ModelFactory;
use Zenstruck\Foundry\Proxy;
use Zenstruck\Foundry\RepositoryProxy;
/**
* @extends ModelFactory<AccompanyingPeriodWork>
*
* @method AccompanyingPeriodWork|Proxy create(array|callable $attributes = [])
* @method static AccompanyingPeriodWork|Proxy createOne(array $attributes = [])
* @method static AccompanyingPeriodWork|Proxy find(object|array|mixed $criteria)
* @method static AccompanyingPeriodWork|Proxy findOrCreate(array $attributes)
* @method static AccompanyingPeriodWork|Proxy first(string $sortedField = 'id')
* @method static AccompanyingPeriodWork|Proxy last(string $sortedField = 'id')
* @method static AccompanyingPeriodWork|Proxy random(array $attributes = [])
* @method static AccompanyingPeriodWork|Proxy randomOrCreate(array $attributes = [])
* @method static EntityRepository|RepositoryProxy repository()
* @method static AccompanyingPeriodWork[]|Proxy[] all()
* @method static AccompanyingPeriodWork[]|Proxy[] createMany(int $number, array|callable $attributes = [])
* @method static AccompanyingPeriodWork[]|Proxy[] createSequence(iterable|callable $sequence)
* @method static AccompanyingPeriodWork[]|Proxy[] findBy(array $attributes)
* @method static AccompanyingPeriodWork[]|Proxy[] randomRange(int $min, int $max, array $attributes = [])
* @method static AccompanyingPeriodWork[]|Proxy[] randomSet(int $number, array $attributes = [])
*
* @phpstan-method Proxy<AccompanyingPeriodWork> create(array|callable $attributes = [])
* @phpstan-method static Proxy<AccompanyingPeriodWork> createOne(array $attributes = [])
* @phpstan-method static Proxy<AccompanyingPeriodWork> find(object|array|mixed $criteria)
* @phpstan-method static Proxy<AccompanyingPeriodWork> findOrCreate(array $attributes)
* @phpstan-method static Proxy<AccompanyingPeriodWork> first(string $sortedField = 'id')
* @phpstan-method static Proxy<AccompanyingPeriodWork> last(string $sortedField = 'id')
* @phpstan-method static Proxy<AccompanyingPeriodWork> random(array $attributes = [])
* @phpstan-method static Proxy<AccompanyingPeriodWork> randomOrCreate(array $attributes = [])
* @phpstan-method static RepositoryProxy<AccompanyingPeriodWork> repository()
*/
final class AccompanyingPeriodWorkFactory extends ModelFactory
{
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services
*
* @todo inject services if required
*/
public function __construct()
{
parent::__construct();
}
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories
*
* @todo add your default values here
*/
protected function getDefaults(): array
{
return [
'createdAt' => \DateTimeImmutable::createFromMutable(self::faker()->dateTime()),
'createdAutomatically' => self::faker()->boolean(),
'createdAutomaticallyReason' => self::faker()->text(),
'createdBy' => UserFactory::new(),
'note' => self::faker()->text(),
'privateComment' => PrivateCommentEmbeddableFactory::new(),
'startDate' => \DateTimeImmutable::createFromMutable(self::faker()->dateTime()),
'updatedAt' => \DateTimeImmutable::createFromMutable(self::faker()->dateTime()),
'updatedBy' => UserFactory::new(),
'version' => self::faker()->randomNumber(),
];
}
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization
*/
protected function initialize(): self
{
return $this
// ->afterInstantiate(function(AccompanyingPeriodWork $accompanyingPeriodWork): void {})
;
}
protected static function getClass(): string
{
return AccompanyingPeriodWork::class;
}
}

View File

@ -0,0 +1,53 @@
<?php
namespace Repository;
use Chill\MainBundle\Factory\UserFactory;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Factory\AccompanyingPeriod\AccompanyingPeriodFactory;
use Chill\PersonBundle\Repository\AccompanyingPeriodRepository;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Zenstruck\Foundry\Test\Factories;
use Zenstruck\Foundry\Test\ResetDatabase;
class AccompanyingPeriodRepositoryTest extends KernelTestCase
{
use ResetDatabase, Factories;
public function testFindConfirmedByUser()
{
self::bootKernel();
$user = UserFactory::createOne([
'username' => 'Bob ISLA'
]);
$userTwo = UserFactory::createOne([
'username' => 'Richard REEVES'
]);
$apOne = AccompanyingPeriodFactory::createOne([
'step' => AccompanyingPeriod::STEP_CONFIRMED,
'user' => $user->object()
]);
$apTwo = AccompanyingPeriodFactory::createOne([
'step' => AccompanyingPeriod::STEP_DRAFT,
'user' => $user->object()
]);
$apThree = AccompanyingPeriodFactory::createOne([
'step' => AccompanyingPeriod::STEP_CONFIRMED,
'user' => $userTwo->object()
]);
$this->assertEquals($apOne, $this->getAccompanyingPeriodRepository()->findConfirmedByUser($user->object()));
}
private function getAccompanyingPeriodRepository(): AccompanyingPeriodRepository
{
return self::$container->get(AccompanyingPeriodRepository::class);
}
}