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())
+ }
+ }
+}