OnboardingTest.kt

3.5 KB · raw

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    // ── Launch guard ──────────────────────────────────────────────────────────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        // Onboarded → Lock even with no vault yet (quit mid-create returns to Lock).21        assertEquals(PeachNav.Lock, onboardingStartDestination(hasVault = false, onboarded = true))22        // Existing vault → always Lock, regardless of flag.23        assertEquals(PeachNav.Lock, onboardingStartDestination(hasVault = true, onboarded = false))24        assertEquals(PeachNav.Lock, onboardingStartDestination(hasVault = true, onboarded = true))25    }2627    // ── Card copy (the spec is ONBOARDING_CARDS, ported from the browser) ──────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    @Test fun onboarding_card3_has_warning_row() {58        assertNotNull("card 3 carries the warning", ONBOARDING_CARDS[2].warning)59        assertTrue(ONBOARDING_CARDS[2].warning!!.contains("cannot be opened"))60        // The first two cards do not show a warning row.61        assertNull(ONBOARDING_CARDS[0].warning)62        assertNull(ONBOARDING_CARDS[1].warning)63    }6465    // ── Nav row ───────────────────────────────────────────────────────────────6667    @Test fun back_is_hidden_on_first_card() {68        assertFalse(onboardingBackVisible(0))69    }7071    @Test fun back_is_visible_on_later_cards() {72        assertTrue(onboardingBackVisible(1))73        assertTrue(onboardingBackVisible(2))74    }7576    @Test fun forward_label_is_next_until_last_card() {77        val count = ONBOARDING_CARDS.size78        assertEquals("next", onboardingNextLabel(0, count))79        assertEquals("next", onboardingNextLabel(1, count))80    }8182    @Test fun forward_label_is_get_started_on_last_card() {83        val count = ONBOARDING_CARDS.size84        assertEquals("Get started", onboardingNextLabel(count - 1, count))85    }86}