diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkComponent.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkComponent.kt index 4de81624e..0efa3a645 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkComponent.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkComponent.kt @@ -32,9 +32,10 @@ class BookmarkComponent( is BookmarkChange.Change -> { val mode = if (state.mode is BookmarkState.Mode.Selecting) { - BookmarkState.Mode.Selecting(state.mode.selectedItems.filter { + val items = state.mode.selectedItems.filter { it in change.tree - }.toSet()) + }.toSet() + if (items.isEmpty()) BookmarkState.Mode.Normal else BookmarkState.Mode.Selecting(items) } else state.mode state.copy(tree = change.tree, mode = mode) } diff --git a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkComponentTest.kt b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkComponentTest.kt index 0c51d9983..eff1f6ba3 100644 --- a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkComponentTest.kt +++ b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkComponentTest.kt @@ -22,7 +22,7 @@ import org.mozilla.fenix.mvi.getManagedEmitter class BookmarkComponentTest { - private lateinit var bookmarkComponent: BookmarkComponentTest.TestBookmarkComponent + private lateinit var bookmarkComponent: TestBookmarkComponent private lateinit var bookmarkObserver: TestObserver private lateinit var emitter: Observer @@ -32,7 +32,7 @@ class BookmarkComponentTest { TestUtils.setRxSchedulers() bookmarkComponent = spyk( - BookmarkComponentTest.TestBookmarkComponent(mockk(), TestUtils.bus), + TestBookmarkComponent(mockk(), TestUtils.bus), recordPrivateCalls = true ) bookmarkObserver = bookmarkComponent.internalRender(bookmarkComponent.reducer).test() @@ -62,6 +62,29 @@ class BookmarkComponentTest { ) } + @Test + fun `select and delete a bookmark`() { + val itemToSelect = BookmarkNode(BookmarkNodeType.ITEM, "234", "123", 0, "Mozilla", "http://mozilla.org", null) + val separator = BookmarkNode(BookmarkNodeType.SEPARATOR, "345", "123", 1, null, null, null) + val innerFolder = BookmarkNode(BookmarkNodeType.FOLDER, "456", "123", 2, "Web Browsers", null, null) + val tree = BookmarkNode( + BookmarkNodeType.FOLDER, "123", BookmarkRoot.Mobile.id, 0, "Best Sites", null, + listOf(itemToSelect, separator, innerFolder) + ) + + emitter.onNext(BookmarkChange.Change(tree)) + emitter.onNext(BookmarkChange.IsSelected(itemToSelect)) + emitter.onNext(BookmarkChange.Change(tree - itemToSelect.guid)) + + bookmarkObserver.assertSubscribed().awaitCount(2).assertNoErrors() + .assertValues( + BookmarkState(null, BookmarkState.Mode.Normal), + BookmarkState(tree, BookmarkState.Mode.Normal), + BookmarkState(tree, BookmarkState.Mode.Selecting(setOf(itemToSelect))), + BookmarkState(tree - itemToSelect.guid, BookmarkState.Mode.Normal) + ) + } + @Suppress("MemberVisibilityCanBePrivate") class TestBookmarkComponent(container: ViewGroup, bus: ActionBusFactory) : BookmarkComponent(container, bus) {