git.iko.soy/opencode-android
on 598c306 help sign in
91 lines 2.7 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.relativeTime
9import soy.iko.opencode.ui.session.SessionListState
10import java.util.concurrent.TimeUnit
12class UxTest {
14 // --- relativeTime ---
16 @Test
17 fun relativeTimeHandlesNullAndZero() {
18 assertEquals("", relativeTime(null))
19 assertEquals("", relativeTime(0))
20 assertEquals("", relativeTime(-1))
21 }
23 @Test
24 fun relativeTimeFormatsMinutes() {
25 val now = System.currentTimeMillis()
26 assertEquals("now", relativeTime(now))
27 assertEquals("5m", relativeTime(now - TimeUnit.MINUTES.toMillis(5)))
28 }
30 @Test
31 fun relativeTimeFormatsHoursAndDays() {
32 val now = System.currentTimeMillis()
33 assertEquals("3h", relativeTime(now - TimeUnit.HOURS.toMillis(3)))
34 assertEquals("2d", relativeTime(now - TimeUnit.DAYS.toMillis(2)))
35 assertEquals("1w", relativeTime(now - TimeUnit.DAYS.toMillis(7)))
36 }
38 // --- Session search/filter ---
40 private fun session(id: String, title: String) =
41 Session(id = id, title = title)
43 @Test
44 fun emptyQueryReturnsAllSessions() {
45 val state = SessionListState(
46 sessions = listOf(session("1", "Alpha"), session("2", "Beta")),
47 )
48 assertEquals(2, state.filtered.size)
49 }
51 @Test
52 fun queryFiltersByTitle() {
53 val state = SessionListState(
54 sessions = listOf(session("1", "Refactor tests"), session("2", "Add docs")),
55 query = "refactor",
56 )
57 val result = state.filtered
58 assertEquals(1, result.size)
59 assertEquals("1", result.first().id)
60 }
62 @Test
63 fun queryFiltersByPreviewText() {
64 val state = SessionListState(
65 sessions = listOf(session("1", "Alpha"), session("2", "Beta")),
66 previews = mapOf("2" to "discuss the database migration"),
67 query = "database",
68 )
69 val result = state.filtered
70 assertEquals(1, result.size)
71 assertEquals("2", result.first().id)
72 }
74 @Test
75 fun queryIsCaseInsensitive() {
76 val state = SessionListState(
77 sessions = listOf(session("1", "Build Pipeline")),
78 query = "build",
79 )
80 assertEquals(1, state.filtered.size)
81 }
83 @Test
84 fun noMatchReturnsEmpty() {
85 val state = SessionListState(
86 sessions = listOf(session("1", "Alpha")),
87 query = "zzz",
88 )
89 assertTrue(state.filtered.isEmpty())
90 }