/**
  * @param PageEleveurBranch|null $branch
  * @return PageEleveur
  */
 private function fromBranch(PageEleveurBranch $branch = null)
 {
     $pageEleveur = new PageEleveur();
     $pageEleveur->setId($branch->getId());
     $pageEleveur->setOwner($branch->getOwner());
     $pageEleveur->setSlug($branch->getSlug());
     $pageEleveur->setHead($branch->getCommit()->getId());
     $pageEleveur->setNom($branch->getCommit()->getNom());
     $pageEleveur->setDescription($branch->getCommit()->getDescription());
     $pageEleveur->setEspeces($branch->getCommit()->getEspeces());
     $pageEleveur->setRaces($branch->getCommit()->getRaces());
     $pageEleveur->setLieu($branch->getCommit()->getLieu());
     /*
      * Le tri permet de retourner une PE dans le bon ordre même si
      * le commit a été fait dans un mauvais ordre.
      */
     $arrayCollection = $branch->getCommit()->getAnimaux()->toArray();
     usort($arrayCollection, function (PageAnimalBranch $a, PageAnimalBranch $b) {
         return $b->getCreatedAt()->getTimestamp() - $a->getCreatedAt()->getTimestamp();
     });
     $animaux = [];
     /** @var PageAnimalBranch $pageAnimalBranch */
     foreach ($arrayCollection as $pageAnimalBranch) {
         $animaux[] = PageAnimalService::fromBranch($pageAnimalBranch);
     }
     $pageEleveur->setAnimaux($animaux);
     $actualites = $branch->getCommit()->getActualites()->toArray();
     usort($actualites, function (Actualite $a, Actualite $b) {
         return $b->getDate()->getTimestamp() - $a->getDate()->getTimestamp();
     });
     $pageEleveur->setActualites($actualites);
     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());
 }