]> git.giacomolli.uk - onechat/blob - daemon_start_helper_test.go
Give the root agent the schedule tools
[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.
12 // WhatsApp is not linked.
13 func daemonStartTestWithBot(t *testing.T, server *ModelFake, bot *TelegramBot) string {
14 t.Helper()
15
16 whatsapp, _, _ := whatsappStartTest(t, t.TempDir(), newTestClock())
17 socket, _ := daemonStartTestWithWhatsApp(t, server, bot, whatsapp)
18
19 return socket
20 }
21
22 // daemonStartTestWithWhatsApp is daemonStartTestWithBot with whatsapp. It also
23 // returns the memory of the agent.
24 func daemonStartTestWithWhatsApp(t *testing.T, server *ModelFake, bot *TelegramBot, whatsapp *WhatsApp) (string, *Memory) {
25 t.Helper()
26
27 dir := t.TempDir()
28 agent, err := openAgent(filepath.Join(dir, daemonAgentDirName))
29 require.NoError(t, err)
30
31 agent.config.Workdir = t.TempDir()
32 clock := newTestClock()
33 memory, err := openMemory(t.Context(), agent.dir, clock.Now, newFakeSummarizer())
34 require.NoError(t, err)
35
36 socket := filepath.Join(dir, socketFileName)
37 listener, err := daemonListenSocket(socket)
38 require.NoError(t, err)
39
40 client := newModelClient(server.URL, ModelAPIKey(modelTestKey), agent.CacheKey(), filepath.Join(agent.dir, "usage.jsonl"))
41 ctx, cancel := context.WithCancel(t.Context())
42 done := make(chan error)
43 go func() {
44 done <- daemonServe(ctx, listener, bot, whatsapp, func(notify func(Event)) (*TurnLoop, error) {
45 return newTurnLoop(agent, memory, newTestSubagents(t), whatsapp, newTestSchedules(t, clock.Now), client, clock.Now, notify)
46 })
47 }()
48
49 t.Cleanup(func() {
50 cancel()
51 require.NoError(t, <-done)
52 require.NoError(t, memory.Close())
53 })
54
55 return socket, memory
56 }