1package soy.iko.opencode
3import org.junit.Assert.assertEquals
4import org.junit.Assert.assertTrue
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
15 // --- relativeTimeUnit (pure logic, locale-independent) ---
18 fun relativeTimeHandlesNullAndZero() {
19 assertEquals(null, relativeTimeUnit(null))
20 assertEquals(null, relativeTimeUnit(0))
21 assertEquals(null, relativeTimeUnit(-1))
25 fun relativeTimeFormatsMinutes() {
26 val now = System.currentTimeMillis()
27 assertEquals(RelativeTimeUnit.Now(), relativeTimeUnit(now))
29 RelativeTimeUnit.Minutes(5),
30 relativeTimeUnit(now - TimeUnit.MINUTES.toMillis(5)),
35 fun relativeTimeFormatsHoursAndDays() {
36 val now = System.currentTimeMillis()
38 RelativeTimeUnit.Hours(3),
39 relativeTimeUnit(now - TimeUnit.HOURS.toMillis(3)),
42 RelativeTimeUnit.Days(2),
43 relativeTimeUnit(now - TimeUnit.DAYS.toMillis(2)),
46 RelativeTimeUnit.Weeks(1),
47 relativeTimeUnit(now - TimeUnit.DAYS.toMillis(7)),
51 // --- Session search/filter ---
53 private fun session(id: String, title: String) =
54 Session(id = id, title = title)
57 fun emptyQueryReturnsAllSessions() {
58 val state = SessionListState(
59 sessions = listOf(session("1", "Alpha"), session("2", "Beta")),
61 assertEquals(2, state.filtered.size)
65 fun queryFiltersByTitle() {
66 val state = SessionListState(
67 sessions = listOf(session("1", "Refactor tests"), session("2", "Add docs")),
70 val result = state.filtered
71 assertEquals(1, result.size)
72 assertEquals("1", result.first().id)
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"),
82 val result = state.filtered
83 assertEquals(1, result.size)
84 assertEquals("2", result.first().id)
88 fun queryIsCaseInsensitive() {
89 val state = SessionListState(
90 sessions = listOf(session("1", "Build Pipeline")),
93 assertEquals(1, state.filtered.size)
97 fun noMatchReturnsEmpty() {
98 val state = SessionListState(
99 sessions = listOf(session("1", "Alpha")),
102 assertTrue(state.filtered.isEmpty())
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list