diff --git a/library/Class/Notice.php b/library/Class/Notice.php index 110ed7e45f93592fd1b59ac26ef6c731c68b0ac1..480ba88ba323ba7b29169e6b7bd16ac1e53c3927 100644 --- a/library/Class/Notice.php +++ b/library/Class/Notice.php @@ -1136,14 +1136,28 @@ class Class_Notice extends Storm_Model_Abstract { $auteur = new stdClass(); $auteur->nom = $auteur->prenom = $auteur->fonction = $auteur->fonction_pergame = ''; foreach ($data as $item) { - if ($item['code'] == 'a') + if ($item['code'] == 'a') { $auteur->nom = trim($item['valeur']); - elseif ($item['code'] == 'b') + continue; + } + if ($item['code'] == 'b') { $auteur->prenom = trim($item['valeur']); - elseif ($item['code'] == '4') + continue; + } + + if ($item['code'] == '4') { $auteur->fonction = trim($item['valeur']); - elseif ($item['code'] == 'g') + continue; + } + + if ($item['code'] == 'g' && !$auteur->fonction_pergame) { + $auteur->fonction_pergame = trim($item['valeur']); + continue; + } + if ($item['code'] == '6') { $auteur->fonction_pergame = trim($item['valeur']); + } + } return $auteur; } diff --git a/tests/library/Class/DecodageUnimarcTest.php b/tests/library/Class/DecodageUnimarcTest.php index 5eb8c008dd78f8c330b570d50beb71d8496f98bd..7359b410789c10c2c77abab1cdbe2f30b9cb8b01 100644 --- a/tests/library/Class/DecodageUnimarcTest.php +++ b/tests/library/Class/DecodageUnimarcTest.php @@ -310,4 +310,79 @@ class DecodageUnimarcConcertoAuteursTest extends PHPUnit_Framework_TestCase { } + +class DecodageUnimarcDVDUnHerosTresDiscretTest extends Storm_Test_ModelTestCase { + public function setUp() { + parent::setUp(); + Class_CodifAuteurFonction::beVolatile(); + Class_CodifAuteur::beVolatile(); + + $this->fixture('Class_CodifLangue', + ['id' => 23, + 'libelle' => '']); + foreach ($this->createAuthors() as $author) { + $author_db=$this->fixture('Class_CodifAuteur', + ['id' => $author[0], + 'libelle' => $author[1] + ]); + Storm_Test_ObjectWrapper::onLoaderOfModel('Class_CodifAuteur') + ->whenCalled('findFirstBy') + ->with(['where' => "MATCH(formes) AGAINST('".$author[2]."' IN BOOLEAN MODE)"]) + ->answers($author_db); + + + } + + $unimarc=file_get_contents(realpath(dirname(__FILE__)).'../../../fixtures/audiard_herosdiscret.uni'); + $this->audiard = $this->fixture('Class_Notice', + ['id' => 10, + 'unimarc' => $unimarc, + 'exemplaires' => []]); + $this->_authors = $this->audiard->getAuteursUnimarc(false, true); + } + + protected function createAuthors() { + return [[1,'Jacques Audiard','AUDIARDxJACQUES'], + [2,'Alexandre Desplat', 'DESPLATxALEXANDRE'], + [3, 'Jean-François Deniau', 'DENIAUxJEANxFRANCOIS'], + [4, 'Mathieu Kassovitz', 'KASSOVITZxMATHIEU'], + [5, 'Anouk Grinberg', 'GRINBERGxANOUK'], + [6,'Sandrine Kiberlain' , 'KIBERLAINxSANDRINE'], + [8,'Albert Dupontel' , 'DUPONTELxALBERT'], + [7,'Alain Le Henry' , 'LExHENRYxALAIN']]; + } + /** + * @dataProvider expectedAuthors + * @test + */ + public function getAuthorUnimarcShouldReturnExpectedAuthors($id, $label, $rebound_code, $author_index) { + $author = $this->_authors[$author_index]; + + + $this->assertEquals($id, $author->getId()); + $this->assertEquals($label, $author->getLabel()); + $this->assertEquals(['controller' => 'recherche', + 'action' => 'simple', + 'code_rebond' => $rebound_code, + 'facettes' => null, + 'facette' => null, + 'serie' => null, + 'page' => null], + $author->getUrlParams()); + } + + + public function expectedAuthors() { + return [ + [1, 'Jacques Audiard (Metteur en scène ou réalisateur)', 'A1', 0], + [2, 'Alexandre Desplat (Compositeur)', 'A2', 1], + [3, 'Jean-François Deniau (Auteur)', 'A3', 2], + [4, 'Mathieu Kassovitz (Acteur)', 'A4', 3], + [5, 'Anouk Grinberg (Acteur)','A5', 4], + [6, 'Sandrine Kiberlain (Acteur)' , 'A6', 5], + [8, 'Albert Dupontel (Acteur)' , 'A8', 7], + [7, 'Alain Le Henry (Intervenant)' , 'A7', 9]]; + } + +} ?> \ No newline at end of file