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\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'];
}
}

View File

@@ -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();
}
}

View File

@@ -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
, [
$client = $this->getClient();
$client->request(
'POST',
$route,
[
'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(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/']";