返回 DeepSeek-Reasonix
remote_listing_pinned_test.go
根目录 / desktop / remote_listing_pinned_test.go
1 package main
2
3 import (
4 "testing"
5 )
6
7 // The blank-row filter hides never-chatted canonical sessions the way an
8 // unused local blank disappears. A pin is an explicit user decision to keep a
9 // row, so it must be consulted before the row is dropped — otherwise pinning a
10 // fresh session makes it vanish from the sidebar.
11 func TestPinnedZeroTurnSessionSurvivesTheBlankRowFilter(t *testing.T) {
12 seedBridgeTestHost(t, "box")
13 fs := newFakeServe(t, "s3cret", []serveSessionEntry{
14 {Name: "kept", SessionID: "kept-id", Turns: 0, MetadataReady: true},
15 {Name: "dropped", SessionID: "dropped-id", Turns: 0, MetadataReady: true},
16 {Name: "chatted", SessionID: "chatted-id", Turns: 3, MetadataReady: true},
17 })
18 kernel := &fakeRemoteKernel{
19 statuses: []RemoteConnectionStatusView{{HostID: "box", State: "connected"}},
20 ensureView: RemoteServerView{HostID: "box", State: "ready", LocalURL: fs.server.URL},
21 ensureToken: "s3cret",
22 }
23 a := &App{remoteRuntime: kernel}
24
25 before, err := a.RemoteProjectSessions("box", "~/app")
26 if err != nil {
27 t.Fatal(err)
28 }
29 if len(before) != 1 || before[0].Name != "chatted" {
30 t.Fatalf("unpinned listing = %+v, want only the chatted session", before)
31 }
32
33 if err := a.SetRemoteSessionPinned("box", "~/app", "kept", true); err != nil {
34 t.Fatal(err)
35 }
36 after, err := a.RemoteProjectSessions("box", "~/app")
37 if err != nil {
38 t.Fatal(err)
39 }
40 if len(after) != 2 || after[0].Name != "kept" || !after[0].Pinned {
41 t.Fatalf("pinned listing = %+v, want the pinned never-chatted row first", after)
42 }
43 for _, row := range after {
44 if row.Name == "dropped" {
45 t.Fatalf("unpinned never-chatted row resurfaced: %+v", after)
46 }
47 }
48 }
49
49 lines GO