Missing basket persist.

This commit is contained in:
Benoît Burnichon
2015-12-21 18:56:37 +01:00
parent 30b8ec66ed
commit 60247cd2ad
3 changed files with 54 additions and 29 deletions

View File

@@ -13,6 +13,7 @@ use Alchemy\Phrasea\Controller\Controller;
use Alchemy\Phrasea\Controller\RecordsRequest; use Alchemy\Phrasea\Controller\RecordsRequest;
use Alchemy\Phrasea\Model\Entities\Basket; use Alchemy\Phrasea\Model\Entities\Basket;
use Alchemy\Phrasea\Model\Entities\BasketElement; use Alchemy\Phrasea\Model\Entities\BasketElement;
use Alchemy\Phrasea\Model\Manipulator\BasketManipulator;
use Alchemy\Phrasea\Model\Repositories\BasketElementRepository; use Alchemy\Phrasea\Model\Repositories\BasketElementRepository;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@@ -49,35 +50,36 @@ class BasketController extends Controller
public function createBasket(Request $request) public function createBasket(Request $request)
{ {
$Basket = new Basket(); $basket = new Basket();
$Basket->setName($request->request->get('name', '')); $basket->setName($request->request->get('name', ''));
$Basket->setUser($this->getAuthenticatedUser()); $basket->setUser($this->getAuthenticatedUser());
$Basket->setDescription($request->request->get('desc')); $basket->setDescription($request->request->get('desc'));
$records = RecordsRequest::fromRequest($this->app, $request, true); $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') { if ($request->getRequestFormat() === 'json') {
$data = [ $data = [
'success' => true, 'success' => true,
'message' => $this->app->trans('Basket created'), 'message' => $this->app->trans('Basket created'),
'basket' => [ 'basket' => [
'id' => $Basket->getId(), 'id' => $basket->getId(),
] ]
]; ];
return $this->app->json($data); 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) public function deleteBasket(Request $request, Basket $basket)
{ {
$this->getEntityManager()->remove($basket); $this->getBasketManipulator()->removeBasket($basket);
$this->getEntityManager()->flush();
$data = [ $data = [
'success' => true 'success' => true
@@ -95,7 +97,7 @@ class BasketController extends Controller
{ {
/** @var BasketElement $basketElement */ /** @var BasketElement $basketElement */
$basketElement = $this->getEntityManager()->getRepository('Phraseanet:BasketElement')->find($basket_element_id); $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')]; $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); $records = RecordsRequest::fromRequest($this->app, $request, true);
$elements = $this->app['manipulator.basket']->addRecords($basket, $records); $elements = $this->getBasketManipulator()->addRecords($basket, $records);
$data = [ $data = [
'success' => true, 'success' => true,
@@ -234,7 +236,6 @@ class BasketController extends Controller
} }
$basket_element->getBasket()->removeElement($basket_element); $basket_element->getBasket()->removeElement($basket_element);
$basket_element->setBasket($basket);
$basket->addElement($basket_element); $basket->addElement($basket_element);
$n++; $n++;
} }
@@ -262,4 +263,12 @@ class BasketController extends Controller
{ {
return $this->app['orm.em']; return $this->app['orm.em'];
} }
/**
* @return BasketManipulator
*/
private function getBasketManipulator()
{
return $this->app['manipulator.basket'];
}
} }

View File

@@ -106,4 +106,16 @@ class BasketManipulator
$this->manager->flush(); $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();
}
} }

View File

@@ -3,8 +3,7 @@
namespace Alchemy\Tests\Phrasea\Controller\Prod; namespace Alchemy\Tests\Phrasea\Controller\Prod;
use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Model\Entities\Basket; use Doctrine\ORM\EntityManager;
use Alchemy\Phrasea\Model\Entities\BasketElement;
/** /**
* @group functional * @group functional
@@ -56,27 +55,31 @@ class BasketTest extends \PhraseanetAuthenticatedWebTestCase
public function testRootPostJSON() 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(); $count = $query->getSingleScalarResult();
$route = '/prod/baskets/'; $route = '/prod/baskets/';
self::$DI['client']->request( $client = $this->getClient();
'POST' $client->request(
, $route 'POST',
, [ $route,
'name' => 'panier', [
'desc' => 'mon beau panier', 'name' => 'panier',
] 'desc' => 'mon beau panier',
, [] ],
, [ [],
"HTTP_ACCEPT" => "application/json" [
"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($count + 1, $query->getSingleScalarResult());
$this->assertEquals(200, $response->getStatusCode()); $this->assertEquals(200, $response->getStatusCode());
@@ -86,9 +89,10 @@ class BasketTest extends \PhraseanetAuthenticatedWebTestCase
{ {
$route = '/prod/baskets/create/'; $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()); $this->assertEquals(200, $response->getStatusCode());
$filter = "form[action='/prod/baskets/']"; $filter = "form[action='/prod/baskets/']";