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.relativeTime
9import soy.iko.opencode.ui.session.SessionListState
10import java.util.concurrent.TimeUnit
14 // --- relativeTime ---
17 fun relativeTimeHandlesNullAndZero() {
18 assertEquals("", relativeTime(null))
19 assertEquals("", relativeTime(0))
20 assertEquals("", relativeTime(-1))
24 fun relativeTimeFormatsMinutes() {
25 val now = System.currentTimeMillis()
26 assertEquals("now", relativeTime(now))
27 assertEquals("5m", relativeTime(now - TimeUnit.MINUTES.toMillis(5)))
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)))
38 // --- Session search/filter ---
40 private fun session(id: String, title: String) =
41 Session(id = id, title = title)
44 fun emptyQueryReturnsAllSessions() {
45 val state = SessionListState(
46 sessions = listOf(session("1", "Alpha"), session("2", "Beta")),
48 assertEquals(2, state.filtered.size)
52 fun queryFiltersByTitle() {
53 val state = SessionListState(
54 sessions = listOf(session("1", "Refactor tests"), session("2", "Add docs")),
57 val result = state.filtered
58 assertEquals(1, result.size)
59 assertEquals("1", result.first().id)
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"),
69 val result = state.filtered
70 assertEquals(1, result.size)
71 assertEquals("2", result.first().id)
75 fun queryIsCaseInsensitive() {
76 val state = SessionListState(
77 sessions = listOf(session("1", "Build Pipeline")),
80 assertEquals(1, state.filtered.size)
84 fun noMatchReturnsEmpty() {
85 val state = SessionListState(
86 sessions = listOf(session("1", "Alpha")),
89 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