]> git.giacomolli.uk - onechat/blob - subagent_test.go
Keep the connection of a new WhatsApp link
[onechat] / subagent_test.go
1 package main
2
3 import (
4 "path/filepath"
5 "testing"
6
7 "github.com/stretchr/testify/require"
8 )
9
10 func TestSubagentNamesAreAnAdjectiveAndANoun(t *testing.T) {
11 for range 100 {
12 require.True(t, subagentNameValid(subagentNameRandom()))
13 }
14
15 require.True(t, subagentNameValid("GreenOtter"))
16 for _, name := range []string{"", "Green", "Greenotter", "greenOtter", "Green-Otter", "GreenOtterX", "OtterGreen", "../GreenOtter"} {
17 require.False(t, subagentNameValid(name), name)
18 }
19 }
20
21 func TestSubagentCreateDrawsATakenNameAgain(t *testing.T) {
22 names := []string{"GreenOtter", "GreenOtter", "BlueFox"}
23 subagents := newSubagents(filepath.Join(t.TempDir(), subagentDirName), newTestClock().Now, func() string {
24 name := names[0]
25 names = names[1:]
26
27 return name
28 })
29
30 defer func() {
31 require.NoError(t, subagents.Close())
32 }()
33
34 first, err := subagents.Create(t.Context())
35 require.NoError(t, err)
36 require.Equal(t, "GreenOtter", first.name)
37
38 second, err := subagents.Create(t.Context())
39 require.NoError(t, err)
40 require.Equal(t, "BlueFox", second.name)
41 require.DirExists(t, filepath.Join(subagents.dir, "BlueFox"))
42 }
43
44 func TestSubagentLogLastsAfterAClose(t *testing.T) {
45 dir := filepath.Join(t.TempDir(), subagentDirName)
46 subagents := newSubagents(dir, newTestClock().Now, func() string {
47 return "GreenOtter"
48 })
49
50 subagent, err := subagents.Create(t.Context())
51 require.NoError(t, err)
52
53 for _, message := range [][2]string{{"note", "subagent"}, {"user", "Count the files."}, {"reply", "There are 3."}} {
54 _, err = subagent.Append(message[0], message[1])
55 require.NoError(t, err)
56 }
57
58 require.NoError(t, subagent.Flush(t.Context()))
59 require.NoError(t, subagents.Close())
60
61 subagents = newSubagents(dir, newTestClock().Now, subagentNameRandom)
62 defer func() {
63 require.NoError(t, subagents.Close())
64 }()
65
66 subagent, err = subagents.Get(t.Context(), "GreenOtter")
67 require.NoError(t, err)
68
69 again, err := subagents.Get(t.Context(), "GreenOtter")
70 require.NoError(t, err)
71 require.Same(t, subagent, again)
72
73 text, err := subagent.Show()
74 require.NoError(t, err)
75 require.Equal(t, "0|note: subagent\n\n1|user: Count the files.\n\n2|reply: There are 3.", text)
76 }
77
78 func TestSubagentGetRefusesAnUnknownName(t *testing.T) {
79 subagents := newTestSubagents(t)
80 for _, name := range []string{"BlueFox", "../agent", "Blue"} {
81 _, err := subagents.Get(t.Context(), name)
82 require.EqualError(t, err, "no agent "+name)
83 }
84 }