1package com.peachpasswords.ui.onboarding23import com.peachpasswords.ui.PeachNav4import org.junit.Assert.assertEquals5import org.junit.Assert.assertFalse6import org.junit.Assert.assertNotNull7import org.junit.Assert.assertNull8import org.junit.Assert.assertTrue9import org.junit.Test1011class OnboardingTest {1213 1415 @Test fun onboarding_shows_first_launch() {16 assertEquals(PeachNav.Onboarding, onboardingStartDestination(hasVault = false, onboarded = false))17 }1819 @Test fun onboarding_skipped_after_completion() {20 21 assertEquals(PeachNav.Lock, onboardingStartDestination(hasVault = false, onboarded = true))22 23 assertEquals(PeachNav.Lock, onboardingStartDestination(hasVault = true, onboarded = false))24 assertEquals(PeachNav.Lock, onboardingStartDestination(hasVault = true, onboarded = true))25 }2627 2829 @Test fun onboarding_has_three_cards() {30 assertEquals(3, ONBOARDING_CARDS.size)31 }3233 @Test fun onboarding_card_copy_card1_matches_spec() {34 val c = ONBOARDING_CARDS[0]35 assertTrue(c.headline.contains("live here"))36 assertEquals(2, c.body.size)37 assertTrue(c.body[0].contains("No account. No server."))38 assertTrue(c.body[1].contains("encrypted on your device"))39 }4041 @Test fun onboarding_card_copy_card2_matches_spec() {42 val c = ONBOARDING_CARDS[1]43 assertEquals("two keys.", c.headline)44 assertEquals(2, c.body.size)45 assertTrue(c.body[0].contains("master password is yours alone"))46 assertTrue(c.body[1].contains("12 recovery words"))47 }4849 @Test fun onboarding_card_copy_card3_matches_spec() {50 val c = ONBOARDING_CARDS[2]51 assertTrue(c.headline.contains("everything"))52 assertEquals(2, c.body.size)53 assertTrue(c.body[0].contains("Free includes"))54 assertTrue(c.body[1].contains("Pro adds"))55 }5657 58 59 60 @Test fun onboarding_card2_has_warning_row() {61 assertNotNull("card 2 carries the warning", ONBOARDING_CARDS[1].warning)62 assertTrue(ONBOARDING_CARDS[1].warning!!.contains("cannot be opened"))63 assertNull(ONBOARDING_CARDS[0].warning)64 assertNull(ONBOARDING_CARDS[2].warning)65 }6667 6869 @Test fun back_is_hidden_on_first_card() {70 assertFalse(onboardingBackVisible(0))71 }7273 @Test fun back_is_visible_on_later_cards() {74 assertTrue(onboardingBackVisible(1))75 assertTrue(onboardingBackVisible(2))76 }7778 @Test fun forward_label_is_next_until_last_card() {79 val count = ONBOARDING_CARDS.size80 assertEquals("next →", onboardingNextLabel(0, count))81 assertEquals("next →", onboardingNextLabel(1, count))82 }8384 @Test fun forward_label_is_create_vault_on_last_card() {85 val count = ONBOARDING_CARDS.size86 assertEquals("create vault", onboardingNextLabel(count - 1, count))87 }8889 @Test fun existing_user_choices_put_pairing_first_and_name_restore_separately() {90 assertEquals("Create a new vault", ONBOARD_CREATE_LABEL)91 assertEquals("Pair with another device", ONBOARD_PAIR_LABEL)92 assertEquals("Restore a backup", ONBOARD_RESTORE_LABEL)93 }94}