From 60247cd2ad7c34087c78c9f929667713c0bd1d01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Burnichon?= Date: Mon, 21 Dec 2015 18:56:37 +0100 Subject: [PATCH] Missing basket persist. --- .../Controller/Prod/BasketController.php | 33 ++++++++++------ .../Model/Manipulator/BasketManipulator.php | 12 ++++++ .../Phrasea/Controller/Prod/BasketTest.php | 38 ++++++++++--------- 3 files changed, 54 insertions(+), 29 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Prod/BasketController.php b/lib/Alchemy/Phrasea/Controller/Prod/BasketController.php index e613e401bc..ed376ca380 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/BasketController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/BasketController.php @@ -13,6 +13,7 @@ use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Controller\RecordsRequest; use Alchemy\Phrasea\Model\Entities\Basket; use Alchemy\Phrasea\Model\Entities\BasketElement; +use Alchemy\Phrasea\Model\Manipulator\BasketManipulator; use Alchemy\Phrasea\Model\Repositories\BasketElementRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\HttpFoundation\Request; @@ -49,35 +50,36 @@ class BasketController extends Controller public function createBasket(Request $request) { - $Basket = new Basket(); + $basket = new Basket(); - $Basket->setName($request->request->get('name', '')); - $Basket->setUser($this->getAuthenticatedUser()); - $Basket->setDescription($request->request->get('desc')); + $basket->setName($request->request->get('name', '')); + $basket->setUser($this->getAuthenticatedUser()); + $basket->setDescription($request->request->get('desc')); $records = RecordsRequest::fromRequest($this->app, $request, true); - $this->app['manipulator.basket']->addRecords($Basket, $records); + $manipulator = $this->getBasketManipulator(); + $manipulator->addRecords($basket, $records); + $manipulator->saveBasket($basket); if ($request->getRequestFormat() === 'json') { $data = [ 'success' => true, 'message' => $this->app->trans('Basket created'), 'basket' => [ - 'id' => $Basket->getId(), + 'id' => $basket->getId(), ] ]; return $this->app->json($data); } - return $this->app->redirectPath('prod_baskets_basket', ['basket' => $Basket->getId()]); + return $this->app->redirectPath('prod_baskets_basket', ['basket' => $basket->getId()]); } public function deleteBasket(Request $request, Basket $basket) { - $this->getEntityManager()->remove($basket); - $this->getEntityManager()->flush(); + $this->getBasketManipulator()->removeBasket($basket); $data = [ 'success' => true @@ -95,7 +97,7 @@ class BasketController extends Controller { /** @var BasketElement $basketElement */ $basketElement = $this->getEntityManager()->getRepository('Phraseanet:BasketElement')->find($basket_element_id); - $this->app['manipulator.basket']->removeElements($basket, [$basketElement]); + $this->getBasketManipulator()->removeElements($basket, [$basketElement]); $data = ['success' => true, 'message' => $this->app->trans('Record removed from basket')]; @@ -205,7 +207,7 @@ class BasketController extends Controller { $records = RecordsRequest::fromRequest($this->app, $request, true); - $elements = $this->app['manipulator.basket']->addRecords($basket, $records); + $elements = $this->getBasketManipulator()->addRecords($basket, $records); $data = [ 'success' => true, @@ -234,7 +236,6 @@ class BasketController extends Controller } $basket_element->getBasket()->removeElement($basket_element); - $basket_element->setBasket($basket); $basket->addElement($basket_element); $n++; } @@ -262,4 +263,12 @@ class BasketController extends Controller { return $this->app['orm.em']; } + + /** + * @return BasketManipulator + */ + private function getBasketManipulator() + { + return $this->app['manipulator.basket']; + } } diff --git a/lib/Alchemy/Phrasea/Model/Manipulator/BasketManipulator.php b/lib/Alchemy/Phrasea/Model/Manipulator/BasketManipulator.php index fe9dd1d6dc..6555699d10 100644 --- a/lib/Alchemy/Phrasea/Model/Manipulator/BasketManipulator.php +++ b/lib/Alchemy/Phrasea/Model/Manipulator/BasketManipulator.php @@ -106,4 +106,16 @@ class BasketManipulator $this->manager->flush(); } + + public function saveBasket(Basket $basket) + { + $this->manager->persist($basket); + $this->manager->flush(); + } + + public function removeBasket(Basket $basket) + { + $this->manager->remove($basket); + $this->manager->flush(); + } } diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Prod/BasketTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Prod/BasketTest.php index ca0d6cc66b..4db567c28f 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Prod/BasketTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Prod/BasketTest.php @@ -3,8 +3,7 @@ namespace Alchemy\Tests\Phrasea\Controller\Prod; use Alchemy\Phrasea\Application; -use Alchemy\Phrasea\Model\Entities\Basket; -use Alchemy\Phrasea\Model\Entities\BasketElement; +use Doctrine\ORM\EntityManager; /** * @group functional @@ -56,27 +55,31 @@ class BasketTest extends \PhraseanetAuthenticatedWebTestCase public function testRootPostJSON() { - $query = self::$DI['app']['orm.em']->createQuery('SELECT COUNT(b.id) FROM Phraseanet:Basket b'); + $app = $this->getApplication(); + /** @var EntityManager $entityManager */ + $entityManager = $app['orm.em']; + $query = $entityManager->createQuery('SELECT COUNT(b.id) FROM Phraseanet:Basket b'); $count = $query->getSingleScalarResult(); $route = '/prod/baskets/'; - self::$DI['client']->request( - 'POST' - , $route - , [ - 'name' => 'panier', - 'desc' => 'mon beau panier', - ] - , [] - , [ - "HTTP_ACCEPT" => "application/json" + $client = $this->getClient(); + $client->request( + 'POST', + $route, + [ + 'name' => 'panier', + 'desc' => 'mon beau panier', + ], + [], + [ + "HTTP_ACCEPT" => "application/json", ] ); - $response = self::$DI['client']->getResponse(); + $response = $client->getResponse(); - $query = self::$DI['app']['orm.em']->createQuery('SELECT COUNT(b.id) FROM Phraseanet:Basket b'); + $query = $entityManager->createQuery('SELECT COUNT(b.id) FROM Phraseanet:Basket b'); $this->assertEquals($count + 1, $query->getSingleScalarResult()); $this->assertEquals(200, $response->getStatusCode()); @@ -86,9 +89,10 @@ class BasketTest extends \PhraseanetAuthenticatedWebTestCase { $route = '/prod/baskets/create/'; - $crawler = self::$DI['client']->request('GET', $route); + $client = $this->getClient(); + $crawler = $client->request('GET', $route); - $response = self::$DI['client']->getResponse(); + $response = $client->getResponse(); $this->assertEquals(200, $response->getStatusCode()); $filter = "form[action='/prod/baskets/']";