@@ -38,11 +38,12 @@ import org.junit.Assert.assertThrows
3838import org.junit.Test
3939import org.mockito.Mockito.mock
4040import org.mockito.Mockito.`when`
41+ import java.util.Optional
4142
4243class DeepLinkViewModelTest : KSRobolectricTestCase () {
4344 lateinit var vm: SplashScreenViewModel .DeepLinkViewModel
4445 private val startBrowser = TestSubscriber <String >()
45- private val startDiscoveryActivity = TestSubscriber <Unit >()
46+ private val startDiscoveryActivity = TestSubscriber <Optional < Uri > >()
4647 private val startProjectActivity = TestSubscriber <Uri >()
4748 private val startProjectActivityForCheckout = TestSubscriber <Uri >()
4849 private val startProjectActivityForComment = TestSubscriber <Uri >()
@@ -137,7 +138,7 @@ class DeepLinkViewModelTest : KSRobolectricTestCase() {
137138 )
138139
139140 startBrowser.assertNoValues()
140- startDiscoveryActivity.assertValue( Unit )
141+ startDiscoveryActivity.assertValue { it.isEmpty }
141142 startProjectActivity.assertNoValues()
142143 startProjectActivityForCheckout.assertNoValues()
143144 startProjectActivityForComment.assertNoValues()
@@ -179,7 +180,7 @@ class DeepLinkViewModelTest : KSRobolectricTestCase() {
179180 )
180181
181182 startBrowser.assertNoValues()
182- startDiscoveryActivity.assertValue( Unit )
183+ startDiscoveryActivity.assertValue { it.isEmpty }
183184 startProjectActivity.assertNoValues()
184185 startProjectActivityForCheckout.assertNoValues()
185186 startProjectActivityForComment.assertNoValues()
@@ -215,7 +216,7 @@ class DeepLinkViewModelTest : KSRobolectricTestCase() {
215216 )
216217
217218 startBrowser.assertNoValues()
218- startDiscoveryActivity.assertValue( Unit )
219+ startDiscoveryActivity.assertValue { it.isEmpty }
219220 startProjectActivity.assertNoValues()
220221 startProjectActivityForCheckout.assertNoValues()
221222 startProjectActivityForComment.assertNoValues()
@@ -292,7 +293,7 @@ class DeepLinkViewModelTest : KSRobolectricTestCase() {
292293 vm.runInitializations()
293294
294295 startBrowser.assertNoValues()
295- startDiscoveryActivity.assertValue( Unit )
296+ startDiscoveryActivity.assertValue { it.isEmpty }
296297 startProjectActivity.assertNoValues()
297298 startProjectActivityForCheckout.assertNoValues()
298299 startProjectActivityForComment.assertNoValues()
@@ -302,6 +303,77 @@ class DeepLinkViewModelTest : KSRobolectricTestCase() {
302303 startPMOrderEditWebview.assertNoValues()
303304 }
304305
306+ @Test
307+ fun testBaseDiscoverDeeplink_OpensDiscovery () = runTest {
308+ val url = " https://www.kickstarter.com/discover"
309+
310+ var environment = environment().toBuilder().featureFlagClient(MockFeatureFlagClient ()).build()
311+ setUpEnvironment(intent = intentWithData(url), environment = environment)
312+
313+ vm.runInitializations()
314+
315+ startBrowser.assertNoValues()
316+ startDiscoveryActivity.assertValue { it.isPresent && it.get() == Uri .parse(url) }
317+ startProjectActivity.assertNoValues()
318+ startProjectActivityForCheckout.assertNoValues()
319+ startProjectActivityForComment.assertNoValues()
320+ startProjectActivityForUpdate.assertNoValues()
321+ startProjectActivityForCommentToUpdate.assertNoValues()
322+ startProjectActivityToSave.assertNoValues()
323+ startPreLaunchProjectActivity.assertNoValues()
324+ finishDeeplinkActivity.assertNoValues()
325+ startProjectSurveyActivity.assertNoValues()
326+ startPMOrderEditWebview.assertNoValues()
327+ }
328+
329+ @Test
330+ fun testDiscoverDeeplink_OpensDiscovery () = runTest {
331+ // This can be any URL whose path begins with `/discover/`
332+ val url =
333+ " https://www.kickstarter.com/discover/advanced?sort=newest&staff_picks=1&raised=1"
334+
335+ var environment = environment().toBuilder().featureFlagClient(MockFeatureFlagClient ()).build()
336+ setUpEnvironment(intent = intentWithData(url), environment = environment)
337+
338+ vm.runInitializations()
339+
340+ startBrowser.assertNoValues()
341+ startDiscoveryActivity.assertValue { it.isPresent && it.get() == Uri .parse(url) }
342+ startProjectActivity.assertNoValues()
343+ startProjectActivityForCheckout.assertNoValues()
344+ startProjectActivityForComment.assertNoValues()
345+ startProjectActivityForUpdate.assertNoValues()
346+ startProjectActivityForCommentToUpdate.assertNoValues()
347+ startProjectActivityToSave.assertNoValues()
348+ startPreLaunchProjectActivity.assertNoValues()
349+ finishDeeplinkActivity.assertNoValues()
350+ startProjectSurveyActivity.assertNoValues()
351+ startPMOrderEditWebview.assertNoValues()
352+ }
353+
354+ @Test
355+ fun testMalformedDiscoverDeeplink_OpensBrowser () = runTest {
356+ val url = " https://www.kickstarter.com/discovery/categories/games"
357+
358+ var environment = environment().toBuilder().featureFlagClient(MockFeatureFlagClient ()).build()
359+ setUpEnvironment(intent = intentWithData(url), environment = environment)
360+
361+ vm.runInitializations()
362+
363+ startBrowser.assertValue(url)
364+ startDiscoveryActivity.assertNoValues()
365+ startProjectActivity.assertNoValues()
366+ startProjectActivityForCheckout.assertNoValues()
367+ startProjectActivityForComment.assertNoValues()
368+ startProjectActivityForUpdate.assertNoValues()
369+ startProjectActivityForCommentToUpdate.assertNoValues()
370+ startProjectActivityToSave.assertNoValues()
371+ startPreLaunchProjectActivity.assertNoValues()
372+ finishDeeplinkActivity.assertNoValues()
373+ startProjectSurveyActivity.assertNoValues()
374+ startPMOrderEditWebview.assertNoValues()
375+ }
376+
305377 @Test
306378 fun testProjectPreviewLink_startsBrowser () {
307379 val url =
@@ -658,6 +730,9 @@ class DeepLinkViewModelTest : KSRobolectricTestCase() {
658730 }
659731
660732 @Test
733+ /* 2025-12-08 Not changing this test, but noting that this corresponds to the
734+ * `lastPathSegmentIsProjects()` method in the VM. Since this now overlaps with support for
735+ * other Discover deep links, we can target this case more precisely. */
661736 fun testDiscoveryDeepLink_startsDiscoveryActivity () {
662737 val url = " https://www.kickstarter.com/projects"
663738 var environment = environment().toBuilder().featureFlagClient(MockFeatureFlagClient ()).build()
0 commit comments