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