test(daemon): cover recent session visibility boundaries
- commit
- 2e6a4672ce1f881aa08bb1c590a5dd25fbd7978e
- author
- brice · · 2026-07-15 16:48 UTC
- parent
- 7953828
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
2 files · +28 -2
M internal/usecase/daemon/palette_test.go +19 -0
| @@ -73,6 +73,25 @@ func TestPaletteEntryPublishesEligibleNamedSessionResults(t *testing.T) { | |||
| 73 | 73 | }, got) | |
| 74 | 74 | } | |
| 75 | 75 | ||
| 76 | + | func TestPaletteRecentSessionsExcludeEphemeralSessions(t *testing.T) { | |
| 77 | + | p, release := newBlockingPTY(t) | |
| 78 | + | defer release() | |
| 79 | + | d, current, ac, _ := newManualSessionWithPTYs(t, p) | |
| 80 | + | named := &session{id: "named", name: "named", tabs: []*tab{{}}} | |
| 81 | + | named.mruAt.Store(1) | |
| 82 | + | ephemeral := &session{id: "ephemeral", name: "1", ephemeral: true, tabs: []*tab{{}}} | |
| 83 | + | ephemeral.mruAt.Store(2) | |
| 84 | + | d.sessions[named.id] = named | |
| 85 | + | d.sessions[ephemeral.id] = ephemeral | |
| 86 | + | ||
| 87 | + | d.enterPalette(current, ac) | |
| 88 | + | ac.overlays.paletteMu.Lock() | |
| 89 | + | defer ac.overlays.paletteMu.Unlock() | |
| 90 | + | ||
| 91 | + | require.Len(t, ac.overlays.paletteRecent, 1) | |
| 92 | + | require.Equal(t, named.id, ac.overlays.paletteRecent[0].id) | |
| 93 | + | } | |
| 94 | + | ||
| 76 | 95 | func TestPaletteSessionFailureFeedbackClearsOnQueryChange(t *testing.T) { | |
| 77 | 96 | p, release := newBlockingPTY(t) | |
| 78 | 97 | defer release() | |
| @@ -73,6 +73,25 @@ func TestPaletteEntryPublishesEligibleNamedSessionResults(t *testing.T) { | |||||
| 73 | }, got) | 73 | }, got) | ||
| 74 | } | 74 | } | ||
| 75 | 75 | ||||
| 76 | + | func TestPaletteRecentSessionsExcludeEphemeralSessions(t *testing.T) { | |||
| 77 | + | p, release := newBlockingPTY(t) | |||
| 78 | + | defer release() | |||
| 79 | + | d, current, ac, _ := newManualSessionWithPTYs(t, p) | |||
| 80 | + | named := &session{id: "named", name: "named", tabs: []*tab{{}}} | |||
| 81 | + | named.mruAt.Store(1) | |||
| 82 | + | ephemeral := &session{id: "ephemeral", name: "1", ephemeral: true, tabs: []*tab{{}}} | |||
| 83 | + | ephemeral.mruAt.Store(2) | |||
| 84 | + | d.sessions[named.id] = named | |||
| 85 | + | d.sessions[ephemeral.id] = ephemeral | |||
| 86 | + | ||||
| 87 | + | d.enterPalette(current, ac) | |||
| 88 | + | ac.overlays.paletteMu.Lock() | |||
| 89 | + | defer ac.overlays.paletteMu.Unlock() | |||
| 90 | + | ||||
| 91 | + | require.Len(t, ac.overlays.paletteRecent, 1) | |||
| 92 | + | require.Equal(t, named.id, ac.overlays.paletteRecent[0].id) | |||
| 93 | + | } | |||
| 94 | + | ||||
| 76 | func TestPaletteSessionFailureFeedbackClearsOnQueryChange(t *testing.T) { | 95 | func TestPaletteSessionFailureFeedbackClearsOnQueryChange(t *testing.T) { | ||
| 77 | p, release := newBlockingPTY(t) | 96 | p, release := newBlockingPTY(t) | ||
| 78 | defer release() | 97 | defer release() | ||
M internal/usecase/daemon/picker_test.go +9 -2
| @@ -87,8 +87,15 @@ func TestPickerViewsIncludesEphemeralSessions(t *testing.T) { | |||
| 87 | 87 | views, _ := d.pickerViews(current) | |
| 88 | 88 | ||
| 89 | 89 | require.Len(t, views, 2) | |
| 90 | - | require.Equal(t, ephemeral.id, views[0].ID) | |
| 91 | - | require.Equal(t, "1", views[0].Name) | |
| 90 | + | var ephemeralView picker.SessionView | |
| 91 | + | for _, view := range views { | |
| 92 | + | if view.ID == ephemeral.id { | |
| 93 | + | ephemeralView = view | |
| 94 | + | break | |
| 95 | + | } | |
| 96 | + | } | |
| 97 | + | require.Equal(t, ephemeral.id, ephemeralView.ID) | |
| 98 | + | require.Equal(t, "1", ephemeralView.Name) | |
| 92 | 99 | } | |
| 93 | 100 | ||
| 94 | 101 | func TestPickerViewsCarryNamedLifecycleIdentity(t *testing.T) { | |
| @@ -87,8 +87,15 @@ func TestPickerViewsIncludesEphemeralSessions(t *testing.T) { | |||||
| 87 | views, _ := d.pickerViews(current) | 87 | views, _ := d.pickerViews(current) | ||
| 88 | 88 | ||||
| 89 | require.Len(t, views, 2) | 89 | require.Len(t, views, 2) | ||
| 90 | - | require.Equal(t, ephemeral.id, views[0].ID) | 90 | + | var ephemeralView picker.SessionView |
| 91 | - | require.Equal(t, "1", views[0].Name) | 91 | + | for _, view := range views { |
| 92 | + | if view.ID == ephemeral.id { | |||
| 93 | + | ephemeralView = view | |||
| 94 | + | break | |||
| 95 | + | } | |||
| 96 | + | } | |||
| 97 | + | require.Equal(t, ephemeral.id, ephemeralView.ID) | |||
| 98 | + | require.Equal(t, "1", ephemeralView.Name) | |||
| 92 | } | 99 | } | ||
| 93 | 100 | ||||
| 94 | func TestPickerViewsCarryNamedLifecycleIdentity(t *testing.T) { | 101 | func TestPickerViewsCarryNamedLifecycleIdentity(t *testing.T) { | ||