From f2bb1dc0dbcc40bbb5afc3e260b58c7b8582f6e0 Mon Sep 17 00:00:00 2001
From: David Maus <maus@hab.de>
Date: Wed, 5 Jun 2013 09:58:46 +0200
Subject: [PATCH] Fix VUFIND-820: Ignored query D/I/A in SOLR HandlerMap

* VuFindSearch/Backend/Solr/HandlerMap.php (setHandlerMap): Set D/I/A
  if handler definition does not contain functions.
---
 .../VuFindSearch/Backend/Solr/HandlerMap.php  | 30 ++++++++---------
 .../Backend/Solr/HandlerMapTest.php           | 33 +++++++++++++++++++
 2 files changed, 48 insertions(+), 15 deletions(-)

diff --git a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/HandlerMap.php b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/HandlerMap.php
index 491289567eb..0e824774976 100644
--- a/module/VuFindSearch/src/VuFindSearch/Backend/Solr/HandlerMap.php
+++ b/module/VuFindSearch/src/VuFindSearch/Backend/Solr/HandlerMap.php
@@ -118,21 +118,21 @@ class HandlerMap extends AbstractHandlerMap
                     }
                     $this->handlers[$function] = $handler;
                 }
-                if (isset($definition['invariants'])) {
-                    $this->setParameters(
-                        $handler, 'invariants', (array)$definition['invariants']
-                    );
-                }
-                if (isset($definition['defaults'])) {
-                    $this->setParameters(
-                        $handler, 'defaults', (array)$definition['defaults']
-                    );
-                }
-                if (isset($definition['appends'])) {
-                    $this->setParameters(
-                        $handler, 'appends', (array)$definition['appends']
-                    );
-                }
+            }
+            if (isset($definition['invariants'])) {
+                $this->setParameters(
+                    $handler, 'invariants', (array)$definition['invariants']
+                );
+            }
+            if (isset($definition['defaults'])) {
+                $this->setParameters(
+                    $handler, 'defaults', (array)$definition['defaults']
+                );
+            }
+            if (isset($definition['appends'])) {
+                $this->setParameters(
+                    $handler, 'appends', (array)$definition['appends']
+                );
             }
         }
         $this->fallback = $fallback;
diff --git a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/HandlerMapTest.php b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/HandlerMapTest.php
index 60286c72a27..df8e4d3d2df 100644
--- a/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/HandlerMapTest.php
+++ b/module/VuFindSearch/tests/unit-tests/src/VuFindTest/Backend/Solr/HandlerMapTest.php
@@ -125,4 +125,37 @@ class HandlerMapTest extends TestCase
             $map->getAppends('search')->getArrayCopy()
         );
     }
+
+    /**
+     * Test defaults, appends, invariants for pure fallback definitions.
+     *
+     * @return void
+     *
+     * @see http://vufind.org/jira/browse/VUFIND-820 VUFIND-820
+     */
+    public function testGetDefaultsAppendsInvariantsPureFallback ()
+    {
+        $map = new HandlerMap(
+            array(
+                'search' => array(
+                    'fallback' => true,
+                    'invariants' => array('p1' => 'v1'),
+                    'defaults' => array('p2' => 'v2'),
+                    'appends' => array('p3' => 'v3'),
+                )
+            )
+        );
+        $this->assertEquals(
+            array('p1' => array('v1')),
+            $map->getInvariants('search')->getArrayCopy()
+        );
+        $this->assertEquals(
+            array('p2' => array('v2')),
+            $map->getDefaults('search')->getArrayCopy()
+        );
+        $this->assertEquals(
+            array('p3' => array('v3')),
+            $map->getAppends('search')->getArrayCopy()
+        );       
+    }
 }
\ No newline at end of file
-- 
GitLab