diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0fe9fc110..e5613f747 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,6 +48,14 @@ android:resource="@xml/shortcuts" /> + + + + (relaxed = true) + private val loadUrlUseCase = mockk(relaxed = true) + + @Test + fun `only match Fennec pinned shortcut Intents`() { + val processor = FennecBookmarkShortcutsIntentProcessor(sessionManager, loadUrlUseCase) + + assertAll { + assertThat(processor.matches(Intent(ACTION_FENNEC_HOMESCREEN_SHORTCUT))).isTrue() + assertThat(processor.matches(Intent("ShouldNotMatch"))).isFalse() + assertThat(processor.matches(Intent())).isFalse() + } + } + + @Test + fun `do not process blank Intents`() = runBlocking { + val processor = FennecBookmarkShortcutsIntentProcessor(sessionManager, loadUrlUseCase) + val fennecShortcutsIntent = Intent(ACTION_FENNEC_HOMESCREEN_SHORTCUT) + fennecShortcutsIntent.data = Uri.parse("http://mozilla.org") + + val wasEmptyIntentProcessed = processor.matches(Intent()) + + assertThat(wasEmptyIntentProcessed).isFalse() + verify { + sessionManager wasNot Called + loadUrlUseCase wasNot Called + } + } + + @Test + fun `processing a Fennec shortcut Intent results in loading it's URL in a new Session`() = runBlocking { + mockkStatic(UUID::class) + // The Session constructor uses UUID.randomUUID().toString() as the default value for it's id field + every { UUID.randomUUID().toString() } returns "test" + val processor = FennecBookmarkShortcutsIntentProcessor(sessionManager, loadUrlUseCase) + val fennecShortcutsIntent = Intent(ACTION_FENNEC_HOMESCREEN_SHORTCUT) + val testUrl = "http://mozilla.org" + fennecShortcutsIntent.data = Uri.parse(testUrl) + val expectedSession = Session(testUrl, private = false, source = Session.Source.HOME_SCREEN) + + val wasIntentProcessed = processor.process(fennecShortcutsIntent) + + assertAll { + assertThat(wasIntentProcessed).isTrue() + assertThat(fennecShortcutsIntent.action).isEqualTo(Intent.ACTION_VIEW) + assertThat(fennecShortcutsIntent.getSessionId()).isEqualTo(expectedSession.id) + } + verifyAll { + sessionManager.add(expectedSession) + loadUrlUseCase(testUrl, expectedSession, EngineSession.LoadUrlFlags.external()) + } + } +}