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:
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"});
+ }
+}