package session import ( "context" "errors" "testing" "time" "supervisor/internal/domain" "supervisor/internal/store/memory" ) func TestDeleteSessionDeletesStoredExitedSessionWithoutRuntime(t *testing.T) { ctx := context.Background() store := memory.NewStore() exitCode := -1 session := domain.Session{ ID: "sess_stale", Name: "stale", Command: "bash", Status: domain.SessionStatusExited, CreatedAt: time.Now().UTC(), ExitCode: &exitCode, } if err := store.Upsert(ctx, session); err != nil { t.Fatalf("upsert stale session: %v", err) } manager := NewManager(store, nil) if err := manager.DeleteSession(ctx, session.ID); err != nil { t.Fatalf("delete stale exited session: %v", err) } if _, ok, err := store.Get(ctx, session.ID); err != nil { t.Fatalf("get deleted session: %v", err) } else if ok { t.Fatal("expected stale session to be deleted from store") } } func TestDeleteSessionRejectsStoredRunningSessionWithoutRuntime(t *testing.T) { ctx := context.Background() store := memory.NewStore() session := domain.Session{ ID: "sess_running", Name: "running", Command: "bash", Status: domain.SessionStatusRunning, CreatedAt: time.Now().UTC(), } if err := store.Upsert(ctx, session); err != nil { t.Fatalf("upsert running session: %v", err) } manager := NewManager(store, nil) if err := manager.DeleteSession(ctx, session.ID); !errors.Is(err, ErrSessionRunning) { t.Fatalf("DeleteSession error = %v, want %v", err, ErrSessionRunning) } if _, ok, err := store.Get(ctx, session.ID); err != nil { t.Fatalf("get running session: %v", err) } else if !ok { t.Fatal("expected running session to remain in store") } }