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:
@@ -17,6 +17,11 @@ type cursorPayload struct {
|
|||||||
Status string `json:"status"`
|
Status string `json:"status"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
sendForHook = notify.SendForHookWithResult
|
||||||
|
sendAuto = notify.SendAutoWithResult
|
||||||
|
)
|
||||||
|
|
||||||
func RunCursor(r io.Reader, cfg config.Config, event string, _ io.Writer) error {
|
func RunCursor(r io.Reader, cfg config.Config, event string, _ io.Writer) error {
|
||||||
var payload cursorPayload
|
var payload cursorPayload
|
||||||
fromHook := !isInteractiveStdin(r)
|
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 result notify.SendResult
|
||||||
var err error
|
var err error
|
||||||
if fromHook {
|
if fromHook {
|
||||||
result, err = notify.SendForHookWithResult(cfg.Notify.Protocol, title, body)
|
result, err = sendForHook(cfg.Notify.Protocol, title, body)
|
||||||
} else {
|
} else {
|
||||||
result, err = notify.SendAutoWithResult(cfg.Notify.Protocol, title, body)
|
result, err = sendAuto(cfg.Notify.Protocol, title, body)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logx.Append("hook cursor event=%s send FAILED: %v", event, err)
|
logx.Append("hook cursor event=%s send FAILED: %v", event, err)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestCursorStopHookDisabled(t *testing.T) {
|
func TestCursorStopHookDisabled(t *testing.T) {
|
||||||
|
stubCursorSend(t)
|
||||||
cfg := config.Default()
|
cfg := config.Default()
|
||||||
cfg.Events.Stop = false
|
cfg.Events.Stop = false
|
||||||
err := RunCursor(bytes.NewReader([]byte(`{"workspace_roots":["/tmp/proj"]}`)), cfg, "stop", &bytes.Buffer{})
|
err := RunCursor(bytes.NewReader([]byte(`{"workspace_roots":["/tmp/proj"]}`)), cfg, "stop", &bytes.Buffer{})
|
||||||
|
|||||||
@@ -5,9 +5,26 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/longbin/agent-notify/internal/config"
|
"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) {
|
func TestRunCursorEmptyStdinDoesNotBlock(t *testing.T) {
|
||||||
|
stubCursorSend(t)
|
||||||
cfg := config.Default()
|
cfg := config.Default()
|
||||||
err := RunCursor(bytes.NewReader(nil), cfg, "stop", nil)
|
err := RunCursor(bytes.NewReader(nil), cfg, "stop", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -16,6 +33,7 @@ func TestRunCursorEmptyStdinDoesNotBlock(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestRunCursorWithPayload(t *testing.T) {
|
func TestRunCursorWithPayload(t *testing.T) {
|
||||||
|
stubCursorSend(t)
|
||||||
cfg := config.Default()
|
cfg := config.Default()
|
||||||
err := RunCursor(bytes.NewReader([]byte(`{"workspace_roots":["/tmp/proj"]}`)), cfg, "stop", nil)
|
err := RunCursor(bytes.NewReader([]byte(`{"workspace_roots":["/tmp/proj"]}`)), cfg, "stop", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user