@@ -403,6 +403,77 @@ class CardBrowserViewModelTest : JvmTest() {
403403 }
404404 }
405405
406+ @Test
407+ fun `EXTRA_DECK_ID intent opens the specified deck` () =
408+ runTest {
409+ val deckId = addDeck(" New" )
410+ val savedState = SavedStateHandle (mapOf (CardBrowserViewModel .EXTRA_DECK_ID to deckId))
411+ viewModel(savedStateHandle = savedState).apply {
412+ assertThat(" intent deck is selected" , deckId, equalTo(this .deckId))
413+ }
414+ }
415+
416+ @Test
417+ fun `EXTRA_DECK_ID intent persists deck to lastDeckIdRepository` () =
418+ runTest {
419+ val deckId = addDeck(" New" )
420+ val savedState = SavedStateHandle (mapOf (CardBrowserViewModel .EXTRA_DECK_ID to deckId))
421+ viewModel(savedStateHandle = savedState).apply {
422+ assertThat(" deck persisted for next launch" , lastDeckId, equalTo(deckId))
423+ }
424+ }
425+
426+ @Test
427+ fun `no EXTRA_DECK_ID falls back to lastDeckIdRepository` () =
428+ runTest {
429+ val deckId = addDeck(" Persisted" )
430+ viewModel(lastDeckId = deckId).apply {
431+ assertThat(" repository value is used" , deckId, equalTo(this .deckId))
432+ }
433+ }
434+
435+ @Test
436+ fun `EXTRA_DECK_ID for unknown deck falls back to lastDeckIdRepository` () =
437+ runTest {
438+ val persisted = addDeck(" Persisted" )
439+ val unknownDeckId: DeckId = 9_999_999_999L
440+ val savedState = SavedStateHandle (mapOf (CardBrowserViewModel .EXTRA_DECK_ID to unknownDeckId))
441+ viewModel(lastDeckId = persisted, savedStateHandle = savedState).apply {
442+ assertThat(" unknown intent deck is ignored" , persisted, equalTo(this .deckId))
443+ }
444+ }
445+
446+ @Test
447+ fun `user deck change survives process death` () =
448+ runTest {
449+ val intentDeckId = addDeck(" From intent" )
450+ val userDeckId = addDeck(" User selection" )
451+ val savedState = SavedStateHandle (mapOf (CardBrowserViewModel .EXTRA_DECK_ID to intentDeckId))
452+
453+ val persistentRepo =
454+ object : LastDeckIdRepository {
455+ override var lastDeckId: DeckId ? = null
456+ }
457+
458+ // setup: initial launch + select new deck
459+ viewModel(
460+ savedStateHandle = savedState,
461+ lastDeckIdRepository = persistentRepo,
462+ ).apply {
463+ assertThat(" intent honored on first launch" , deckId, equalTo(intentDeckId))
464+ setSelectedDeck(SelectableDeck .Deck (deckId = userDeckId, name = " User selection" ))
465+ assertThat(" user choice persisted to repository" , persistentRepo.lastDeckId, equalTo(userDeckId))
466+ }
467+
468+ // intent does not override user selection
469+ viewModel(
470+ savedStateHandle = savedState,
471+ lastDeckIdRepository = persistentRepo,
472+ ).apply {
473+ assertThat(" user choice survives recreation" , deckId, equalTo(userDeckId))
474+ }
475+ }
476+
406477 @Test
407478 fun `sort order from notes is selected - 16514` () {
408479 col.config.set(" sortType" , " noteCrt" )
@@ -1710,12 +1781,12 @@ class CardBrowserViewModelTest : JvmTest() {
17101781 lastDeckId : DeckId ? = null,
17111782 intent : CardBrowserLaunchOptions ? = null,
17121783 mode : CardsOrNotes = CardsOrNotes .CARDS ,
1713- ): CardBrowserViewModel {
1714- val lastDeckIdRepository =
1784+ savedStateHandle : SavedStateHandle = SavedStateHandle (),
1785+ lastDeckIdRepository : LastDeckIdRepository =
17151786 object : LastDeckIdRepository {
17161787 override var lastDeckId : DeckId ? = lastDeckId
1717- }
1718-
1788+ },
1789+ ): CardBrowserViewModel {
17191790 // default is CARDS, do nothing in this case
17201791 if (mode == CardsOrNotes .NOTES ) {
17211792 CollectionManager .withCol { mode.saveToCollection(this @withCol) }
@@ -1728,7 +1799,7 @@ class CardBrowserViewModelTest : JvmTest() {
17281799 options = intent,
17291800 isFragmented = false ,
17301801 preferences = AnkiDroidApp .sharedPreferencesProvider,
1731- savedStateHandle = SavedStateHandle () ,
1802+ savedStateHandle = savedStateHandle ,
17321803 ).apply {
17331804 invokeInitialSearch()
17341805 }
0 commit comments