Compare commits

...

3 Commits

7 changed files with 373 additions and 1 deletions

View File

@@ -62,6 +62,7 @@
"twig/twig": "^3.0"
},
"require-dev": {
"dama/doctrine-test-bundle": "^7.1",
"doctrine/doctrine-fixtures-bundle": "^3.3",
"fakerphp/faker": "^1.13",
"jangregor/phpstan-prophecy": "^1.0",
@@ -82,7 +83,8 @@
"symfony/phpunit-bridge": "^4.4",
"symfony/stopwatch": "^4.4",
"symfony/var-dumper": "^4.4",
"vimeo/psalm": "^4.30.0"
"vimeo/psalm": "^4.30.0",
"zenstruck/foundry": "^1.36"
},
"conflict": {
"symfony/symfony": "*"

View File

@@ -78,6 +78,10 @@
<listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" />
</listeners>
<extensions>
<extension class="DAMA\DoctrineTestBundle\PHPUnit\PHPUnitExtension" />
</extensions>
<!-- Run `composer require symfony/panther` before enabling this extension -->
<!--
<extensions>

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);
}
}