"context"
"path/filepath"
"testing"
+ "time"
"github.com/stretchr/testify/require"
)
-// daemonStartTestWithBot is daemonStartTest with bot, which can be nil. WhatsApp
-// is not linked.
+// daemonStartTestWithBot is daemonStartTest with bot, which can be nil.
+// WhatsApp is not linked.
func daemonStartTestWithBot(t *testing.T, server *ModelFake, bot *TelegramBot) string {
t.Helper()
- dir := t.TempDir()
+ whatsapp, _, _ := whatsappStartTest(t, t.TempDir(), newTestClock())
+ socket, _ := daemonStartTestWithWhatsApp(t, server, bot, whatsapp)
+
+ return socket
+}
+
+// daemonStartTestWithWhatsApp is daemonStartTestWithBot with whatsapp. It also
+// returns the memory of the agent.
+func daemonStartTestWithWhatsApp(t *testing.T, server *ModelFake, bot *TelegramBot, whatsapp *WhatsApp) (string, *Memory) {
+ t.Helper()
+
+ clock := newTestClock()
+
+ return daemonStartTestWithSchedules(t, server, bot, whatsapp, newTestSchedules(t, clock.Now), clock.Now)
+}
+
+// daemonStartTestWithSchedules is daemonStartTestWithWhatsApp with schedules,
+// and with clock for the memory and the turns.
+func daemonStartTestWithSchedules(t *testing.T, server *ModelFake, bot *TelegramBot, whatsapp *WhatsApp, schedules *Schedules, clock func() time.Time) (string, *Memory) {
+ t.Helper()
+
+ dir := socketTestDir(t)
agent, err := openAgent(filepath.Join(dir, daemonAgentDirName))
require.NoError(t, err)
agent.config.Workdir = t.TempDir()
- clock := newTestClock()
- memory, err := openMemory(t.Context(), agent.dir, clock.Now, newFakeSummarizer())
+ memory, err := openMemory(t.Context(), agent.dir, clock, newFakeSummarizer(), discardLog())
require.NoError(t, err)
- whatsapp, _ := whatsappStartTest(t, dir)
socket := filepath.Join(dir, socketFileName)
listener, err := daemonListenSocket(socket)
require.NoError(t, err)
client := newModelClient(server.URL, ModelAPIKey(modelTestKey), agent.CacheKey(), filepath.Join(agent.dir, "usage.jsonl"))
ctx, cancel := context.WithCancel(t.Context())
done := make(chan error)
+ subagents := newTestSubagents(t)
go func() {
- done <- daemonServe(ctx, listener, bot, whatsapp, func(notify func(Event)) (*TurnLoop, error) {
- return newTurnLoop(agent, memory, newTestSubagents(t), client, clock.Now, notify)
+ done <- daemonServe(ctx, listener, bot, whatsapp, schedules, func(notify func(Event)) (*TurnLoop, error) {
+ return newTurnLoop(agent, memory, subagents, whatsapp, schedules, client, clock, discardLog(), notify)
})
}()
require.NoError(t, memory.Close())
})
- return socket
+ return socket, memory
}