From: Raphaël Gertz <git@rapsys.eu>
Date: Thu, 31 Oct 2024 06:04:05 +0000 (+0100)
Subject: Add bundle fixture
X-Git-Tag: 0.5.1~4
X-Git-Url: https://git.rapsys.eu/userbundle/commitdiff_plain/408e3d492050ac34f994b6865bb3f8bac5dec044

Add bundle fixture
---

diff --git a/Fixture/UserFixture.php b/Fixture/UserFixture.php
new file mode 100644
index 0000000..01a7e8a
--- /dev/null
+++ b/Fixture/UserFixture.php
@@ -0,0 +1,107 @@
+<?php declare(strict_types=1);
+
+/*
+ * This file is part of the Rapsys UserBundle package.
+ *
+ * (c) Raphaël Gertz <symfony@rapsys.eu>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Rapsys\UserBundle\Fixture;
+
+use Doctrine\Bundle\FixturesBundle\Fixture;
+use Doctrine\Persistence\ObjectManager;
+
+use Rapsys\UserBundle\RapsysUserBundle;
+
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
+
+/**
+ * {@inheritdoc}
+ */
+class UserFixture extends Fixture {
+	/**
+	 * Config array
+	 */
+	protected array $config;
+
+	/**
+	 * Air fixtures constructor
+	 */
+	public function __construct(protected ContainerInterface $container, protected UserPasswordHasherInterface $hasher) {
+		//Retrieve config
+		$this->config = $container->getParameter(RapsysUserBundle::getAlias());
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	public function load(ObjectManager $manager) {
+		//Civility tree
+		$civilityTree = [
+			'Mister',
+			'Madam',
+			'Miss'
+		];
+
+		//Create titles
+		$civilitys = [];
+		foreach($civilityTree as $civilityData) {
+			$civility = new $this->config['class']['civility']($civilityData);
+			$manager->persist($civility);
+			$civilitys[$civilityData] = $civility;
+			unset($civility);
+		}
+
+		//Group tree
+		//XXX: ROLE_XXX is required by
+		$groupTree = [
+			'Guest',
+			'User',
+			'Admin'
+		];
+
+		//Create groups
+		$groups = [];
+		foreach($groupTree as $groupData) {
+			$group = new $this->config['class']['group']($groupData);
+			$manager->persist($group);
+			$groups[$groupData] = $group;
+			unset($group);
+		}
+
+		//Flush to get the ids
+		$manager->flush();
+
+		//User tree
+		$userTree = [
+			[
+				'civility' => 'Mister',
+				'group' => 'Admin',
+				'mail' => 'admin@example.com',
+				'forename' => 'Forename',
+				'surname' => 'Surname',
+				'password' => 'test',
+				'active' => true
+			]
+		];
+
+		//Create users
+		$users = [];
+		foreach($userTree as $userData) {
+			$user = new $this->config['class']['user']($userData['mail'], $userData['password'], $civilitys[$userData['civility']], $userData['forename'], $userData['surname'], $userData['active']);
+			#TODO: check that password is hashed correctly !!!
+			$user->setPassword($this->hasher->hashPassword($user, $userData['password']));
+			$user->addGroup($groups[$userData['group']]);
+			$manager->persist($user);
+			$users[] = $user;
+			unset($user);
+		}
+
+		//Flush to get the ids
+		$manager->flush();
+	}
+}