diff --git a/libs/client/MockClientAPITest.cpp b/libs/client/MockClientAPITest.cpp
index 6c733d809050b4e2a127ccc8906260ffc037f845..b3bf6893dad1465c541f66020e60661665d878f9 100644
--- a/libs/client/MockClientAPITest.cpp
+++ b/libs/client/MockClientAPITest.cpp
@@ -342,7 +342,7 @@ TEST_F(cta_client_MockClientAPITest, deleteStorageClass_existing) {
   }
 }
 
-TEST_F(cta_client_MockClientAPITest, deleteStorageClass_in_use) {
+TEST_F(cta_client_MockClientAPITest, deleteStorageClass_in_use_by_directory) {
   using namespace cta;
 
   TestingMockClientAPI api;
@@ -354,10 +354,11 @@ TEST_F(cta_client_MockClientAPITest, deleteStorageClass_in_use) {
     ASSERT_TRUE(storageClasses.empty());
   }
 
-  const std::string name = "TestStorageClass";
+  const std::string storageClassName = "TestStorageClass";
   const uint8_t nbCopies = 2;
   const std::string comment = "Comment";
-  ASSERT_NO_THROW(api.createStorageClass(requester, name, nbCopies, comment));
+  ASSERT_NO_THROW(api.createStorageClass(requester, storageClassName, nbCopies,
+    comment));
 
   {
     std::list<StorageClass> storageClasses;
@@ -366,13 +367,15 @@ TEST_F(cta_client_MockClientAPITest, deleteStorageClass_in_use) {
 
     StorageClass storageClass;
     ASSERT_NO_THROW(storageClass = storageClasses.front());
-    ASSERT_EQ(name, storageClass.getName());
+    ASSERT_EQ(storageClassName, storageClass.getName());
     ASSERT_EQ(nbCopies, storageClass.getNbCopies());
   }
 
-  ASSERT_NO_THROW(api.setDirectoryStorageClass(requester, "/", name));
+  ASSERT_NO_THROW(api.setDirectoryStorageClass(requester, "/",
+    storageClassName));
 
-  ASSERT_THROW(api.deleteStorageClass(requester, name), std::exception);
+  ASSERT_THROW(api.deleteStorageClass(requester, storageClassName),
+    std::exception);
 
   {
     std::list<StorageClass> storageClasses;
@@ -381,9 +384,109 @@ TEST_F(cta_client_MockClientAPITest, deleteStorageClass_in_use) {
 
     StorageClass storageClass;
     ASSERT_NO_THROW(storageClass = storageClasses.front());
-    ASSERT_EQ(name, storageClass.getName());
+    ASSERT_EQ(storageClassName, storageClass.getName());
+    ASSERT_EQ(nbCopies, storageClass.getNbCopies());
+  }
+
+  ASSERT_NO_THROW(api.clearDirectoryStorageClass(requester, "/"));
+
+  ASSERT_NO_THROW(api.deleteStorageClass(requester, storageClassName));
+
+  {
+    std::list<StorageClass> storageClasses;
+    ASSERT_NO_THROW(storageClasses = api.getStorageClasses(requester));
+    ASSERT_TRUE(storageClasses.empty());
+  }
+}
+
+TEST_F(cta_client_MockClientAPITest, deleteStorageClass_in_use_by_route) {
+  using namespace cta;
+
+  TestingMockClientAPI api;
+  const SecurityIdentity requester;
+
+  {
+    std::list<StorageClass> storageClasses;
+    ASSERT_NO_THROW(storageClasses = api.getStorageClasses(requester));
+    ASSERT_TRUE(storageClasses.empty());
+  }
+
+  const std::string storageClassName = "TestStorageClass";
+  const uint8_t nbCopies = 2;
+  const std::string comment = "Comment";
+  ASSERT_NO_THROW(api.createStorageClass(requester, storageClassName, nbCopies,
+    comment));
+
+  {
+    std::list<StorageClass> storageClasses;
+    ASSERT_NO_THROW(storageClasses = api.getStorageClasses(requester));
+    ASSERT_EQ(1, storageClasses.size());
+
+    StorageClass storageClass;
+    ASSERT_NO_THROW(storageClass = storageClasses.front());
+    ASSERT_EQ(storageClassName, storageClass.getName());
+    ASSERT_EQ(nbCopies, storageClass.getNbCopies());
+  }
+
+  const std::string tapePoolName = "TestTapePool";
+  ASSERT_NO_THROW(api.createTapePool(requester, tapePoolName, comment));
+
+  {
+    std::list<TapePool> tapePools;
+    ASSERT_NO_THROW(tapePools = api.getTapePools(requester));
+    ASSERT_EQ(1, tapePools.size());
+
+    TapePool tapePool;
+    ASSERT_NO_THROW(tapePool = tapePools.front());
+    ASSERT_EQ(tapePoolName, tapePool.getName());
+  }
+
+  const uint8_t copyNb = 1;
+  ASSERT_NO_THROW(api.createMigrationRoute(requester, storageClassName,
+    copyNb, tapePoolName, comment));
+
+  {
+    std::list<MigrationRoute> migrationRoutes;
+    ASSERT_NO_THROW(migrationRoutes = api.getMigrationRoutes(requester));
+    ASSERT_EQ(1, migrationRoutes.size());
+
+    MigrationRoute migrationRoute;
+    ASSERT_NO_THROW(migrationRoute = migrationRoutes.front());
+    ASSERT_EQ(storageClassName, migrationRoute.getStorageClassName());
+    ASSERT_EQ(copyNb, migrationRoute.getCopyNb());
+    ASSERT_EQ(tapePoolName, migrationRoute.getTapePoolName());
+  }
+
+  ASSERT_THROW(api.deleteStorageClass(requester, storageClassName),
+    std::exception);
+
+  {
+    std::list<StorageClass> storageClasses;
+    ASSERT_NO_THROW(storageClasses = api.getStorageClasses(requester));
+    ASSERT_EQ(1, storageClasses.size());
+
+    StorageClass storageClass;
+    ASSERT_NO_THROW(storageClass = storageClasses.front());
+    ASSERT_EQ(storageClassName, storageClass.getName());
     ASSERT_EQ(nbCopies, storageClass.getNbCopies());
   }
+
+  ASSERT_NO_THROW(api.deleteMigrationRoute(requester, storageClassName,
+    copyNb));
+
+  {
+    std::list<MigrationRoute> migrationRoutes;
+    ASSERT_NO_THROW(migrationRoutes = api.getMigrationRoutes(requester));
+    ASSERT_TRUE(migrationRoutes.empty());
+  }
+
+  ASSERT_NO_THROW(api.deleteStorageClass(requester, storageClassName));
+
+  {
+    std::list<StorageClass> storageClasses;
+    ASSERT_NO_THROW(storageClasses = api.getStorageClasses(requester));
+    ASSERT_TRUE(storageClasses.empty());
+  }
 }
 
 TEST_F(cta_client_MockClientAPITest, deleteStorageClass_non_existing) {
@@ -736,7 +839,7 @@ TEST_F(cta_client_MockClientAPITest, deleteMigrationRoute_existing) {
     std::list<MigrationRoute> migrationRoutes;
     ASSERT_NO_THROW(migrationRoutes = api.getMigrationRoutes(requester));
     ASSERT_TRUE(migrationRoutes.empty());
-  } 
+  }
 }
 
 TEST_F(cta_client_MockClientAPITest, deleteMigrationRoute_non_existing) {