Files
superwork/tui/internal/store/managedsessions_test.go
2026-06-23 05:02:15 +08:00

141 lines
3.9 KiB
Go

package store
import (
"os"
"path/filepath"
"reflect"
"testing"
)
func TestReadManagedSessions_missingFile(t *testing.T) {
dir := t.TempDir()
data, err := ReadManagedSessions(dir)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if data.Sessions == nil {
t.Error("Sessions should be non-nil empty slice, got nil")
}
if len(data.Sessions) != 0 {
t.Errorf("want 0 sessions, got %d", len(data.Sessions))
}
}
func TestManagedSessions_roundtrip(t *testing.T) {
dir := t.TempDir()
original := ManagedSessionsData{
Sessions: []ManagedSession{
{ID: "s1", Name: "Session One", ProfilePath: "/path/to/profile.json", CreatedAt: 1000},
{ID: "s2", Name: "Session Two", ProfilePath: "", CreatedAt: 2000},
},
}
if err := WriteManagedSessions(dir, original); err != nil {
t.Fatalf("WriteManagedSessions: %v", err)
}
got, err := ReadManagedSessions(dir)
if err != nil {
t.Fatalf("ReadManagedSessions: %v", err)
}
if !reflect.DeepEqual(got, original) {
t.Errorf("roundtrip mismatch:\n got %+v\n want %+v", got, original)
}
}
func TestWriteManagedSessions_createsSpxDir(t *testing.T) {
dir := t.TempDir()
data := ManagedSessionsData{Sessions: []ManagedSession{}}
if err := WriteManagedSessions(dir, data); err != nil {
t.Fatalf("WriteManagedSessions: %v", err)
}
if _, err := os.Stat(filepath.Join(dir, ".spx", "session-names.json")); err != nil {
t.Errorf("session-names.json not created: %v", err)
}
}
func TestAddSession(t *testing.T) {
data := ManagedSessionsData{Sessions: []ManagedSession{}}
s := ManagedSession{ID: "a1", Name: "Alpha", CreatedAt: 100}
data = AddSession(data, s)
if len(data.Sessions) != 1 {
t.Fatalf("want 1 session, got %d", len(data.Sessions))
}
if data.Sessions[0] != s {
t.Errorf("session mismatch: got %+v, want %+v", data.Sessions[0], s)
}
}
func TestRenameSession(t *testing.T) {
data := ManagedSessionsData{Sessions: []ManagedSession{
{ID: "a1", Name: "Old Name", CreatedAt: 100},
{ID: "a2", Name: "Other", CreatedAt: 200},
}}
data = RenameSession(data, "a1", "New Name")
if data.Sessions[0].Name != "New Name" {
t.Errorf("want 'New Name', got %q", data.Sessions[0].Name)
}
// other session unchanged
if data.Sessions[1].Name != "Other" {
t.Errorf("other session name changed: got %q", data.Sessions[1].Name)
}
}
func TestRenameSession_notFound(t *testing.T) {
data := ManagedSessionsData{Sessions: []ManagedSession{
{ID: "a1", Name: "Alpha", CreatedAt: 100},
}}
result := RenameSession(data, "nonexistent", "X")
if result.Sessions[0].Name != "Alpha" {
t.Error("renaming nonexistent id should not change data")
}
}
func TestDeleteSession(t *testing.T) {
data := ManagedSessionsData{Sessions: []ManagedSession{
{ID: "a1", Name: "Alpha", CreatedAt: 100},
{ID: "a2", Name: "Beta", CreatedAt: 200},
{ID: "a3", Name: "Gamma", CreatedAt: 300},
}}
data = DeleteSession(data, "a2")
if len(data.Sessions) != 2 {
t.Fatalf("want 2 sessions after delete, got %d", len(data.Sessions))
}
for _, s := range data.Sessions {
if s.ID == "a2" {
t.Error("deleted session still present")
}
}
}
func TestDeleteSession_notFound(t *testing.T) {
data := ManagedSessionsData{Sessions: []ManagedSession{
{ID: "a1", Name: "Alpha", CreatedAt: 100},
}}
result := DeleteSession(data, "nonexistent")
if len(result.Sessions) != 1 {
t.Error("deleting nonexistent id should not change session count")
}
}
func TestFindSession(t *testing.T) {
s := ManagedSession{ID: "a1", Name: "Alpha", CreatedAt: 100}
data := ManagedSessionsData{Sessions: []ManagedSession{s}}
found, ok := FindSession(data, "a1")
if !ok {
t.Fatal("expected to find session a1")
}
if found != s {
t.Errorf("found session mismatch: got %+v, want %+v", found, s)
}
}
func TestFindSession_notFound(t *testing.T) {
data := ManagedSessionsData{Sessions: []ManagedSession{
{ID: "a1", Name: "Alpha", CreatedAt: 100},
}}
_, ok := FindSession(data, "nope")
if ok {
t.Error("expected not found")
}
}