fix: stub hook send in tests for CI without /dev/tty

Avoid opening /dev/tty during unit tests so GitHub Actions can run
go test without a controlling terminal.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-26 12:53:50 +08:00
parent 56a189e678
commit 50453ba19c
3 changed files with 26 additions and 2 deletions
+7 -2
View File
@@ -17,6 +17,11 @@ type cursorPayload struct {
Status string `json:"status"`
}
var (
sendForHook = notify.SendForHookWithResult
sendAuto = notify.SendAutoWithResult
)
func RunCursor(r io.Reader, cfg config.Config, event string, _ io.Writer) error {
var payload cursorPayload
fromHook := !isInteractiveStdin(r)
@@ -50,9 +55,9 @@ func RunCursor(r io.Reader, cfg config.Config, event string, _ io.Writer) error
var result notify.SendResult
var err error
if fromHook {
result, err = notify.SendForHookWithResult(cfg.Notify.Protocol, title, body)
result, err = sendForHook(cfg.Notify.Protocol, title, body)
} else {
result, err = notify.SendAutoWithResult(cfg.Notify.Protocol, title, body)
result, err = sendAuto(cfg.Notify.Protocol, title, body)
}
if err != nil {
logx.Append("hook cursor event=%s send FAILED: %v", event, err)
+1
View File
@@ -10,6 +10,7 @@ import (
)
func TestCursorStopHookDisabled(t *testing.T) {
stubCursorSend(t)
cfg := config.Default()
cfg.Events.Stop = false
err := RunCursor(bytes.NewReader([]byte(`{"workspace_roots":["/tmp/proj"]}`)), cfg, "stop", &bytes.Buffer{})
+18
View File
@@ -5,9 +5,26 @@ import (
"testing"
"github.com/longbin/agent-notify/internal/config"
"github.com/longbin/agent-notify/internal/notify"
)
func stubCursorSend(t *testing.T) {
t.Helper()
t.Setenv("HOME", t.TempDir())
prevHook := sendForHook
prevAuto := sendAuto
sendForHook = func(string, string, string) (notify.SendResult, error) {
return notify.SendResult{Method: "test"}, nil
}
sendAuto = sendForHook
t.Cleanup(func() {
sendForHook = prevHook
sendAuto = prevAuto
})
}
func TestRunCursorEmptyStdinDoesNotBlock(t *testing.T) {
stubCursorSend(t)
cfg := config.Default()
err := RunCursor(bytes.NewReader(nil), cfg, "stop", nil)
if err != nil {
@@ -16,6 +33,7 @@ func TestRunCursorEmptyStdinDoesNotBlock(t *testing.T) {
}
func TestRunCursorWithPayload(t *testing.T) {
stubCursorSend(t)
cfg := config.Default()
err := RunCursor(bytes.NewReader([]byte(`{"workspace_roots":["/tmp/proj"]}`)), cfg, "stop", nil)
if err != nil {