返回 DeepSeek-Reasonix
notifications_test.go
根目录 / desktop / notifications_test.go
1 package main
2
3 import (
4 "testing"
5
6 "reasonix/internal/config"
7 "reasonix/internal/event"
8 "reasonix/internal/notify"
9 )
10
11 type desktopRecordSink struct {
12 events []event.Kind
13 }
14
15 func (s *desktopRecordSink) Emit(e event.Event) {
16 s.events = append(s.events, e.Kind)
17 }
18
19 type desktopRecordSender struct {
20 messages []notify.Message
21 }
22
23 func (s *desktopRecordSender) Send(m notify.Message) error {
24 s.messages = append(s.messages, m)
25 return nil
26 }
27
28 func TestDesktopControllerSinkSendsConfiguredSystemNotifications(t *testing.T) {
29 inner := &desktopRecordSink{}
30 sender := &desktopRecordSender{}
31 app := &App{notificationSender: sender}
32 sink := app.desktopControllerSink(inner, config.NotificationsConfig{
33 Enabled: true,
34 TurnDone: true,
35 ApprovalRequest: true,
36 AskRequest: true,
37 })
38
39 sink.Emit(event.Event{Kind: event.TurnDone})
40
41 if len(inner.events) != 1 || inner.events[0] != event.TurnDone {
42 t.Fatalf("forwarded events = %+v, want [TurnDone]", inner.events)
43 }
44 if len(sender.messages) != 1 {
45 t.Fatalf("notifications = %d, want 1", len(sender.messages))
46 }
47 if sender.messages[0].Body != "Turn finished" {
48 t.Fatalf("notification body = %q, want Turn finished", sender.messages[0].Body)
49 }
50 }
51
52 func TestDesktopControllerSinkSkipsSystemNotificationsWhenDisabled(t *testing.T) {
53 inner := &desktopRecordSink{}
54 sender := &desktopRecordSender{}
55 app := &App{notificationSender: sender}
56 sink := app.desktopControllerSink(inner, config.NotificationsConfig{
57 Enabled: false,
58 TurnDone: true,
59 })
60
61 sink.Emit(event.Event{Kind: event.TurnDone})
62
63 if len(inner.events) != 1 || inner.events[0] != event.TurnDone {
64 t.Fatalf("forwarded events = %+v, want [TurnDone]", inner.events)
65 }
66 if len(sender.messages) != 0 {
67 t.Fatalf("notifications = %d, want 0", len(sender.messages))
68 }
69 }
70
70 lines GO