Skip to content
Snippets Groups Projects
Commit 4d194918 authored by Matthias Meusburger's avatar Matthias Meusburger
Browse files

hotline#12905: Catalogue dynamique

  - Add tests for all the modes
parent 396bf529
Branches
Tags
6 merge requests!258Dev/13872 Orphee Allow Hold Available Items,!63Rf13038,!56Rf13038 Front,!47Hotline 6.40,!45Hotline#12905 Catalogue Dynamique,!43Hotline#12905 Catalogue Dynamique
......@@ -151,6 +151,10 @@ class Class_CodifThesaurusLoader extends Storm_Model_Loader {
class Class_CodifThesaurus extends Storm_Model_Abstract {
const CODE_FACETTE = 'H';
const MODE_HIERARCHY_CONTAINS = 1;
const MODE_LABEL_STARTS_WITH = 2;
const MODE_LABEL_CONTAINS = 3;
const MODE_INDEX_STARTS_WITH = 4;
protected $_loader_class = 'Class_CodifThesaurusLoader';
protected $_table_name = 'codif_thesaurus';
......@@ -158,26 +162,31 @@ class Class_CodifThesaurus extends Storm_Model_Abstract {
protected $_default_attribute_values = ['libelle_facette' => ''];
public function getListeSuggestion($recherche,$mode,$limite_resultat,$theme) {
// Lancer la recherche
if($mode=="1") {
if (strlen($recherche)<3)
return [];
$req = "select distinct(id),id_thesaurus,id_origine from codif_thesaurus where id_thesaurus regexp (select group_concat(concat(id_thesaurus,'.*') separator '|') from codif_thesaurus where id_thesaurus like '".$theme."%' and id_origine is not null and libelle like '%".$recherche."%') order by id_thesaurus";
}
if($mode=="2")
switch ((int) $mode) {
case self::MODE_HIERARCHY_CONTAINS:
if (strlen($recherche)<3)
return [];
$req = "select distinct(id),id_thesaurus,id_origine from codif_thesaurus where id_thesaurus regexp (select group_concat(concat(id_thesaurus,'.*') separator '|') from codif_thesaurus where id_thesaurus like '".$theme."%' and id_origine is not null and libelle like '%".$recherche."%') order by id_thesaurus";
break;
case self::MODE_LABEL_STARTS_WITH:
$req="select id,id_thesaurus,libelle,id_origine from codif_thesaurus where id_thesaurus like '".$theme."%' and libelle like'".addslashes($recherche)."%' order by id_thesaurus limit ".$limite_resultat;
break;
if($mode=="3")
case self::MODE_LABEL_CONTAINS:
$req="select id,libelle,id_origine from codif_thesaurus where id_thesaurus like '".$theme."%' and libelle like'%".addslashes($recherche)."%' order by id_thesaurus limit ".$limite_resultat;
break;
if ($mode=="4")
case self::MODE_INDEX_STARTS_WITH:
$req="select id,id_thesaurus,libelle,id_origine from codif_thesaurus where id_thesaurus like '".$theme."%' and id_origine like '".$recherche."%' order by id_thesaurus limit ".$limite_resultat;
break;
}
$resultat=fetchAll($req);
if (!$resultat)
return false;
return [];
foreach($resultat as $enreg) {
$thesaurus = Class_CodifThesaurus::getLoader()->find($enreg["id"]);
......
......@@ -40,10 +40,41 @@ class AjaxControllerAuteurTest extends AbstractControllerTestCase {
class AjaxControllerThesaurusTest extends AbstractControllerTestCase {
public function setUp() {
parent::setUp();
$this->mock_sql = $this->mock();
Zend_Registry::set('sql', $this->mock_sql);
$this->fixture('Class_CodifThesaurus', ['id' => 1,
'id_origine' => 1,
'id_thesaurus' => 'PUBL',
'libelle' => 'pirate']);
}
/** @test */
public function getListeSuggesionForThesaurusShouldNotCrash() {
$mock_sql = $this->mock();
$mock_sql
public function getListeSuggestionForModeHierarchyContains() {
$this->mock_sql
->whenCalled('fetchAll')
->with("select distinct(id),id_thesaurus,id_origine from codif_thesaurus where id_thesaurus regexp (select group_concat(concat(id_thesaurus,'.*') separator '|') from codif_thesaurus where id_thesaurus like 'PUBL%' and id_origine is not null and libelle like '%pirate%') order by id_thesaurus",
false)
->answers([
['id_thesaurus' => 1,
'id_origine' => 1,
'id' => 1]
])
->beStrict();
$this->dispatch('/admin/ajax/listesuggestion/type_autorite/thesaurus/mode/1/valeur/pirate/id_champ/PUBL', true);
$this->assertXPathContentContains('//div[@class="tag_liste"][@clef="1"]', '1 : pirate', $this->_response->getBody());
}
/** @test */
public function getListeSuggestionForModeLabelStartsWith() {
$this->mock_sql
->whenCalled('fetchAll')
->with("select id,id_thesaurus,libelle,id_origine from codif_thesaurus where id_thesaurus like 'PUBL%' and libelle like'pirate%' order by id_thesaurus limit 100",
false)
......@@ -53,16 +84,50 @@ class AjaxControllerThesaurusTest extends AbstractControllerTestCase {
'id' => 1]
])
->beStrict();
Zend_Registry::set('sql', $mock_sql);
$this->fixture('Class_CodifThesaurus', ['id' => 1,
'id_origine' => 1,
'id_thesaurus' => 'PUBL',
'libelle' => 'pirate']);
$this->dispatch('/admin/ajax/listesuggestion/type_autorite/thesaurus/mode/2/valeur/pirate/id_champ/PUBL', true);
$this->assertXPathContentContains('//div[@class="tag_liste"][@clef="1"]', '1 : pirate', $this->_response->getBody());
}
/** @test */
public function getListeSuggestionForModeLabelContains() {
$this->mock_sql
->whenCalled('fetchAll')
->with("select id,libelle,id_origine from codif_thesaurus where id_thesaurus like 'PUBL%' and libelle like'%pirate%' order by id_thesaurus limit 100",
false)
->answers([
['id_thesaurus' => 1,
'id_origine' => 1,
'id' => 1]
])
->beStrict();
$this->dispatch('/admin/ajax/listesuggestion/type_autorite/thesaurus/mode/3/valeur/pirate/id_champ/PUBL', true);
$this->assertXPathContentContains('//div[@class="tag_liste"][@clef="1"]', '1 : pirate', $this->_response->getBody());
}
/** @test */
public function getListeSuggestionForModeIndexStartsWith() {
$this->mock_sql
->whenCalled('fetchAll')
->with("select id,id_thesaurus,libelle,id_origine from codif_thesaurus where id_thesaurus like 'PUBL%' and id_origine like 'pirate%' order by id_thesaurus limit 100",
false)
->answers([
['id_thesaurus' => 1,
'id_origine' => 1,
'id' => 1]
])
->beStrict();
$this->dispatch('/admin/ajax/listesuggestion/type_autorite/thesaurus/mode/4/valeur/pirate/id_champ/PUBL', true);
$this->assertXPathContentContains('//div[@class="tag_liste"][@clef="1"]', '1 : pirate', $this->_response->getBody());
}
}
?>
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment