Create Factories
This commit is contained in:
@@ -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),
|
||||
|
||||
@@ -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()));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user