git.iko.soy/opencode-android
on 56dd3f3 help sign in
104 lines 3.1 kB history raw
1package soy.iko.opencode
3import org.junit.Assert.assertEquals
4import org.junit.Assert.assertTrue
5import org.junit.Test
6import soy.iko.opencode.data.model.Session
7import soy.iko.opencode.data.model.TimeInfo
8import soy.iko.opencode.ui.components.RelativeTimeUnit
9import soy.iko.opencode.ui.components.relativeTimeUnit
10import soy.iko.opencode.ui.session.SessionListState
11import java.util.concurrent.TimeUnit
13class UxTest {
15 // --- relativeTimeUnit (pure logic, locale-independent) ---
17 @Test
18 fun relativeTimeHandlesNullAndZero() {
19 assertEquals(null, relativeTimeUnit(null))
20 assertEquals(null, relativeTimeUnit(0))
21 assertEquals(null, relativeTimeUnit(-1))
22 }
24 @Test
25 fun relativeTimeFormatsMinutes() {
26 val now = System.currentTimeMillis()
27 assertEquals(RelativeTimeUnit.Now(), relativeTimeUnit(now))
28 assertEquals(
29 RelativeTimeUnit.Minutes(5),
30 relativeTimeUnit(now - TimeUnit.MINUTES.toMillis(5)),
31 )
32 }
34 @Test
35 fun relativeTimeFormatsHoursAndDays() {
36 val now = System.currentTimeMillis()
37 assertEquals(
38 RelativeTimeUnit.Hours(3),
39 relativeTimeUnit(now - TimeUnit.HOURS.toMillis(3)),
40 )
41 assertEquals(
42 RelativeTimeUnit.Days(2),
43 relativeTimeUnit(now - TimeUnit.DAYS.toMillis(2)),
44 )
45 assertEquals(
46 RelativeTimeUnit.Weeks(1),
47 relativeTimeUnit(now - TimeUnit.DAYS.toMillis(7)),
48 )
49 }
51 // --- Session search/filter ---
53 private fun session(id: String, title: String) =
54 Session(id = id, title = title)
56 @Test
57 fun emptyQueryReturnsAllSessions() {
58 val state = SessionListState(
59 sessions = listOf(session("1", "Alpha"), session("2", "Beta")),
60 )
61 assertEquals(2, state.filtered.size)
62 }
64 @Test
65 fun queryFiltersByTitle() {
66 val state = SessionListState(
67 sessions = listOf(session("1", "Refactor tests"), session("2", "Add docs")),
68 query = "refactor",
69 )
70 val result = state.filtered
71 assertEquals(1, result.size)
72 assertEquals("1", result.first().id)
73 }
75 @Test
76 fun queryFiltersByPreviewText() {
77 val state = SessionListState(
78 sessions = listOf(session("1", "Alpha"), session("2", "Beta")),
79 previews = mapOf("2" to "discuss the database migration"),
80 query = "database",
81 )
82 val result = state.filtered
83 assertEquals(1, result.size)
84 assertEquals("2", result.first().id)
85 }
87 @Test
88 fun queryIsCaseInsensitive() {
89 val state = SessionListState(
90 sessions = listOf(session("1", "Build Pipeline")),
91 query = "build",
92 )
93 assertEquals(1, state.filtered.size)
94 }
96 @Test
97 fun noMatchReturnsEmpty() {
98 val state = SessionListState(
99 sessions = listOf(session("1", "Alpha")),
100 query = "zzz",
101 )
102 assertTrue(state.filtered.isEmpty())
103 }