From e29f03a55fae10c69fb0ba0015b291bdf775abad Mon Sep 17 00:00:00 2001 From: "cleo.eiras" Date: Tue, 3 Jun 2025 08:58:38 +0200 Subject: [PATCH 1/4] forcer version php --- .php-version | 1 + 1 file changed, 1 insertion(+) create mode 100644 .php-version diff --git a/.php-version b/.php-version new file mode 100644 index 0000000..223a939 --- /dev/null +++ b/.php-version @@ -0,0 +1 @@ +8.3 \ No newline at end of file From edc8730198e19187c285564f0f3ed2e4862761f1 Mon Sep 17 00:00:00 2001 From: "cleo.eiras" Date: Tue, 3 Jun 2025 09:12:42 +0200 Subject: [PATCH 2/4] Fonction pour ajouter des emojis facilement --- src/Controller/EmojiController.php | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/Controller/EmojiController.php b/src/Controller/EmojiController.php index 02c0434..10bdc40 100644 --- a/src/Controller/EmojiController.php +++ b/src/Controller/EmojiController.php @@ -33,6 +33,34 @@ class EmojiController extends AbstractController ]); } + #[Route('/add/{code}', name: 'add')] + public function addEmojiDebug(string $code, EntityManagerInterface $entityManager) { + $emoji = new Emoji(); + $emoji->setCode($code); + $emoji->setName('Default Name'); + $emoji->setStrength(1.0); + $emoji->setToughness(1.0); + $emoji->setIntelligence(1.0); + $emoji->setSpeed(1.0); + $emoji->setFightsWon(0); + + // On récupère une instance de Rarity existante (par exemple, la première) + $rarity = $this->getRarity(); + if (!$rarity) { + throw new \RuntimeException('Aucun objet Rarity trouvé en base.'); + } + $emoji->setRarity($rarity); + + // Optionnel : définir parent1 et parent2 si tu veux tester avec des relations + // $emoji->setParent1(null); + // $emoji->setParent2(null); + + $entityManager->persist($emoji); + $entityManager->flush(); + + return new Response(); + } + private function getRarity(): Rarity { $rarity = $this->rarityRepository->findAll(); $rand = mt_rand() / mt_getrandmax(); From 3406dc14f42bd5e254c1e5a5cadc228d7b1f26be Mon Sep 17 00:00:00 2001 From: "cleo.eiras" Date: Tue, 3 Jun 2025 09:29:09 +0200 Subject: [PATCH 3/4] Commande pour peupler la db --- src/Command/PopulateDBCommand.php | 62 +++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/Command/PopulateDBCommand.php diff --git a/src/Command/PopulateDBCommand.php b/src/Command/PopulateDBCommand.php new file mode 100644 index 0000000..2d06d1a --- /dev/null +++ b/src/Command/PopulateDBCommand.php @@ -0,0 +1,62 @@ +connection = $connection; + } + + protected function configure() + { + $this + ->setDescription('Populate the database.'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + try { + + // On supprime la table si elle existe déjà + $this->connection->executeStatement('DROP TABLE IF EXISTS rarity'); + + // On crée la table + $this->connection->executeStatement(' + CREATE TABLE rarity ( + id INT PRIMARY KEY, + name VARCHAR(255) NOT NULL, + drop_rate FLOAT NOT NULL + ) + '); + + // On peuple la table + $this->connection->executeStatement("INSERT INTO rarity (id, name, drop_rate) VALUES + (1, 'Common', 0.6), + (2, 'Rare', 0.2), + (3, 'Epic', 0.1), + (4, 'Mythical', 0.085), + (5, 'Legendary', 0.015) + "); + + $output->writeln('Base de données peuplée.'); + } catch (\Exception $e) { + $output->writeln('Erreur : ' . $e->getMessage() . ''); + return Command::FAILURE; + } + + return Command::SUCCESS; + } +} From f727fc819d5ffc4aa2c003be32d2800adb74d1c7 Mon Sep 17 00:00:00 2001 From: "cleo.eiras" Date: Thu, 5 Jun 2025 09:40:52 +0200 Subject: [PATCH 4/4] WIP tests unitaires --- config/services.yaml | 4 ++ src/Controller/EmojiController.php | 7 ++ tests/Controller/EmojiControllerTest.php | 89 ++++++++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 tests/Controller/EmojiControllerTest.php diff --git a/config/services.yaml b/config/services.yaml index 2d6a76f..b4300e0 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -6,6 +6,10 @@ parameters: services: + App\Repository\RarityRepository: + public: true + App\Repository\EmojiRepository: + public: true # default configuration for services in *this* file _defaults: autowire: true # Automatically injects dependencies in your services. diff --git a/src/Controller/EmojiController.php b/src/Controller/EmojiController.php index 10bdc40..5a8da9d 100644 --- a/src/Controller/EmojiController.php +++ b/src/Controller/EmojiController.php @@ -33,6 +33,13 @@ class EmojiController extends AbstractController ]); } + #[Route('/count', name: 'count')] + public function count(EmojiRepository $emojiRepository): Response + { + $count = count($emojiRepository->findAll()); + return new Response(['count' => $count]); + } + #[Route('/add/{code}', name: 'add')] public function addEmojiDebug(string $code, EntityManagerInterface $entityManager) { $emoji = new Emoji(); diff --git a/tests/Controller/EmojiControllerTest.php b/tests/Controller/EmojiControllerTest.php new file mode 100644 index 0000000..a576786 --- /dev/null +++ b/tests/Controller/EmojiControllerTest.php @@ -0,0 +1,89 @@ +client = static::createClient(); + $this->em = static::getContainer()->get(EntityManagerInterface::class); + + // Démarre une transaction pour pouvoir annuler les modifications des tests + $this->em->getConnection()->beginTransaction(); + } + + protected function tearDown(): void + { + // Rollback la transaction pour annuler les changements des tests + $this->em->getConnection()->rollBack(); + parent::tearDown(); + } + + public function testReproduceEmoji(): void + { + $emoji1 = (new Emoji()) + ->setCode('😀') + ->setName('Parent1') + ->setStrength(1.0) + ->setToughness(1.0) + ->setIntelligence(1.0) + ->setSpeed(1.0) + ->setFightsWon(5); + + $emoji2 = (new Emoji()) + ->setCode('😎') + ->setName('Parent2') + ->setStrength(2.0) + ->setToughness(2.0) + ->setIntelligence(2.0) + ->setSpeed(2.0) + ->setFightsWon(3); + + $rarity = (new Rarity()) + ->setName('Rare') + ->setDropRate(1.0); + + $this->em->persist($rarity); + $this->em->persist($emoji1); + $this->em->persist($emoji2); + $this->em->flush(); + + $id1 = $emoji1->getId(); + $id2 = $emoji2->getId(); + + $this->client->request('GET', "/emoji/fusion/$id1/$id2"); + + $response = $this->client->getResponse(); + $this->assertEquals(Response::HTTP_OK, $response->getStatusCode()); + + $data = json_decode($response->getContent(), true); + $this->assertArrayHasKey('childId', $data); + $this->assertEquals('Child created', $data['message']); + } + + public function testFusionEmojiNotFound(): void + { + $emojiRepo = $this->createMock(EmojiRepository::class); + $emojiRepo->method('find')->willReturn(null); + + $this->client->request('GET', '/emoji/fusion/999/998'); + + $response = $this->client->getResponse(); + $this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode()); + + $data = json_decode($response->getContent(), true); + $this->assertEquals('One or both emojis not found', $data['error']); + } +}