diff --git a/library/Class/RendezVous/SearchCriteriaAll.php b/library/Class/RendezVous/SearchCriteriaAll.php index 6d9e6c981aa7ef880f77952b0dc4d087e631d0c7..69c14d8ca58514cd23cc92e02191736ea4134838 100644 --- a/library/Class/RendezVous/SearchCriteriaAll.php +++ b/library/Class/RendezVous/SearchCriteriaAll.php @@ -66,19 +66,23 @@ class Class_RendezVous_SearchCriteriaAll extends Class_SearchCriteria { protected function _buildSearchParams() { - $this->_adoptSearchParams($this->_rendez_vous_criteria); + return $this + ->_adoptSearchParams($this->_rendez_vous_criteria) + ->_buildAgendaParams(); + } - $agenda_array = $this->_agenda_criteria->findPage(1, static::PAGE_NO_LIMIT); - $agendas = new Storm_Model_Collection($agenda_array); - $this->addParam('group_id', $agendas->collect('id')->getArrayCopy()); - return $this; - } + protected function _buildAgendaParams() { + if (!$this->_agenda_criteria->isFiltering()) + return $this; + $agendas = new Storm_Model_Collection($this->_agenda_criteria + ->findPage(1, static::PAGE_NO_LIMIT)); - protected function _adoptSearchParams($other) { - $other->_buildSearchParams(); - $this->_search_params = $other->_search_params; - $this->_has_no_result = $other->_has_no_result; + if ($agendas->isEmpty()) + return $this->hasNoResult(); + + $this->addParam('group_id', $agendas->collect('id')->getArrayCopy()); + return $this; } } diff --git a/library/Class/SearchCriteria.php b/library/Class/SearchCriteria.php index 8e5fe055092a260aad9a0c510d4e8f87e9707546..b2e537b1480e078dad760f271446b5b26d6482d9 100644 --- a/library/Class/SearchCriteria.php +++ b/library/Class/SearchCriteria.php @@ -147,6 +147,12 @@ abstract class Class_SearchCriteria { } + public function isFiltering() { + $this->_buildSearchParams(); + return $this->_has_no_result || $this->_search_params; + } + + public function describeOn($view) { return array_filter((new Storm_Collection($this->_criteria)) ->collect(function($c) use($view) { return $c->describeOn($view); }) @@ -158,5 +164,16 @@ abstract class Class_SearchCriteria { $model = Class_CustomField_Model::getModel($class_name); foreach($model->getFields() as $field) $this->_criteria[] = Class_SearchCriteria_CustomField::newWith($params, $field); + + return $this; + } + + + protected function _adoptSearchParams($other) { + $other->_buildSearchParams(); + $this->_search_params = $other->_search_params; + $this->_has_no_result = $other->_has_no_result; + + return $this; } } diff --git a/tests/scenarios/RendezVous/UsergroupAgendaAdminTest.php b/tests/scenarios/RendezVous/UsergroupAgendaAdminTest.php index 8d0732980378b31cdc51596c4176113a7a9834c4..7af8082ab91d546054978208aaedd43ca6e580a0 100644 --- a/tests/scenarios/RendezVous/UsergroupAgendaAdminTest.php +++ b/tests/scenarios/RendezVous/UsergroupAgendaAdminTest.php @@ -1108,7 +1108,6 @@ class UsergroupAgendaAdminSearchCustomFieldsMultiTest class UsergroupAgendaAdminSearchCustomFieldsSelectTest extends UsergroupAgendaAdminSearchCustomFieldsActionTestCase { - public function setUp() { parent::setUp(); $this->dispatch($this->urlWithParams([]) @@ -1139,6 +1138,47 @@ class UsergroupAgendaAdminSearchCustomFieldsSelectTest +class UsergroupAgendaAdminSearchCustomFieldsSelectWithoutResultTest + extends UsergroupAgendaAdminSearchCustomFieldsActionTestCase { + + public function setUp() { + parent::setUp(); + + Class_CustomField_Value::whenCalled('findAllBy')->answers([]); + $this->dispatch($this->urlWithParams([]) + . '&search_field_3[]=fromage&search_field_3[]=dessert&search_field_3[]=l\'association'); + } + + + public function values() { + return [['fromage'], ['dessert'], ['l\'association']]; + } + + + /** + * @test + * @dataProvider values + */ + public function inputValueShouldBeChecked($value) { + $this->assertXPath('//input[@name="search_field_3[]"][@value="' . $value . '"][@checked]'); + } + + + /** @test */ + public function queryalueShouldBeFromageDessertLassociation() { + $this->assertEquals(['fromage','dessert','l\'association'], + $this->lastCustomFieldValueClause('value')); + } + + + /** @test */ + public function rendezVousShouldNotBeQueried() { + $this->assertTrue(Class_RendezVous::methodHasNotBeenCalled('findAllBy')); + } +} + + + class UsergroupAgendaAdminSearchCustomFieldDateRangeTest extends UsergroupAgendaAdminSearchCustomFieldsActionTestCase { @@ -1200,6 +1240,37 @@ class UsergroupAgendaAdminSearchCustomFieldOfAgendaTest +class UsergroupAgendaAdminSearchCustomFieldOfAgendaWithoutResultTest + extends UsergroupAgendaAdminSearchCustomFieldsActionTestCase { + + public function setUp() { + parent::setUp(); + + Class_CustomField_Value::whenCalled('findAllBy')->answers([]); + $this->dispatchWithQuery(['search_field_5' => 'nord']); + } + + + /** @test */ + public function inputValueShouldBeNord() { + $this->assertXPath('//input[@name="search_field_5"][@value="nord"]'); + } + + + /** @test */ + public function lastValueQueryShouldBeLikeNord() { + $this->assertEquals('value like "%nord%"', $this->lastCustomFieldValueClause('where')); + } + + + /** @test */ + public function rendezVousShouldNotBeQueried() { + $this->assertTrue(Class_RendezVous::methodHasNotBeenCalled('findAllBy')); + } +} + + + class UsergroupAgendaAdminExportActionTest extends UsergroupAgendaAdminModoPortailLoggedTestCase {