034738fa3f
Co-authored-by: Cursor <cursoragent@cursor.com>
134 lines
2.6 KiB
Go
134 lines
2.6 KiB
Go
package server
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/longbin/agent-notify/internal/remote"
|
|
)
|
|
|
|
func TestStoreUpsertAndList(t *testing.T) {
|
|
db := filepath.Join(t.TempDir(), "test.db")
|
|
s, err := Open(db)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer s.Close()
|
|
|
|
now := time.Now().UTC()
|
|
base := remote.StatusReport{
|
|
Hostname: "host-a",
|
|
IPs: []string{"10.0.0.1"},
|
|
Agent: "Cursor",
|
|
CWD: "/proj",
|
|
UpdatedAt: now,
|
|
}
|
|
|
|
r1 := base
|
|
r1.Status = "waiting"
|
|
if err := s.Upsert(r1); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
r2 := base
|
|
r2.Status = "running"
|
|
if err := s.Upsert(r2); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
rows, err := s.List(ListFilters{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(rows) != 1 {
|
|
t.Fatalf("expected 1 row, got %d", len(rows))
|
|
}
|
|
if rows[0].Status != "running" {
|
|
t.Fatalf("expected latest status running, got %q", rows[0].Status)
|
|
}
|
|
key := remote.SessionKey("host-a", "10.0.0.1", "/proj", "Cursor")
|
|
if rows[0].SessionKey != key {
|
|
t.Fatalf("session_key: got %q want %q", rows[0].SessionKey, key)
|
|
}
|
|
}
|
|
|
|
func TestStoreOfflineAfter5Min(t *testing.T) {
|
|
db := filepath.Join(t.TempDir(), "test.db")
|
|
s, err := Open(db)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer s.Close()
|
|
|
|
stale := time.Now().UTC().Add(-10 * time.Minute)
|
|
report := remote.StatusReport{
|
|
Hostname: "host-b",
|
|
IPs: []string{"192.168.1.5"},
|
|
Agent: "Claude",
|
|
CWD: "/work",
|
|
Status: "waiting",
|
|
UpdatedAt: stale,
|
|
}
|
|
if err := s.Upsert(report); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
rows, err := s.List(ListFilters{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(rows) != 1 {
|
|
t.Fatalf("expected 1 row, got %d", len(rows))
|
|
}
|
|
if rows[0].Status != "offline" {
|
|
t.Fatalf("expected offline status, got %q", rows[0].Status)
|
|
}
|
|
}
|
|
|
|
func TestStoreMergePreservesLastUser(t *testing.T) {
|
|
db := filepath.Join(t.TempDir(), "test.db")
|
|
s, err := Open(db)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer s.Close()
|
|
|
|
now := time.Now().UTC()
|
|
base := remote.StatusReport{
|
|
Hostname: "host-c",
|
|
IPs: []string{"10.0.0.2"},
|
|
Agent: "Cursor",
|
|
CWD: "/proj",
|
|
Status: "waiting",
|
|
UpdatedAt: now,
|
|
}
|
|
|
|
r1 := base
|
|
r1.LastUser = "keep me"
|
|
if err := s.Upsert(r1); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
r2 := base
|
|
r2.LastUser = ""
|
|
r2.Status = "running"
|
|
if err := s.Upsert(r2); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
rows, err := s.List(ListFilters{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(rows) != 1 {
|
|
t.Fatalf("expected 1 row, got %d", len(rows))
|
|
}
|
|
if rows[0].LastUser != "keep me" {
|
|
t.Fatalf("last_user: got %q want %q", rows[0].LastUser, "keep me")
|
|
}
|
|
if rows[0].Status != "running" {
|
|
t.Fatalf("expected status running, got %q", rows[0].Status)
|
|
}
|
|
}
|