Skip to content
Snippets Groups Projects
Commit de48e414 authored by Camille Simiand's avatar Camille Simiand Committed by Sebastien
Browse files

Fix open/close principle on capsulePersistentFactory and userPersistentFactory

parent a8017d3d
No related branches found
No related tags found
3 merge requests!43tuleap-83-access-my-capsules,!42Draft: access-my-capsules-conflicts-fixed,!40Draft: Tuleap 83 access my capsules
<?php
namespace App\DataFixtures;
use App\Entity\Capsule;
use DateTime;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
class AppCapsuleFixtures extends Fixture
{
public function load(ObjectManager $manager): void
{
$this->createCapsuleWithData(
$manager,
2,
new DateTime(),
'https://youtu.be/oPmMUZbnc3o',
'Adele',
'',
null,
null
);
$this->createCapsuleWithData(
$manager,
2,
new DateTime(),
'https://youtu.be/-xulsY5AGew',
'Pomme',
'',
null,
null
);
$manager->flush();
}
private function createCapsuleWithData(
ObjectManager $manager,
int $author,
DateTime $date_time,
string $link,
string $name,
string $edition_link,
?int $update_author,
?DateTime $update_datetime
): void {
$capsule = new Capsule();
$capsule->setCreationauthor($author);
$capsule->setCreationdate($date_time);
$capsule->setVideourl($link);
$capsule->setEditionLink($edition_link);
$capsule->setNom($name);
$capsule->setUpdateauthor($update_author);
$capsule->setUpdatedDateTime($update_datetime);
$manager->persist($capsule);
}
}
......@@ -3,7 +3,6 @@
namespace App\DataFixtures;
use App\Builder\CapsuleBuilder;
use App\Entity\Capsule;
use App\Entity\User;
use DateTime;
use Doctrine\Bundle\FixturesBundle\Fixture;
......@@ -13,10 +12,10 @@ use Symfony\Component\Uid\Uuid;
class CapsuleFixtures extends Fixture implements DependentFixtureInterface
{
public function load(ObjectManager $manager): void
{
$user_repository = $manager->getRepository(User::class);
$verified_user1 = $user_repository->findOneBy(['email' => "defaultUser@localhost.com"]);
if (! $verified_user1 instanceof User) {
......@@ -30,54 +29,64 @@ class CapsuleFixtures extends Fixture implements DependentFixtureInterface
}
$new_date_time = new DateTime();
$uuid_first_capsule = Uuid::v4();
$uuid_second_capsule = Uuid::v4();
$this->createCapsule(
$manager,
"Pomme",
$persistent_capsule_factory = $this->createCapsulePersistentFactory($manager);
$persistent_capsule_factory(
function (CapsuleBuilder $builder) use (
$verified_user1,
$new_date_time,
$uuid_first_capsule,
$uuid_first_capsule . '/?p=edit',
$new_date_time
) {
$uuid = Uuid::v4();
$builder
->withName("Pomme")
->withCreationAuthor($verified_user1)
->withCreationDate($new_date_time)
->withUpdateDate($new_date_time)
->withPreviewLink($uuid)
->withEditionLink($uuid . '/?p=edit');
}
);
$this->createCapsule(
$manager,
"Adele",
$persistent_capsule_factory(
function (CapsuleBuilder $builder) use (
$verified_user2,
$new_date_time,
$uuid_second_capsule,
$uuid_second_capsule . '/?p=edit',
$new_date_time
) {
$uuid = Uuid::v4();
$builder
->withName("Adele")
->withCreationAuthor($verified_user2)
->withCreationDate($new_date_time)
->withUpdateDate($new_date_time)
->withPreviewLink($uuid)
->withEditionLink($uuid . '/?p=edit');
}
);
$manager->flush();
}
private function createCapsule(
ObjectManager $manager,
string $name,
User $creation_author,
DateTime $creation_date,
string $preview_link,
string $edition_link,
DateTime $update_date
): Capsule {
$capsule_builder = new CapsuleBuilder();
$capsule = $capsule_builder
->withName($name)
->withCreationAuthor($creation_author)
->withCreationDate($creation_date)
->withPreviewLink($preview_link)
->withEditionLink($edition_link)
->withUpdateDate($update_date)
->createCapsule();
$manager->persist($capsule);
return $capsule;
/**
* Create a capsule using the callable parameter, save the result within the ObjectManage,
* then return the created capsule.
* @param ObjectManager $manager
* @return callable function(callable $builderAction): void { ... }
* <ul>
* <li>The $builderAction should take one parameter of type CapsuleBuilder</li>
* </ul>
*/
private function createCapsulePersistentFactory(ObjectManager $manager): callable
{
return function (callable $builderAction) use ($manager) {
$capsuleBuilder = new CapsuleBuilder();
$builderAction($capsuleBuilder);
$newCapsule = $capsuleBuilder->createCapsule();
$manager->persist($newCapsule);
return $newCapsule;
};
}
public function getDependencies(): array
......
......@@ -19,57 +19,65 @@ class UserFixtures extends Fixture
public function load(ObjectManager $manager): void
{
$this->createUser(
$manager,
"notVerified@localhost.com",
"Bob",
"Smith",
'password',
false
$persistent_user_factory = $this->createUserPersistentFactory($manager);
$persistent_user_factory(
function (UserBuilder $builder) {
return $builder->withEmail("notVerified@localhost.com")
->withFirstName("Bob")
->withLastName("Smith")
->withSalt("")
->withPassword('password')
->withRoles([])
->withIsVerified(false);
}
);
$this->createUser(
$manager,
"defaultUser@localhost.com",
"Alice",
"Rango",
'password',
true
$persistent_user_factory(
function (UserBuilder $builder) {
return $builder->withEmail("defaultUser@localhost.com")
->withFirstName("Alice")
->withLastName("Rango")
->withSalt("")
->withPassword('password')
->withRoles([])
->withIsVerified(true);
}
);
$this->createUser(
$manager,
"defaultUser2@localhost.com",
"John",
"Doe",
'password',
true
$persistent_user_factory(
function (UserBuilder $builder) {
return $builder->withEmail("defaultUser2@localhost.com")
->withFirstName("John")
->withLastName("Doe")
->withSalt("")
->withPassword('password')
->withRoles([])
->withIsVerified(true);
}
);
$manager->flush();
}
private function createUser(
ObjectManager $manager,
string $email,
string $first_name,
string $last_name,
string $password,
bool $is_verified
): User {
$user_builder = new UserBuilder($this->password_hasher);
$user = $user_builder
->withEmail($email)
->withFirstName($first_name)
->withLastName($last_name)
->withSalt("")
->withPassword($password)
->withRoles(["ROLE_USER"])
->withIsVerified($is_verified)
->createUser();
/**
* Create a user using the callable parameter, save the result within the ObjectManage then return the created user.
* @param ObjectManager $manager
* @return callable function(callable $userFactory): void { ... }
* <ul>
* <li>The $userFactory should take one parameter of type UserBuilder</li>
* </ul>
*/
private function createUserPersistentFactory(ObjectManager $manager): callable
{
return function (callable $userBuilderAction) use ($manager): User {
$userBuilder = new UserBuilder($this->password_hasher);
$userBuilderAction($userBuilder);
$newUser = $userBuilder->createUser();
$manager->persist($user);
$manager->persist($newUser);
return $user;
return $newUser;
};
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment