diff --git a/library/Class/Migration/DigitalResource/Abstract.php b/library/Class/Migration/DigitalResource/Abstract.php index 9142ee8b037c3b3c6185249a2eef0649b3731591..ddb0e4babbdb5cdf5af6f8e65370f69c9994ca78 100644 --- a/library/Class/Migration/DigitalResource/Abstract.php +++ b/library/Class/Migration/DigitalResource/Abstract.php @@ -165,13 +165,9 @@ abstract class Class_Migration_DigitalResource_Abstract { if (!$old_id = (string) $this->_getOldDocTypeId()) return $this; - $new_doc_type = $this->_getConfig()->getDocType(); while($page = Class_Notice::findAllBy(['type_doc' => $old_id, 'limit' => 100])) { - $this->_replaceInModels($page, - $old_id, - $new_doc_type, - ['facettes', - 'type_doc']); + foreach($page as $record) + $this->_upgradeRecord($record); $this->_cleanMemory(); } @@ -180,6 +176,16 @@ abstract class Class_Migration_DigitalResource_Abstract { } + protected function _upgradeRecord($record) { + $doc_type = $this->_getConfig()->getDocType(); + $record + ->setTypeDoc($doc_type) + ->deleteFacettes('T' . $this->_getOldDocTypeId()) + ->updateFacette('T' . $doc_type) + ->save(); + } + + protected function upgradeProfiles() { $top_profiles = Class_Profil::findTopProfils(); diff --git a/library/Class/WebService/OAI.php b/library/Class/WebService/OAI.php index e3c93aaacdff60065a771eb407a824368019ed4b..a227d8243e0cef5bcf892c8f88f7137cf8e3bbdc 100644 --- a/library/Class/WebService/OAI.php +++ b/library/Class/WebService/OAI.php @@ -98,17 +98,23 @@ class Class_WebService_OAI extends Class_WebService_Abstract { public function oaiAsks($verb, $parameters) { + $url = $this->_askUrlFor($verb, $parameters); + $response = $this->getContent($url); + $this->_log($url, $response); + + return $response; + } + + + protected function _askUrlFor($verb, $parameters) { unset($parameters[static::Verb]); $parameters = array_merge([static::Verb => $verb], $parameters); $separator = (false !== strpos($this->_oai_handler, '?')) ? '&' : '?'; - $url = $this->_oai_handler . $separator . http_build_query($parameters); - $response = $this->getContent($url); - $this->_log($url, $response); - return $response; + return $this->_oai_handler . $separator . http_build_query($parameters); } @@ -182,6 +188,12 @@ class Class_WebService_OAI extends Class_WebService_Abstract { } + public function getRecordsUrl() { + return $this->_askUrlFor(static::ListRecords, + [static::MetadataPrefix => $this->_metadata_prefix]); + } + + public function getRecordsFromSet($set) { return $this->getRecords([static::Set => $set]); } diff --git a/library/digital_resources/DiMusic/Config.php b/library/digital_resources/DiMusic/Config.php index 248474cd09594dcbfc859d81fe4ec1431cd48736..bdb406752b17583c3ec7fe2d41a9ee79f80c5fab 100644 --- a/library/digital_resources/DiMusic/Config.php +++ b/library/digital_resources/DiMusic/Config.php @@ -41,7 +41,7 @@ class DiMusic_Config extends Class_DigitalResource_Config { 'DocTypeLabel' => $this->_('ressource DiMusic'), 'PhoneLabel' => $this->_('Accéder à l\'album'), - 'AdminVars' => ['Id' => Class_AdminVar_Meta::newDefault($this->_('Identifiant du portail chez 1D touch'))->bePrivate(), + 'AdminVars' => ['Id' => Class_AdminVar_Meta::newDefault($this->_('Identifiant du portail sur la plateforme DiMusic'))->bePrivate(), 'Sso_Url' => Class_AdminVar_Meta::newDefault($this->_('URL SSO de la plateforme DiMusic'), ['value' => 'https://music.divercities.eu'])->bePrivate(), @@ -49,14 +49,14 @@ class DiMusic_Config extends Class_DigitalResource_Config { 'Harvest_Url' => Class_AdminVar_Meta::newDefault($this->_('Adresse du serveur OAI DiMusic'), ['value' => 'https://export.divercities.eu/oai?set=music'])->bePrivate(), - 'OAI_metadataPrefix' => Class_AdminVar_Meta::newDefault($this->_('metadataPrefix utilisé pour récuprer le flux OAI'), - ['value' => 'oai1dtouch_dc'])] + 'OAI_metadataPrefix' => Class_AdminVar_Meta::newDefault($this->_('metadataPrefix OAI DiMusic'), + ['value' => 'oai1dtouch_dc'])->bePrivate()] ]; } public function isEnabled() { - return '' != $this->getAdminVar('Sso_Url'); + return '' != $this->getAdminVar('Id'); } @@ -72,10 +72,12 @@ class DiMusic_Config extends Class_DigitalResource_Config { public function getSsoUrl($user) { - if(!$user) + if (!$user || !($sso_url = $this->getAdminVar('Sso_Url'))) return ''; - return $this->getAdminVar('Sso_Url'); + return $sso_url . (($id = $this->getAdminVar('Id')) + ? ('/users/auth/afi?bibid=' . $id) + : ''); } @@ -100,4 +102,9 @@ class DiMusic_Config extends Class_DigitalResource_Config { return parent::newOAIClient() ->setMetadataPrefix($this->getAdminVar('OAI_metadataPrefix')); } + + + public function getHarvestUrl() { + return $this->newOAIClient()->getRecordsUrl(); + } } \ No newline at end of file diff --git a/library/digital_resources/DiMusic/tests/DiMusicTest.php b/library/digital_resources/DiMusic/tests/DiMusicTest.php index 8dd239b0c26c4a7c82dae92e2f31dc6bb07b829b..a10589ff126fa938852907f5e04bdf744fc4bc38 100644 --- a/library/digital_resources/DiMusic/tests/DiMusicTest.php +++ b/library/digital_resources/DiMusic/tests/DiMusicTest.php @@ -28,6 +28,8 @@ abstract class DiMusicActivatedTestCase extends AbstractControllerTestCase { public function setUp() { parent::setUp(); + Class_AdminVar::set('DiMusic_Id', 'Annecy'); + $group = $this->fixture('Class_UserGroup', ['id' => 1, 'libelle' => 'Digital resources']); @@ -48,7 +50,6 @@ abstract class DiMusicActivatedTestCase extends AbstractControllerTestCase { class DiMusicSsoTest extends DiMusicActivatedTestCase { - public function setUp() { parent::setUp(); ZendAfi_Auth::getInstance()->logUser($this->_user); @@ -58,17 +59,36 @@ class DiMusicSsoTest extends DiMusicActivatedTestCase { /** @test */ public function shouldRedirectToResource() { - $this->assertXPathContentContains('//script' , 'document.location.href="PLACEHOLDER', $this->_response->getBody()); + $this->assertXPathContentContains('//script' , + 'document.location.href="https://music.divercities.eu/users/auth/afi?bibid=Annecy', + $this->_response->getBody()); + } +} + + + +class DiMusicAdminBibnumTest extends Admin_AbstractControllerTestCase { + protected $_storm_default_to_volatile = true; + + public function setUp() { + parent::setUp(); + $this->dispatch('/admin/bibnum', true); } /** @test */ - public function scriptShouldContainsCheckUrl() { - $this->assertXPathContentContains('//script[contains(text(), "&check_url=")]' , '/DiMusic_Plugin/auth/validate'); + public function logoShouldBePresent() { + $this->assertXPath('//img[contains(@src, "divercities.eu")]'); } -} + /** @test */ + public function dashboardLinkShouldBePresent() { + $this->assertXPathContentContains('//button[contains(@data-url, "DiMusic_Plugin")]', + 'Tableau de bord'); + } +} + class DiMusicDashboardUnactivatedTest extends Admin_AbstractControllerTestCase { @@ -89,7 +109,7 @@ class DiMusicDashboardUnactivatedTest extends Admin_AbstractControllerTestCase { /** @test */ public function ssoUrlShoudlBeDisplay() { - $this->assertXPathContentContains('//table', 'DiMusic_SSO_URL'); + $this->assertXPathContentContains('//table', 'DiMusic_Sso_Url'); } } @@ -104,53 +124,62 @@ class DiMusicDashboardActivatedTest extends DiMusicActivatedTestCase { parent::setUp(); $album = $this->fixture('Class_Album', - ['id' => 20, - 'titre' => '10 moutons', - 'type_doc_id' => 'DiMusic' - ]); - - ZendAfi_Auth::getInstance()->logUser($this->fixture('Class_Users', - ['id' => 2, - 'login' => 'admin', - 'password' => 'admin', - 'role_level' => ZendAfi_Acl_AdminControllerRoles::SUPER_ADMIN])); + ['id' => 20, + 'titre' => '10 moutons', + 'type_doc_id' => 'DiMusic', + ]); + + $album->addPosterURI('https://assest.server.eu/cargo/1.jpg') + ->assertSave(); + + Class_WebService_BibNumerique_Vignette::setHttpClient($this->mock() + ->whenCalled('open_url') + ->answers(true)); + + ZendAfi_Auth::getInstance() + ->logUser($this->fixture('Class_Users', + ['id' => 2, + 'login' => 'admin', + 'password' => 'admin', + 'role_level' => ZendAfi_Acl_AdminControllerRoles::SUPER_ADMIN])); + $this->dispatch('/DiMusic_Plugin', true); } - /** @test */ - public function shouldDisplayActivated() { - $this->assertXPathContentContains('//button', 'Activé'); + public function tearDown() { + Class_WebService_BibNumerique_Vignette::setHttpClient(null); + parent::tearDown(); } /** @test */ - public function urlSsoTitleBeDisplay() { - $this->assertXPathContentContains('//h4', 'URL SSO générée par /modules/story-play-r pour l\'utilisateur "DiMusic_test_user"'); + public function shouldDisplayActivated() { + $this->assertXPathContentContains('//button', 'Activé'); } /** @test */ - public function testSsoValidateUrlMessageShoudlBeDisplay() { - $this->assertXPathContentContains('//h4', 'URL de validation du ticket de connexion générée pour l\'utilisateur "DiMusic_test_user"'); + public function urlSsoTitleShouldBeDisplay() { + $this->assertXPathContentContains('//h4', 'URL SSO générée par /modules/di-music pour l\'utilisateur "DiMusic_test_user"'); } /** @test */ - public function testSsoValidateUrlShoudlBeDisplay() { - $this->assertXPathContentContains('//pre', '/DiMusic_Plugin/auth/validate?sessionid=ST-'); + public function ssoValidateUrlShoudlNotBeHandled() { + $this->assertXPathContentContains('//p', 'ne prend pas en charge la validation du ticket de connexion SSO'); } /** @test */ public function sourceImageShouldBeValid() { - $this->assertXPathContentContains('//pre','Image source : https://preprod'); + $this->assertXPathContentContains('//pre', 'Image source : https://assest.server.eu/cargo/1.jpg'); } /** @test */ - public function vignetteShouldBePresent() { - $this->assertXPath("//img[contains(@src,'userfiles/album/20/thumb_20_large_10Moutons.jpeg')]"); + public function harvestUrlShouldBeDisplay() { + $this->assertXPathContentContains('//pre', 'https://export.divercities.eu/oai?set=music'); } diff --git a/tests/application/modules/admin/controllers/BibnumControllerTest.php b/tests/application/modules/admin/controllers/BibnumControllerTest.php index 3f0d13678ad4409befc304e1976aecfa25872af8..0f5984748aec6110a62e24dd9188b6dcdbb08195 100644 --- a/tests/application/modules/admin/controllers/BibnumControllerTest.php +++ b/tests/application/modules/admin/controllers/BibnumControllerTest.php @@ -36,18 +36,6 @@ class Admin_BibnumControllerIndexTest extends Admin_AbstractControllerTestCase { } - /** @test */ - public function diMusicThumbnailShouldBePresent() { - $this->assertXPath('//img[contains(@src, "diMusic.png")]'); - } - - - /** @test */ - public function diMusicDescriptionShouldBePresent() { - $this->assertXPathContentContains('//td', '1D touch'); - } - - /** @test */ public function europresseShouldBeActivatedByProvider() { $this->assertNotXPath('//table[@class="digital_connectors"]//tr[@data-code="europresse"]/td//div[@class="enabled"]'); diff --git a/tests/library/Class/Migration/DigitalResource/1DTouchTest.php b/tests/library/Class/Migration/DigitalResource/1DTouchTest.php index 820fc103cbc50d551e3264e646fdc9ae13c81eb3..3a79135e5ad2bda76e30ad476ffa4be605f53eea 100644 --- a/tests/library/Class/Migration/DigitalResource/1DTouchTest.php +++ b/tests/library/Class/Migration/DigitalResource/1DTouchTest.php @@ -19,9 +19,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -class Class_Migration_DigitialResource_1DTouchTest extends ModelTestCase { - +abstract class Class_Migration_DigitialResource_1DTouchTestCase extends ModelTestCase { protected $_storm_default_to_volatile = true, $_migration; @@ -35,6 +33,24 @@ class Class_Migration_DigitialResource_1DTouchTest extends ModelTestCase { Class_DigitalResource::resetInstance(); + $this->fixture('Class_CodifTypeDoc', ['id' => 114]); + } + + + public function tearDown() { + Class_DigitalResource::resetInstance(); + parent::tearDown(); + } +} + + + +class Class_Migration_DigitialResource_1DTouchActivatedTest + extends Class_Migration_DigitialResource_1DTouchTestCase { + + public function setUp() { + parent::setUp(); + $profil_adulte = $this->fixture('Class_Profil', ['id' => 22, 'parent_id' => null, @@ -84,23 +100,15 @@ class Class_Migration_DigitialResource_1DTouchTest extends ModelTestCase { $this->fixture('Class_Notice', ['id' => 654, - 'facettes' => 'T114 LFR', + 'facettes' => 'A67114 T114 LFre', 'type_doc' => 114]); - $this->fixture('Class_CodifTypeDoc', - ['id' => 114]); - $this->_migration = (new Class_Migration_DigitalResource_1DTouch) ->setMemoryCleaner(function() {}) ->run(); } - public function tearDown() { - Class_DigitalResource::resetInstance(); - parent::tearDown(); - } - /** @test */ public function updateMeDocAlbumTypeIdShouldBeDiMusic() { @@ -137,7 +145,7 @@ class Class_Migration_DigitialResource_1DTouchTest extends ModelTestCase { /** @test */ public function recordFacetsShouldBeTDiMusicLFr() { - $this->assertEquals('TDiMusic LFR', Class_Notice::find(654)->getFacettes()); + $this->assertEquals('A67114 LFre TDiMusic', Class_Notice::find(654)->getFacettes()); } @@ -216,3 +224,47 @@ class Class_Migration_DigitialResource_1DTouchTest extends ModelTestCase { $this->assertNull(Class_CodifTypeDoc::findFirstBy(['type_doc_id' => 114])); } } + + + +class Class_Migration_DigitialResource_1DTouchNotActivatedTest + extends Class_Migration_DigitialResource_1DTouchTestCase { + + public function setUp() { + parent::setUp(); + + $this->fixture('Class_AdminVar', + ['id' => 'ONEDTOUCH_URL', + 'valeur' => '']); + + $this->fixture('Class_AdminVar', + ['id' => 'ONEDTOUCH_ID', + 'valeur' => '']); + + $this->fixture('Class_AdminVar', + ['id' => 'ONEDTOUCH_VERSION_URL', + 'valeur' => '']); + + $this->_migration = (new Class_Migration_DigitalResource_1DTouch) + ->setMemoryCleaner(function() {}) + ->run(); + } + + + /** @test */ + public function ssoUrlShouldNotBeSet() { + $this->assertNull(Class_AdminVar::get('DiMusic_Sso_Url')); + } + + + /** @test */ + public function harvestUrlShouldNotBeSet() { + $this->assertNull(Class_AdminVar::get('DiMusic_Harvest_Url')); + } + + + /** @test */ + public function idShouldNotBeSet() { + $this->assertEquals('', Class_AdminVar::get('DiMusic_Id')); + } +} \ No newline at end of file