| 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 |