Files
2026-07-13 13:00:08 +08:00

70 lines
1.8 KiB
Go

package main
import (
"testing"
"reasonix/internal/config"
"reasonix/internal/event"
"reasonix/internal/notify"
)
type desktopRecordSink struct {
events []event.Kind
}
func (s *desktopRecordSink) Emit(e event.Event) {
s.events = append(s.events, e.Kind)
}
type desktopRecordSender struct {
messages []notify.Message
}
func (s *desktopRecordSender) Send(m notify.Message) error {
s.messages = append(s.messages, m)
return nil
}
func TestDesktopControllerSinkSendsConfiguredSystemNotifications(t *testing.T) {
inner := &desktopRecordSink{}
sender := &desktopRecordSender{}
app := &App{notificationSender: sender}
sink := app.desktopControllerSink(inner, config.NotificationsConfig{
Enabled: true,
TurnDone: true,
ApprovalRequest: true,
AskRequest: true,
})
sink.Emit(event.Event{Kind: event.TurnDone})
if len(inner.events) != 1 || inner.events[0] != event.TurnDone {
t.Fatalf("forwarded events = %+v, want [TurnDone]", inner.events)
}
if len(sender.messages) != 1 {
t.Fatalf("notifications = %d, want 1", len(sender.messages))
}
if sender.messages[0].Body != "Turn finished" {
t.Fatalf("notification body = %q, want Turn finished", sender.messages[0].Body)
}
}
func TestDesktopControllerSinkSkipsSystemNotificationsWhenDisabled(t *testing.T) {
inner := &desktopRecordSink{}
sender := &desktopRecordSender{}
app := &App{notificationSender: sender}
sink := app.desktopControllerSink(inner, config.NotificationsConfig{
Enabled: false,
TurnDone: true,
})
sink.Emit(event.Event{Kind: event.TurnDone})
if len(inner.events) != 1 || inner.events[0] != event.TurnDone {
t.Fatalf("forwarded events = %+v, want [TurnDone]", inner.events)
}
if len(sender.messages) != 0 {
t.Fatalf("notifications = %d, want 0", len(sender.messages))
}
}