Example #1
0
 public function addAnimal()
 {
     /** @var PageAnimalService $pageAnimalService */
     $pageAnimalService = $this->client->getContainer()->get('zigotoo.page_animal');
     if (count($this->pageEleveur->getAnimaux()) === 0) {
         $this->pageEleveur->setAnimaux([]);
     }
     $animaux = $this->pageEleveur->getAnimaux();
     array_push($animaux, $pageAnimalService->create($this->user));
     $this->pageEleveur->setAnimaux($animaux);
     /** @var PageEleveurService $pageEleveurService */
     $pageEleveurService = $this->client->getContainer()->get('zigotoo.page_eleveur');
     $this->pageEleveur = $pageEleveurService->commit($this->user, $this->pageEleveur);
     return $this;
 }
Example #2
0
 /**
  * @param User $user
  * @param PageEleveur $commitingPageEleveur
  * @return PageEleveur
  * @throws HistoryException
  */
 public function commit(User $user, PageEleveur $commitingPageEleveur)
 {
     /** @var PageEleveurCommit $clientHead */
     $clientHead = $this->pageEleveurCommitRepository->find($commitingPageEleveur->getHead());
     /** @var PageEleveurBranch $pageEleveurBranch */
     $pageEleveurBranch = $this->pageEleveurBranchRepository->find($commitingPageEleveur->getId());
     if (!$pageEleveurBranch || !$clientHead) {
         throw new HistoryException(HistoryException::BRANCHE_INCONNUE);
     }
     if ($pageEleveurBranch->getOwner()->getId() !== $user->getId()) {
         throw new HistoryException(HistoryException::DROIT_REFUSE);
     }
     if ($clientHead->getId() !== $pageEleveurBranch->getCommit()->getId()) {
         throw new HistoryException(HistoryException::NON_FAST_FORWARD);
     }
     $managedActialites = [];
     if ($commitingPageEleveur->getActualites() !== null) {
         foreach ($commitingPageEleveur->getActualites() as $actualite) {
             if ($actualite->hashCode() !== $actualite->getId()) {
                 // l'actualité a été modifiée, on doit persister la nouvelle version
                 $this->doctrine->persist($actualite);
             } else {
                 // L'actualité n'a pas changé
                 $actualite = $this->doctrine->merge($actualite);
             }
             array_push($managedActialites, $actualite);
         }
     }
     $newCommit = new PageEleveurCommit($clientHead, $commitingPageEleveur->getNom(), $commitingPageEleveur->getDescription(), $commitingPageEleveur->getEspeces(), $commitingPageEleveur->getRaces(), $commitingPageEleveur->getLieu(), $commitingPageEleveur->getAnimaux() !== null ? array_map(function (PageAnimal $pageAnimal) use($user) {
         if ($pageAnimal->getOwner()->getId() !== $user->getId()) {
             throw new HistoryException(HistoryException::DROIT_REFUSE);
         }
         return $this->pageAnimalBranchRepository->find($pageAnimal->getId());
     }, $commitingPageEleveur->getAnimaux()) : [], $managedActialites);
     $this->doctrine->persist($newCommit);
     $pageEleveurBranch->setCommit($newCommit);
     $this->doctrine->flush([$newCommit, $pageEleveurBranch]);
     $pageEleveur = $this->fromBranch($this->findAtCommit($commitingPageEleveur->getId(), $newCommit->getId()));
     return $pageEleveur;
 }
 public function testOrdre_Actualite()
 {
     // Mock d'une page eleveur en base de données
     $user = new User();
     $user->setId(1);
     $pageEleveurBranch = new PageEleveurBranch();
     $pageEleveurBranch->setId(1);
     $pageEleveurBranch->setOwner($user);
     $this->pageEleveurBranchRepository->method('find')->withAnyParameters()->willReturn($pageEleveurBranch);
     $commit1 = $this->newCommit(1);
     $pageEleveurBranch->setCommit($commit1);
     $this->pageEleveurCommitRepository->method('find')->withAnyParameters()->willReturn($commit1);
     //Simulation d'une requete de commit
     $pageEleveur = new PageEleveur();
     $pageEleveur->setId($pageEleveurBranch->getId());
     $pageEleveur->setHead($commit1->getId());
     // Les actu sont commités dans le mauvais ordre
     $pageEleveur->setActualites([new Actualite('actu 1', new \DateTime()), new Actualite('actu 2', (new \DateTime())->add(new \DateInterval('P2D')))]);
     $pageEleveur = $this->pageEleveurService->commit($user, $pageEleveur);
     // commit() doit retourner les actu dans le bon ordre
     $this->assertEquals('actu 2', $pageEleveur->getActualites()[0]->getContenu());
     $this->assertEquals('actu 1', $pageEleveur->getActualites()[1]->getContenu());
 }
 public function testCommit_BrancheInconnue()
 {
     $this->testUtils->createUser();
     $fakePageEleveur = new PageEleveur();
     $fakePageEleveur->setId(-1);
     $fakePageEleveur->setHead(-1);
     $this->client->request('POST', '/commit-page-eleveur', array(), array(), array(), $this->serializer->serialize($fakePageEleveur, 'json'));
     $this->assertEquals(Response::HTTP_NOT_FOUND, $this->client->getResponse()->getStatusCode());
 }