Create Factories

This commit is contained in:
cmorenov1402
2025-03-28 11:30:32 +01:00
parent ae0ea7b0b3
commit 9052262a00
3 changed files with 25 additions and 32 deletions
+7 -5
View File
@@ -6,6 +6,7 @@ use App\Entity\Project\Category;
use App\Entity\Project\Project;
use App\Entity\Project\ProjectDeadline;
use App\Entity\Project\ProjectStatus;
use App\Entity\Project\ProjectTerritory;
use App\Factory\User\UserFactory;
use Zenstruck\Foundry\Persistence\PersistentProxyObjectFactory;
@@ -35,13 +36,14 @@ final class ProjectFactory extends PersistentProxyObjectFactory
{
return [
'category' => self::faker()->randomElement(Category::cases()),
'dateCreated' => self::faker()->dateTime(),
'dateUpdated' => self::faker()->dateTime(),
// 'dateCreated' => self::faker()->dateTime(),
// 'dateUpdated' => self::faker()->dateTime(),
'deadline' => self::faker()->randomElement(ProjectDeadline::cases()),
'description' => self::faker()->text(),
'locales' => [],
'migrated' => self::faker()->boolean(),
'owner' => UserFactory::new(),
'territory' => new ProjectTerritory('ES'),
// 'locales' => [],
// 'migrated' => self::faker()->boolean(),
'owner' => UserFactory::createOne(),
'status' => self::faker()->randomElement(ProjectStatus::cases()),
'subtitle' => self::faker()->text(255),
'title' => self::faker()->text(255),
+9 -21
View File
@@ -4,6 +4,7 @@ namespace App\Factory\User;
use App\Entity\User\User;
use App\Entity\User\UserType;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Zenstruck\Foundry\Persistence\PersistentProxyObjectFactory;
/**
@@ -11,46 +12,33 @@ use Zenstruck\Foundry\Persistence\PersistentProxyObjectFactory;
*/
final class UserFactory extends PersistentProxyObjectFactory
{
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#factories-as-services
*
* @todo inject services if required
*/
public function __construct() {}
public function __construct(private UserPasswordHasherInterface $passwordHasher) {}
public static function class(): string
{
return User::class;
}
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories
*
* @todo add your default values here
*/
protected function defaults(): array|callable
{
return [
'active' => self::faker()->boolean(),
'dateCreated' => self::faker()->dateTime(),
'dateUpdated' => self::faker()->dateTime(),
'email' => self::faker()->text(255),
'email' => self::faker()->email(),
'emailConfirmed' => self::faker()->boolean(),
'handle' => self::faker()->text(255),
'handle' => self::faker()->userName(),
'migrated' => self::faker()->boolean(),
'password' => self::faker()->text(),
'password' => self::faker()->password(),
'roles' => [],
'type' => self::faker()->randomElement(UserType::cases()),
'type' => UserType::Individual,
];
}
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#initialization
*/
protected function initialize(): static
{
return $this
// ->afterInstantiate(function(User $user): void {})
;
return $this->afterInstantiate(function (User $user) {
$user->setPassword($this->passwordHasher->hashPassword($user, $user->getPassword()));
});
}
}
+9 -6
View File
@@ -12,11 +12,13 @@ use App\Entity\Project\ProjectTerritory;
use App\Entity\User\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Response;
use Zenstruck\Foundry\Test\Factories;
use Zenstruck\Foundry\Test\ResetDatabase;
abstract class BaseTest extends ApiTestCase
{
use ResetDatabase;
use Factories;
protected EntityManagerInterface $entityManager;
private const USER_EMAIL = 'testuser@example.com';
@@ -47,11 +49,13 @@ abstract class BaseTest extends ApiTestCase
return self::BASE_URI.$param;
}
protected function createTestUser(): User
{
protected function createTestUser(
string $handle = 'test_user',
string $email = self::USER_EMAIL,
): User {
$user = new User();
$user->setHandle('test_user');
$user->setEmail(self::USER_EMAIL);
$user->setHandle($handle);
$user->setEmail($email);
$passwordHasher = static::getContainer()->get('security.user_password_hasher');
$user->setPassword($passwordHasher->hashPassword($user, self::USER_PASSWORD));
@@ -179,8 +183,7 @@ abstract class BaseTest extends ApiTestCase
protected function testForbidden(): void
{
$otherUser = $this->createTestUser()
->setHandle('other_user')->setEmail('otheruser@example.com');
$otherUser = $this->createTestUser('other_user', 'otheruser@example.com');
$otherProject = $this->createTestProject()->setOwner($otherUser);
$this->entityManager->persist($otherProject);
$this->prepareTestUser();