]> git.giacomolli.uk - onechat/blob - daemon_start_helper_test.go
Show the WhatsApp link with /whatsapp status
[onechat] / daemon_start_helper_test.go
1 package main
2
3 import (
4         "context"
5         "path/filepath"
6         "testing"
7
8         "github.com/stretchr/testify/require"
9 )
10
11 // daemonStartTestWithBot is daemonStartTest with bot, which can be nil. WhatsApp
12 // is not linked.
13 func daemonStartTestWithBot(t *testing.T, server *ModelFake, bot *TelegramBot) string {
14         t.Helper()
15
16         dir := t.TempDir()
17         agent, err := openAgent(filepath.Join(dir, daemonAgentDirName))
18         require.NoError(t, err)
19
20         agent.config.Workdir = t.TempDir()
21         clock := newTestClock()
22         memory, err := openMemory(t.Context(), agent.dir, clock.Now, newFakeSummarizer())
23         require.NoError(t, err)
24
25         whatsapp, _ := whatsappStartTest(t, dir)
26         socket := filepath.Join(dir, socketFileName)
27         listener, err := daemonListenSocket(socket)
28         require.NoError(t, err)
29
30         client := newModelClient(server.URL, ModelAPIKey(modelTestKey), agent.CacheKey(), filepath.Join(agent.dir, "usage.jsonl"))
31         ctx, cancel := context.WithCancel(t.Context())
32         done := make(chan error)
33         go func() {
34                 done <- daemonServe(ctx, listener, bot, whatsapp, func(notify func(Event)) (*TurnLoop, error) {
35                         return newTurnLoop(agent, memory, newTestSubagents(t), client, clock.Now, notify)
36                 })
37         }()
38
39         t.Cleanup(func() {
40                 cancel()
41                 require.NoError(t, <-done)
42                 require.NoError(t, memory.Close())
43         })
44
45         return socket
46 }