partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

commit 4cf9190ff2a6c5294a2eb5f2f9551c3b15935617
parent 28edd4845aaed4e1dc2f54b2530ae2c9c65e4bbc
Author: Timo A. Hummel <felicitus@felicitus.org>
Date:   Fri, 22 Apr 2016 17:02:56 +0200

Merge pull request #648 from partkeepr/PartKeepr-647

Bugfix for #647 Filters for Distributor and Manufacturer don…
Diffstat:
Msrc/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php | 4++--
Asrc/PartKeepr/PartBundle/Tests/Issues/DistributorAndManufacturerSearchTest.php | 119+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 121 insertions(+), 2 deletions(-)

diff --git a/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php b/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php @@ -117,10 +117,10 @@ class AdvancedSearchFilter extends AbstractFilter if ($filter["association"] !== null) { // Pull in associations $this->addJoins($queryBuilder, $filter); - } else { - $filter["value"] = $this->getFilterValueFromUrl($filter["value"]); } + $filter["value"] = $this->getFilterValueFromUrl($filter["value"]); + $queryBuilder->andWhere( $this->getFilterExpression($queryBuilder, $filter) ); diff --git a/src/PartKeepr/PartBundle/Tests/Issues/DistributorAndManufacturerSearchTest.php b/src/PartKeepr/PartBundle/Tests/Issues/DistributorAndManufacturerSearchTest.php @@ -0,0 +1,119 @@ +<?php + + +namespace PartKeepr\PartBundle\Tests\Issues; + +use Doctrine\Common\DataFixtures\ProxyReferenceRepository; +use PartKeepr\CoreBundle\Tests\WebTestCase; +use PartKeepr\DistributorBundle\Entity\Distributor; +use PartKeepr\ManufacturerBundle\Entity\Manufacturer; +use PartKeepr\PartBundle\Entity\Part; +use PartKeepr\PartBundle\Entity\PartDistributor; +use PartKeepr\PartBundle\Entity\PartManufacturer; + +/** + * Class DistributorAndManufacturerSearchTest + * + * Unit test against issue #647 (Filters for Distributor and Manufacturer don't return any results) + */ +class DistributorAndManufacturerSearchTest extends WebTestCase +{ + /** + * @var ProxyReferenceRepository + */ + protected $fixtures; + + public function setUp() + { + $this->fixtures = $this->loadFixtures( + array( + 'PartKeepr\StorageLocationBundle\DataFixtures\CategoryDataLoader', + 'PartKeepr\StorageLocationBundle\DataFixtures\StorageLocationLoader', + 'PartKeepr\PartBundle\DataFixtures\CategoryDataLoader', + 'PartKeepr\PartBundle\DataFixtures\PartDataLoader', + 'PartKeepr\AuthBundle\DataFixtures\LoadUserData', + 'PartKeepr\ManufacturerBundle\Tests\DataFixtures\ManufacturerDataLoader', + 'PartKeepr\DistributorBundle\Tests\DataFixtures\DistributorDataLoader', + ) + )->getReferenceRepository(); + } + + public function testManufacturerFilter () { + /** + * @var $part Part + */ + $part = $this->fixtures->getReference("part.1"); + + /** + * @var $manufacturer Manufacturer + */ + $manufacturer = $this->fixtures->getReference("manufacturer.first"); + + $partManufacturer = new PartManufacturer(); + $partManufacturer->setManufacturer($manufacturer); + $partManufacturer->setPartNumber("1"); + + $part->addManufacturer($partManufacturer); + $this->getContainer()->get("doctrine.orm.default_entity_manager")->flush(); + + $filter = array( + "property" => "manufacturers.manufacturer", + "operator" => "=", + "value" => $this->getContainer()->get("api.iri_converter")->getIriFromItem($manufacturer) + ); + + $filters = array($filter); + + $client = static::makeClient(true); + + $partResource = $this->getContainer()->get("resource.part"); + $iri = $this->getContainer()->get("api.iri_converter")->getIriFromResource($partResource); + + $client->request("GET", $iri, array("filter" => json_encode($filters) )); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $data = json_decode($client->getResponse()->getContent()); + + $this->assertEquals(1, $data->{"hydra:totalItems"}); + } + + public function testDistributorFilter () { + /** + * @var $part Part + */ + $part = $this->fixtures->getReference("part.1"); + + /** + * @var $distributor Distributor + */ + $distributor = $this->fixtures->getReference("distributor.first"); + + $partDistributor = new PartDistributor(); + $partDistributor->setDistributor($distributor); + + $part->addDistributor($partDistributor); + $this->getContainer()->get("doctrine.orm.default_entity_manager")->flush(); + + $filter = array( + "property" => "distributors.distributor", + "operator" => "=", + "value" => $this->getContainer()->get("api.iri_converter")->getIriFromItem($distributor) + ); + + $filters = array($filter); + + $client = static::makeClient(true); + + $partResource = $this->getContainer()->get("resource.part"); + $iri = $this->getContainer()->get("api.iri_converter")->getIriFromResource($partResource); + + $client->request("GET", $iri, array("filter" => json_encode($filters) )); + + $this->assertEquals(200, $client->getResponse()->getStatusCode()); + + $data = json_decode($client->getResponse()->getContent()); + + $this->assertEquals(1, $data->{"hydra:totalItems"}); + } +}