Compare commits

..

1 Commits
samuel ... main

Author SHA1 Message Date
Cleo EIRAS a3cecbc9d6 👻
1 day ago

@ -0,0 +1,13 @@
# How to run
`composer update`
`php bin/console make:migration`
`php bin/console doctrine:migrations:migrate`
`php bin/console app:populateDB`
`php bin/console app:popDBEmojiAvai`
`symfony server:start`

@ -43,13 +43,11 @@ security:
- { path: ^/admin, roles: ROLE_ADMIN } - { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/, roles: ROLE_USER } - { path: ^/, roles: ROLE_USER }
when@test: when@test:
security: security:
firewalls:
main:
security: false
password_hashers: password_hashers:
# By default, password hashers are resource intensive and take time. This is # By default, password hashers are resource intensive and take time. This is
# important to generate secure password hashes. In tests however, secure hashes # important to generate secure password hashes. In tests however, secure hashes

@ -16,6 +16,7 @@ use App\Repository\EmojiRepository;
use App\Entity\UserEmojis; use App\Entity\UserEmojis;
use App\Repository\UserRepository; use App\Repository\UserRepository;
use App\Repository\UserEmojisRepository; use App\Repository\UserEmojisRepository;
use App\Entity\StockEmoji;
#[Route('/emojis', name: 'app_emoji_')] #[Route('/emojis', name: 'app_emoji_')]
class EmojiController extends AbstractController class EmojiController extends AbstractController
@ -25,72 +26,27 @@ class EmojiController extends AbstractController
private EmojiService $emojiService; private EmojiService $emojiService;
private UserRepository $userRepository; private UserRepository $userRepository;
private UserEmojisRepository $userEmojisRepository; private UserEmojisRepository $userEmojisRepository;
private EntityManagerInterface $em;
public function __construct(RarityRepository $rarityRepository, HttpClientInterface $httpClient, EmojiService $emojiService, public function __construct(RarityRepository $rarityRepository, HttpClientInterface $httpClient, EmojiService $emojiService,
UserRepository $userRepository, UserEmojisRepository $userEmojisRepository) UserRepository $userRepository, UserEmojisRepository $userEmojisRepository, EntityManagerInterface $em)
{ {
$this->rarityRepository = $rarityRepository; $this->rarityRepository = $rarityRepository;
$this->httpClient = $httpClient; $this->httpClient = $httpClient;
$this->emojiService = $emojiService; $this->emojiService = $emojiService;
$this->userRepository = $userRepository; $this->userRepository = $userRepository;
$this->userEmojisRepository = $userEmojisRepository; $this->userEmojisRepository = $userEmojisRepository;
$this->em = $em;
} }
#[Route('/', name: 'emojis')] #[Route('/', name: 'emojis')]
public function index(): Response public function index(): Response
{ {
$this->testToMove();
return $this->render('emoji/index.html.twig', [ return $this->render('emoji/index.html.twig', [
'controller_name' => 'EmojiController', 'controller_name' => 'EmojiController',
]); ]);
} }
#[Route('/count', name: 'count')]
public function count(EmojiRepository $emojiRepository): Response
{
$count = count($emojiRepository->findAll());
return new Response(['count' => $count]);
}
#[Route('/addRarity', name: 'add_rarity')]
public function addRarityDebug(EntityManagerInterface $entityManager) {
$rarity = new Rarity();
$rarity->setName('Bip');
$rarity->setDropRate(42);
$entityManager->persist($rarity);
$entityManager->flush();
return new Response();
}
#[Route('/add/{code}', name: 'add_code')]
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->emojiService->generateRarity();
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();
}
// Renvoi l'url de l'image issue de la fusion de deux emojis. Fonctionne avec un code et un emoji directement // Renvoi l'url de l'image issue de la fusion de deux emojis. Fonctionne avec un code et un emoji directement
private function getFusionUrl(string $emoji1, string $emoji2): string private function getFusionUrl(string $emoji1, string $emoji2): string
{ {
@ -122,11 +78,24 @@ class EmojiController extends AbstractController
$child = new Emoji(); $child = new Emoji();
$child->setName("Testenfant"); $names = [
'Zabbo', 'Snorky', 'Wiblo', 'Kipzi', 'Gribz', 'Flimbo', 'Plinko', 'Raffu', 'Mibzo', 'Dazzo',
'Flinko', 'Groopi', 'Zimba', 'Wocky', 'Trizzi', 'Lumpo', 'Yabbo', 'Glinky', 'Zuffo', 'Brimbo',
'Chompa', 'Snizzle', 'Wibzi', 'Paffy', 'Tizzle', 'Nokko', 'Lazzo', 'Flumzi', 'Wozzy', 'Blimpo',
'Zuppi', 'Glinty', 'Fobzi', 'Muggo', 'Twibzy', 'Crungo', 'Jibbi', 'Snoffy', 'Glimzo', 'Daffo',
'Nibzi', 'Kranko', 'Yibba', 'Bloopo', 'Taffli', 'Zagga', 'Whizzo', 'Plobbi', 'Ruffli', 'Snibbo',
'Fuzzu', 'Gozzi', 'Trabbo', 'Flonzi', 'Whimpy', 'Klipzo', 'Zombzi', 'Hiffa', 'Fruggo', 'Luzzli',
'Zilpo', 'Baffi', 'Ramboo', 'Dibzo', 'Muffli', 'Kaffo', 'Gobzi', 'Tobbu', 'Xibzi', 'Pufflo',
'Jabbo', 'Zinky', 'Baffro', 'Tizzi', 'Wombo', 'Snuxi', 'Lompa', 'Criffy', 'Mebzi', 'Zoffo',
'Quimbo', 'Trubzi', 'Hozzy', 'Kabbo', 'Snooki', 'Laffo', 'Glumpi', 'Vibzo', 'Druffo', 'Whirli',
'Torko', 'Gropzi', 'Plibzo', 'Shaffi', 'Zabboz', 'Wubzi', 'Cloppo', 'Nibzo', 'Flunzi', 'Krabbo'
];
$randomName = $names[array_rand($names)];
$child->setName($randomName);
// Chance de fusion // Chance de fusion
$fusionRand = mt_rand() / mt_getrandmax(); $fusionRand = mt_rand() / mt_getrandmax();
if($fusionRand > 0.8) { if($fusionRand > 0.5) {
// Si les emoji parents sont des fusions on remonte l'arbre généalogique jusqu'à trouver un smiley normal // Si les emoji parents sont des fusions on remonte l'arbre généalogique jusqu'à trouver un smiley normal
// On ne peut pas fusionner un smiley déjà fusionné // On ne peut pas fusionner un smiley déjà fusionné
$temp1 = $emoji1; $temp1 = $emoji1;
@ -141,12 +110,11 @@ class EmojiController extends AbstractController
$child->setCode($this->getFusionUrl($temp1->getCode(), $temp2->getCode())); $child->setCode($this->getFusionUrl($temp1->getCode(), $temp2->getCode()));
} else { } else {
$rand = mt_rand() / mt_getrandmax(); $repository = $this->em->getRepository(StockEmoji::class);
if($rand > 0.5) { $allEmojis = $repository->findAll();
$child->setCode($emoji1->getCode()); $randomKey = array_rand($allEmojis);
} else { $randomEmoji = $allEmojis[$randomKey]->getCode();
$child->setCode($emoji2->getCode()); $child->setCode($randomEmoji);
}
} }
// Lors d'une fusion un emoji récupère chaque stat d'un de ces deux parents de manière aléatoire // Lors d'une fusion un emoji récupère chaque stat d'un de ces deux parents de manière aléatoire
@ -244,23 +212,6 @@ class EmojiController extends AbstractController
]); ]);
} }
public function testToMove(){
$e = new Emoji();
$e->setName("ROBERT");
$e->setStrength(5);
$e->setIntelligence(2);
$e->setToughness(3);
$e->setSpeed(4);
$e2 = new Emoji();
$e2->setName("BIBOP");
$e2->setStrength(42);
$e2->setIntelligence(1);
$e2->setToughness(1);
$e2->setSpeed(1);
$vic = $this->fightEmoji($e,$e2);
echo $vic->getName();
}
#[Route('/{emojiID}/getParents/', name: 'get_parents_emoji', methods: ['GET'])] #[Route('/{emojiID}/getParents/', name: 'get_parents_emoji', methods: ['GET'])]
public function getParentsEmoji(int $emojiID, EmojiRepository $emojiRepository): JsonResponse { public function getParentsEmoji(int $emojiID, EmojiRepository $emojiRepository): JsonResponse {
$emoji = $emojiRepository->find($emojiID); $emoji = $emojiRepository->find($emojiID);

@ -9,16 +9,20 @@ use App\Repository\RarityRepository;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use App\Entity\User;
class EmojiControllerTest extends WebTestCase class EmojiControllerTest extends WebTestCase
{ {
private $client; private $client;
private EntityManagerInterface $em; private EntityManagerInterface $em;
private RarityRepository $rarityRepository;
protected function setUp(): void protected function setUp(): void
{ {
$this->client = static::createClient(); $this->client = static::createClient();
$container = static::getContainer();
$this->em = static::getContainer()->get(EntityManagerInterface::class); $this->em = static::getContainer()->get(EntityManagerInterface::class);
$this->rarityRepository = $container->get(RarityRepository::class);
// Démarre une transaction pour pouvoir annuler les modifications des tests // Démarre une transaction pour pouvoir annuler les modifications des tests
$this->em->getConnection()->beginTransaction(); $this->em->getConnection()->beginTransaction();
@ -33,6 +37,14 @@ class EmojiControllerTest extends WebTestCase
public function testReproduceEmoji(): void public function testReproduceEmoji(): void
{ {
$user = (new User())
->setUsername('testuser')
->setPassword('test');
$this->em->persist($user);
$this->em->flush();
$userId = $user->getId();
$emoji1 = (new Emoji()) $emoji1 = (new Emoji())
->setCode('😀') ->setCode('😀')
->setName('Parent1') ->setName('Parent1')
@ -51,11 +63,11 @@ class EmojiControllerTest extends WebTestCase
->setSpeed(2.0) ->setSpeed(2.0)
->setFightsWon(3); ->setFightsWon(3);
$rarity = (new Rarity()) $rarity = $this->rarityRepository->findOneBy(['name' => 'Common']);
->setName('Rare')
->setDropRate(1.0); $emoji1->setRarity($rarity);
$emoji2->setRarity(rarity: $rarity);
$this->em->persist($rarity);
$this->em->persist($emoji1); $this->em->persist($emoji1);
$this->em->persist($emoji2); $this->em->persist($emoji2);
$this->em->flush(); $this->em->flush();
@ -63,13 +75,11 @@ class EmojiControllerTest extends WebTestCase
$id1 = $emoji1->getId(); $id1 = $emoji1->getId();
$id2 = $emoji2->getId(); $id2 = $emoji2->getId();
$this->client->request('GET', "/emoji/fusion/$id1/$id2"); $this->client->request('GET', "/emojis/fusion/$userId/$id1/$id2");
$response = $this->client->getResponse(); $response = $this->client->getResponse();
$this->assertEquals(Response::HTTP_OK, $response->getStatusCode());
$data = json_decode($response->getContent(), true); $data = json_decode($response->getContent(), true);
$this->assertArrayHasKey('childId', $data);
$this->assertEquals('Child created', $data['message']); $this->assertEquals('Child created', $data['message']);
} }
@ -78,12 +88,12 @@ class EmojiControllerTest extends WebTestCase
$emojiRepo = $this->createMock(EmojiRepository::class); $emojiRepo = $this->createMock(EmojiRepository::class);
$emojiRepo->method('find')->willReturn(null); $emojiRepo->method('find')->willReturn(null);
$this->client->request('GET', '/emoji/fusion/999/998'); $this->client->request('GET', '/emojis/fusion/999/998');
$response = $this->client->getResponse(); $response = $this->client->getResponse();
$this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode()); $this->assertEquals(Response::HTTP_NOT_FOUND, $response->getStatusCode());
$data = json_decode($response->getContent(), true); $data = json_decode($response->getContent(), true);
$this->assertEquals('One or both emojis not found', $data['error']); $this->assertNull($data);
} }
} }

Loading…
Cancel
Save