From bc1d5ed2c2c72562688220342a54fa1277c1d0b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Burnichon?= Date: Mon, 11 Apr 2016 12:32:27 +0200 Subject: [PATCH] Fix BasketElementRepository findByRecordIds --- .../Repositories/BasketElementRepository.php | 9 +- .../BasketElementRepositoryTest.php | 119 ++++++++++++++++++ 2 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 tests/Alchemy/Tests/Phrasea/Model/Repositories/BasketElementRepositoryTest.php diff --git a/lib/Alchemy/Phrasea/Model/Repositories/BasketElementRepository.php b/lib/Alchemy/Phrasea/Model/Repositories/BasketElementRepository.php index b38e6366e1..03ebaf44f5 100644 --- a/lib/Alchemy/Phrasea/Model/Repositories/BasketElementRepository.php +++ b/lib/Alchemy/Phrasea/Model/Repositories/BasketElementRepository.php @@ -163,8 +163,9 @@ class BasketElementRepository extends EntityRepository public function findByRecords(array $records, $basketId = null) { $perDataboxLookup = []; + foreach ($records as $record) { - if (!isset($record['databox_id']) || !isset($record['record_id'])) { + if (!isset($record['databox_id'], $record['record_id'])) { throw new \LogicException('Each record should have a databox_id AND record_id key'); } @@ -177,7 +178,7 @@ class BasketElementRepository extends EntityRepository $perDataboxLookup[$databoxId][] = $recordId; } - if (empty($perDataboxLookup)) { + if (!$perDataboxLookup) { return []; } @@ -186,8 +187,8 @@ class BasketElementRepository extends EntityRepository $parameters = new ArrayCollection(); if ($basketId) { - $builder->where('e.basket_id = :basket_id'); - $parameters->add(new Parameter('basket_id', $basketId)); + $builder->where('e.basket = :basket_id'); + $parameters->add(new Parameter('basket_id', $basketId, \PDO::PARAM_INT)); } $parameterGroup = 1; diff --git a/tests/Alchemy/Tests/Phrasea/Model/Repositories/BasketElementRepositoryTest.php b/tests/Alchemy/Tests/Phrasea/Model/Repositories/BasketElementRepositoryTest.php new file mode 100644 index 0000000000..81089ccf19 --- /dev/null +++ b/tests/Alchemy/Tests/Phrasea/Model/Repositories/BasketElementRepositoryTest.php @@ -0,0 +1,119 @@ + 'basket_element']]; + + $entityManager = $this->prophesize(EntityManager::class); + + $builder = new QueryBuilder($entityManager->reveal()); + $entityManager->createQueryBuilder()->willReturn($builder); + + $entityManager->getExpressionBuilder()->willReturn(new Expr()); + + $query = $this->prophesize(StubQuery::class); + $query->setDql(Argument::any())->will(function ($arguments) { + $this->getDql()->willReturn($arguments[0]); + + return $this; + }); + $query->setParameters(Argument::any())->will(function ($arguments) { + $this->getParameters()->willReturn($arguments[0]); + + return $this; + }); + $query->setFirstResult(Argument::any())->will(function ($arguments) { + $this->getFirstResult()->willReturn($arguments[0]); + + return $this; + }); + $query->setMaxResults(Argument::any())->will(function ($arguments) { + $this->getMaxResults()->willReturn($arguments[0]); + + return $this; + }); + $query->getResult()->willReturn($result); + + + $entityManager->createQuery(Argument::any())->will(function ($arguments) use ($query) { + $query->reveal()->setDql($arguments[0]); + + return $query->reveal(); + }); + + + $sut = new BasketElementRepository($entityManager->reveal(), new ClassMetadata(BasketElement::class)); + + $records = [ + ['databox_id' => 1, 'record_id' => 42], + ]; + $basketId = 2; + + $this->assertSame($result, $sut->findByRecords($records, $basketId)); + $this->assertSame(sprintf('SELECT e FROM %s e WHERE e.basket = :basket_id AND (e.sbas_id = :databoxId1 AND e.record_id IN (:recordIds1))', BasketElement::class), $query->reveal()->getDql()); + + $parameters = $query->reveal()->getParameters(); + $this->assertCount(3, $parameters); + $this->assertEquals(new Query\Parameter('basket_id', 2, \PDO::PARAM_INT), $parameters[0]); + $this->assertEquals(new Query\Parameter('databoxId1', 1, \PDO::PARAM_INT), $parameters[1]); + $this->assertEquals(new Query\Parameter('recordIds1', [42], Connection::PARAM_INT_ARRAY), $parameters[2]); + } +} + +class StubQuery extends AbstractQuery +{ + public function setDql($dql = '') + { + } + + public function getDql() + { + } + + public function setFirstResult($firstResult) + { + } + + public function getFirstResult() + { + } + + public function setMaxResults($maxResult) + { + } + + public function getMaxResults() + { + } + + public function getSQL() + { + } + + protected function _doExecute() + { + } +}