diff --git a/src/library.cpp b/src/library.cpp index a8336fe9f..3aa6157a1 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -202,6 +202,11 @@ std::string Library::getBestTargetBookId(const Bookmark& bookmark) const { return ""; } if (targetBooks.size() != 1) { + // We have several, reduce to same flavour + auto flavouredTargetBooks = filter(book_filter.flavour(bookmark.getBookFlavour())); + if (!flavouredTargetBooks.empty()) { + targetBooks = flavouredTargetBooks; + } sort(targetBooks, DATE, false); } return targetBooks[0]; @@ -223,7 +228,7 @@ int Library::migrateBookmarks(const std::string& sourceBookId) { } std::string betterBook = getBestTargetBookId(firstBookmarkToChange); - + if (betterBook.empty()) { return 0; } diff --git a/test/library.cpp b/test/library.cpp index 5c55f2057..5ed3ff498 100644 --- a/test/library.cpp +++ b/test/library.cpp @@ -504,6 +504,7 @@ TEST_F(LibraryTest, MigrateBookmark) std::string bookId2 = "0189d9be-2fd0-b4b6-7300-20fab0b5cdc8"; auto book1 = lib->getBookById(bookId1); + auto book1Flavour = lib->getBookById(bookId1+"_flavour"); auto book2 = lib->getBookById(bookId2); lib->addBookmark(createBookmark(book1)); @@ -519,6 +520,10 @@ TEST_F(LibraryTest, MigrateBookmark) wrongIdBookmarkNoName.setBookName(""); lib->addBookmark(wrongIdBookmarkNoName); + auto wrongIdFlavourBookmark = createBookmark(book1Flavour); + wrongIdFlavourBookmark.setBookId("wrong-book-flavour-id"); + lib->addBookmark(wrongIdFlavourBookmark); + auto onlyValidBookmarks = lib->getBookmarks(); auto allBookmarks = lib->getBookmarks(false); @@ -526,43 +531,47 @@ TEST_F(LibraryTest, MigrateBookmark) EXPECT_EQ(onlyValidBookmarks[0].getBookId(), bookId1); EXPECT_EQ(onlyValidBookmarks[1].getBookId(), bookId2); - ASSERT_EQ(allBookmarks.size(), 5); + ASSERT_EQ(allBookmarks.size(), 6); EXPECT_EQ(allBookmarks[0].getBookId(), bookId1); EXPECT_EQ(allBookmarks[1].getBookId(), "invalid-book-id"); EXPECT_EQ(allBookmarks[2].getBookId(), bookId2); EXPECT_EQ(allBookmarks[3].getBookId(), "wrong-book-id"); EXPECT_EQ(allBookmarks[4].getBookId(), "wrong-book-id-noname"); + EXPECT_EQ(allBookmarks[5].getBookId(), "wrong-book-flavour-id"); ASSERT_EQ(lib->migrateBookmarks("no-existant-book"), 0); - ASSERT_EQ(lib->migrateBookmarks(), std::make_tuple(2, 3)); + ASSERT_EQ(lib->migrateBookmarks(), std::make_tuple(3, 4)); onlyValidBookmarks = lib->getBookmarks(); allBookmarks = lib->getBookmarks(false); - ASSERT_EQ(onlyValidBookmarks.size(), 4); + ASSERT_EQ(onlyValidBookmarks.size(), 5); EXPECT_EQ(onlyValidBookmarks[0].getBookId(), bookId1); EXPECT_EQ(onlyValidBookmarks[1].getBookId(), bookId2); EXPECT_EQ(onlyValidBookmarks[2].getBookId(), bookId1+"_updated1yearlater"); EXPECT_EQ(onlyValidBookmarks[3].getBookId(), bookId2); + EXPECT_EQ(onlyValidBookmarks[4].getBookId(), bookId1+"_updated1yearlater_flavour"); - ASSERT_EQ(allBookmarks.size(), 5); + ASSERT_EQ(allBookmarks.size(), 6); EXPECT_EQ(allBookmarks[0].getBookId(), bookId1); EXPECT_EQ(allBookmarks[1].getBookId(), "invalid-book-id"); EXPECT_EQ(allBookmarks[2].getBookId(), bookId2); EXPECT_EQ(allBookmarks[3].getBookId(), bookId1+"_updated1yearlater"); EXPECT_EQ(allBookmarks[4].getBookId(), bookId2); + EXPECT_EQ(allBookmarks[5].getBookId(), bookId1+"_updated1yearlater_flavour"); ASSERT_EQ(lib->migrateBookmarks(), std::make_tuple(0, 1)); ASSERT_EQ(lib->migrateBookmarks(bookId1), 1); allBookmarks = lib->getBookmarks(false); - ASSERT_EQ(allBookmarks.size(), 5); + ASSERT_EQ(allBookmarks.size(), 6); EXPECT_EQ(allBookmarks[0].getBookId(), bookId1+"_updated1yearlater"); EXPECT_EQ(allBookmarks[1].getBookId(), "invalid-book-id"); EXPECT_EQ(allBookmarks[2].getBookId(), bookId2); EXPECT_EQ(allBookmarks[3].getBookId(), bookId1+"_updated1yearlater"); EXPECT_EQ(allBookmarks[4].getBookId(), bookId2); + EXPECT_EQ(allBookmarks[5].getBookId(), bookId1+"_updated1yearlater_flavour"); ASSERT_EQ(lib->migrateBookmarks(bookId1, bookId2), 0); // No more bookId1 bookmark @@ -570,39 +579,42 @@ TEST_F(LibraryTest, MigrateBookmark) onlyValidBookmarks = lib->getBookmarks(); allBookmarks = lib->getBookmarks(false); - ASSERT_EQ(onlyValidBookmarks.size(), 4); + ASSERT_EQ(onlyValidBookmarks.size(), 5); EXPECT_EQ(onlyValidBookmarks[0].getBookId(), bookId2); EXPECT_EQ(onlyValidBookmarks[1].getBookId(), bookId2); EXPECT_EQ(onlyValidBookmarks[2].getBookId(), bookId2); EXPECT_EQ(onlyValidBookmarks[3].getBookId(), bookId2); + EXPECT_EQ(onlyValidBookmarks[4].getBookId(), bookId1+"_updated1yearlater_flavour"); - - ASSERT_EQ(allBookmarks.size(), 5); + ASSERT_EQ(allBookmarks.size(), 6); EXPECT_EQ(allBookmarks[0].getBookId(), bookId2); EXPECT_EQ(allBookmarks[1].getBookId(), "invalid-book-id"); EXPECT_EQ(allBookmarks[2].getBookId(), bookId2); EXPECT_EQ(allBookmarks[3].getBookId(), bookId2); EXPECT_EQ(allBookmarks[4].getBookId(), bookId2); + EXPECT_EQ(allBookmarks[5].getBookId(), bookId1+"_updated1yearlater_flavour"); ASSERT_EQ(lib->migrateBookmarks("invalid-book-id", bookId1), 1); onlyValidBookmarks = lib->getBookmarks(); allBookmarks = lib->getBookmarks(false); - ASSERT_EQ(onlyValidBookmarks.size(), 5); + ASSERT_EQ(onlyValidBookmarks.size(), 6); EXPECT_EQ(onlyValidBookmarks[0].getBookId(), bookId2); EXPECT_EQ(onlyValidBookmarks[1].getBookId(), bookId1); EXPECT_EQ(onlyValidBookmarks[2].getBookId(), bookId2); EXPECT_EQ(onlyValidBookmarks[3].getBookId(), bookId2); EXPECT_EQ(onlyValidBookmarks[4].getBookId(), bookId2); + EXPECT_EQ(onlyValidBookmarks[5].getBookId(), bookId1+"_updated1yearlater_flavour"); - ASSERT_EQ(allBookmarks.size(), 5); + ASSERT_EQ(allBookmarks.size(), 6); EXPECT_EQ(allBookmarks[0].getBookId(), bookId2); EXPECT_EQ(allBookmarks[1].getBookId(), bookId1); EXPECT_EQ(allBookmarks[2].getBookId(), bookId2); EXPECT_EQ(allBookmarks[3].getBookId(), bookId2); EXPECT_EQ(allBookmarks[4].getBookId(), bookId2); + EXPECT_EQ(allBookmarks[5].getBookId(), bookId1+"_updated1yearlater_flavour"); }