@@ -23,6 +23,7 @@ import android.arch.lifecycle.Observer
2323import android.arch.persistence.room.Room
2424import android.net.Uri
2525import android.support.test.InstrumentationRegistry
26+ import android.view.MenuItem
2627import android.view.View
2728import com.duckduckgo.app.autocomplete.api.AutoCompleteApi
2829import com.duckduckgo.app.bookmarks.db.BookmarkEntity
@@ -51,7 +52,7 @@ import org.junit.Before
5152import org.junit.Rule
5253import org.junit.Test
5354import org.mockito.*
54- import org.mockito.ArgumentCaptor.forClass
55+ import org.mockito.ArgumentMatchers.anyString
5556import org.mockito.Mockito.never
5657import org.mockito.Mockito.verify
5758
@@ -91,11 +92,18 @@ class BrowserViewModelTest {
9192 @Mock
9293 private lateinit var bookmarksDao: BookmarksDao
9394
95+ @Mock
96+ private lateinit var mockLongPressHandler: LongPressHandler
97+
98+ @Mock
99+ private lateinit var mockOmnibarConverter: OmnibarEntryConverter
100+
101+ @Captor
102+ private lateinit var commandCaptor: ArgumentCaptor <Command >
103+
94104 private lateinit var db: AppDatabase
95105 private lateinit var appConfigurationDao: AppConfigurationDao
96106
97- private val mockOmnibarConverter: OmnibarEntryConverter = mock()
98-
99107 private lateinit var testee: BrowserViewModel
100108
101109 @Before
@@ -117,6 +125,7 @@ class BrowserViewModelTest {
117125 autoCompleteApi = mockAutoCompleteApi,
118126 appSettingsPreferencesStore = mockSettingsStore,
119127 bookmarksDao = bookmarksDao,
128+ longPressHandler = mockLongPressHandler,
120129 appConfigurationDao = appConfigurationDao)
121130
122131 testee.url.observeForever(mockQueryObserver)
@@ -241,10 +250,9 @@ class BrowserViewModelTest {
241250 @Test
242251 fun whenSharedTextReceivedThenNavigationTriggered () {
243252 testee.onSharedTextReceived(" http://example.com" )
244- val captor: ArgumentCaptor <Command > = forClass(Command ::class .java)
245- verify(mockCommandObserver, times(2 )).onChanged(captor.capture())
246- assertNotNull(captor.value)
247- assertTrue(captor.value is Navigate )
253+ verify(mockCommandObserver, times(2 )).onChanged(commandCaptor.capture())
254+ assertNotNull(commandCaptor.value)
255+ assertTrue(commandCaptor.value is Navigate )
248256 }
249257
250258 @Test
@@ -395,10 +403,9 @@ class BrowserViewModelTest {
395403
396404 @Test
397405 fun whenEnteringNonEmptyQueryThenHideKeyboardCommandIssued () {
398- val captor = ArgumentCaptor .forClass(BrowserViewModel .Command ::class .java)
399406 testee.onUserSubmittedQuery(" foo" )
400- verify(mockCommandObserver, Mockito .atLeastOnce()).onChanged(captor .capture())
401- assertTrue(captor .value == Command .HideKeyboard )
407+ verify(mockCommandObserver, Mockito .atLeastOnce()).onChanged(commandCaptor .capture())
408+ assertTrue(commandCaptor .value == Command .HideKeyboard )
402409 }
403410
404411 @Test
@@ -410,11 +417,10 @@ class BrowserViewModelTest {
410417
411418 @Test
412419 fun whenNotifiedEnteringFullScreenThenEnterFullScreenCommandIssued () {
413- val captor = ArgumentCaptor .forClass(BrowserViewModel .Command ::class .java)
414420 val stubView = View (InstrumentationRegistry .getTargetContext())
415421 testee.goFullScreen(stubView)
416- verify(mockCommandObserver, Mockito .atLeastOnce()).onChanged(captor .capture())
417- assertTrue(captor .lastValue is Command .ShowFullScreen )
422+ verify(mockCommandObserver, Mockito .atLeastOnce()).onChanged(commandCaptor .capture())
423+ assertTrue(commandCaptor .lastValue is Command .ShowFullScreen )
418424 }
419425
420426 @Test
@@ -427,4 +433,18 @@ class BrowserViewModelTest {
427433 fun whenViewModelInitialisedThenFullScreenFlagIsDisabled () {
428434 assertFalse(testee.viewState.value!! .isFullScreen)
429435 }
436+
437+ @Test
438+ fun whenUserSelectsDownloadImageOptionFromContextMenuThenDownloadFileCommandIssued () {
439+ whenever(mockLongPressHandler.userSelectedMenuItem(anyString(), any()))
440+ .thenReturn(LongPressHandler .RequiredAction .DownloadFile (" example.com" ))
441+
442+ val mockMenuItem : MenuItem = mock()
443+ testee.userSelectedItemFromLongPressMenu(" example.com" , mockMenuItem)
444+ verify(mockCommandObserver, Mockito .atLeastOnce()).onChanged(commandCaptor.capture())
445+ assertTrue(commandCaptor.lastValue is Command .DownloadImage )
446+
447+ val lastCommand = commandCaptor.lastValue as Command .DownloadImage
448+ assertEquals(" example.com" , lastCommand.url)
449+ }
430450}
0 commit comments