package com.craigvg.lichun_android.navigation import android.net.Uri import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner @RunWith(RobolectricTestRunner::class) class DeepLinkManagerTest { private fun uri(path: String): Uri = Uri.parse("baolife://$path") @Test fun `parse home route`() { val result = DeepLinkManager.parse(uri("home")) assertEquals(DeepLinkRoute.Home, result) } @Test fun `parse activities route`() { val result = DeepLinkManager.parse(uri("activities")) assertEquals(DeepLinkRoute.Activities, result) } @Test fun `parse social route`() { val result = DeepLinkManager.parse(uri("social")) assertTrue(result is DeepLinkRoute.Social) assertNull((result as DeepLinkRoute.Social).segment) } @Test fun `parse social dating route`() { val result = DeepLinkManager.parse(uri("social/dating")) assertTrue(result is DeepLinkRoute.Social) assertEquals(DeepLinkRoute.SocialSegment.DATING, (result as DeepLinkRoute.Social).segment) } @Test fun `parse social messages route`() { val result = DeepLinkManager.parse(uri("social/messages")) assertTrue(result is DeepLinkRoute.Social) assertEquals(DeepLinkRoute.SocialSegment.MESSAGES, (result as DeepLinkRoute.Social).segment) } @Test fun `parse store route`() { assertEquals(DeepLinkRoute.Store, DeepLinkManager.parse(uri("store"))) } @Test fun `parse achievements route`() { assertEquals(DeepLinkRoute.Achievements, DeepLinkManager.parse(uri("achievements"))) } @Test fun `parse characters route`() { assertEquals(DeepLinkRoute.Characters, DeepLinkManager.parse(uri("characters"))) } @Test fun `parse daily-rewards route`() { assertEquals(DeepLinkRoute.DailyRewards, DeepLinkManager.parse(uri("daily-rewards"))) } @Test fun `parse daily-quests route`() { assertEquals(DeepLinkRoute.DailyQuests, DeepLinkManager.parse(uri("daily-quests"))) } @Test fun `parse skip-onboarding route`() { assertEquals(DeepLinkRoute.SkipOnboarding, DeepLinkManager.parse(uri("skip-onboarding"))) } @Test fun `parse set-age route with age parameter`() { val result = DeepLinkManager.parse(Uri.parse("baolife://set-age?age=25")) assertTrue(result is DeepLinkRoute.SetAge) assertEquals(25, (result as DeepLinkRoute.SetAge).age) } @Test fun `parse debug preset route`() { val result = DeepLinkManager.parse(uri("debug/preset/youngAdult")) assertTrue(result is DeepLinkRoute.DebugPreset) assertEquals("youngAdult", (result as DeepLinkRoute.DebugPreset).preset) } @Test fun `parse returns null for invalid scheme`() { val result = DeepLinkManager.parse(Uri.parse("https://home")) assertNull(result) } @Test fun `parse returns null for unknown host`() { val result = DeepLinkManager.parse(uri("nonexistent")) assertNull(result) } @Test fun `buildUri roundtrip for home`() { val route = DeepLinkRoute.Home val rebuilt = DeepLinkManager.parse(DeepLinkManager.buildUri(route)) assertEquals(route, rebuilt) } @Test fun `buildUri roundtrip for social dating`() { val route = DeepLinkRoute.Social(DeepLinkRoute.SocialSegment.DATING) val rebuilt = DeepLinkManager.parse(DeepLinkManager.buildUri(route)) assertEquals(route, rebuilt) } @Test fun `buildUri roundtrip for set-age`() { val route = DeepLinkRoute.SetAge(25) val rebuilt = DeepLinkManager.parse(DeepLinkManager.buildUri(route)) assertEquals(route, rebuilt) } @Test fun `buildUri roundtrip for debug preset`() { val route = DeepLinkRoute.DebugPreset("lowEnergy") val rebuilt = DeepLinkManager.parse(DeepLinkManager.buildUri(route)) assertEquals(route, rebuilt) } }