Skip to content

Commit

Permalink
Only migrate bookmarks to books with the same flavour.
Browse files Browse the repository at this point in the history
If there is no book with the same flavour, but book with same name and
different flavour, we do the migration to the other book.
  • Loading branch information
mgautierfr committed Jan 22, 2024
1 parent c66c1d9 commit b3eb9e0
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 11 deletions.
7 changes: 6 additions & 1 deletion src/library.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,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];
Expand All @@ -221,7 +226,7 @@ int Library::migrateBookmarks(const std::string& source) {
}

std::string betterBook = getBestTargetBookId(firstBookmarkToChange);

if (betterBook.empty()) {
return 0;
}
Expand Down
32 changes: 22 additions & 10 deletions test/library.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,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));
Expand All @@ -517,88 +518,99 @@ TEST_F(LibraryTest, MigrateBookmark)
wrongIdBookmarkNoName.setBookName("");
lib->addBookmark(wrongIdBookmarkNoName);

auto wrongIdFlavourBookmark = createBookmark(book1Flavour);
wrongIdFlavourBookmark.setBookId("wrong-bookmark-flavour-id");
lib->addBookmark(wrongIdFlavourBookmark);

auto onlyValidBookmarks = lib->getBookmarks();
auto allBookmarks = lib->getBookmarks(false);

ASSERT_EQ(onlyValidBookmarks.size(), 2);
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-bookmark-id");
EXPECT_EQ(allBookmarks[2].getBookId(), bookId2);
EXPECT_EQ(allBookmarks[3].getBookId(), "wrong-bookmark-id");
EXPECT_EQ(allBookmarks[4].getBookId(), "wrong-bookmark-id-noname");
EXPECT_EQ(allBookmarks[5].getBookId(), "wrong-bookmark-flavour-id");

ASSERT_EQ(lib->migrateBookmarks(), 2);
ASSERT_EQ(lib->migrateBookmarks(), 3);

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+"_date");
EXPECT_EQ(onlyValidBookmarks[3].getBookId(), bookId2);
EXPECT_EQ(onlyValidBookmarks[4].getBookId(), bookId1+"_date_flavour");

ASSERT_EQ(allBookmarks.size(), 5);
ASSERT_EQ(allBookmarks.size(), 6);
EXPECT_EQ(allBookmarks[0].getBookId(), bookId1);
EXPECT_EQ(allBookmarks[1].getBookId(), "invalid-bookmark-id");
EXPECT_EQ(allBookmarks[2].getBookId(), bookId2);
EXPECT_EQ(allBookmarks[3].getBookId(), bookId1+"_date");
EXPECT_EQ(allBookmarks[4].getBookId(), bookId2);
EXPECT_EQ(allBookmarks[5].getBookId(), bookId1+"_date_flavour");

ASSERT_EQ(lib->migrateBookmarks(), 0);

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+"_date");
EXPECT_EQ(allBookmarks[1].getBookId(), "invalid-bookmark-id");
EXPECT_EQ(allBookmarks[2].getBookId(), bookId2);
EXPECT_EQ(allBookmarks[3].getBookId(), bookId1+"_date");
EXPECT_EQ(allBookmarks[4].getBookId(), bookId2);
EXPECT_EQ(allBookmarks[5].getBookId(), bookId1+"_date_flavour");

ASSERT_EQ(lib->migrateBookmarks(bookId1, bookId2), 0); // No more bookId1 bookmark

ASSERT_EQ(lib->migrateBookmarks(bookId1+"_date", bookId2), 2);
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+"_date_flavour");


ASSERT_EQ(allBookmarks.size(), 5);
ASSERT_EQ(allBookmarks.size(), 6);
EXPECT_EQ(allBookmarks[0].getBookId(), bookId2);
EXPECT_EQ(allBookmarks[1].getBookId(), "invalid-bookmark-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+"_date_flavour");

ASSERT_EQ(lib->migrateBookmarks("invalid-bookmark-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+"_date_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+"_date_flavour");
}


Expand Down

0 comments on commit b3eb9e0

Please sign in to comment.