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