7 "github.com/stretchr/testify/require"
10 func TestSubagentNamesAreAnAdjectiveAndANoun(t *testing.T) {
12 require.True(t, subagentNameValid(subagentNameRandom()))
15 require.True(t, subagentNameValid("GreenOtter"))
17 for _, name := range []string{"", "Green", "Greenotter", "greenOtter", "Green-Otter", "GreenOtterX", "OtterGreen", "../GreenOtter"} {
18 require.False(t, subagentNameValid(name), name)
22 func TestSubagentCreateDrawsATakenNameAgain(t *testing.T) {
23 names := []string{"GreenOtter", "GreenOtter", "BlueFox"}
24 subagents := newSubagents(filepath.Join(t.TempDir(), subagentDirName), newTestClock().Now, func() string {
32 require.NoError(t, subagents.Close())
35 first, err := subagents.Create(t.Context())
36 require.NoError(t, err)
37 require.Equal(t, "GreenOtter", first.name)
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"))
45 func TestSubagentLogLastsAfterAClose(t *testing.T) {
46 dir := filepath.Join(t.TempDir(), subagentDirName)
47 subagents := newSubagents(dir, newTestClock().Now, func() string {
51 subagent, err := subagents.Create(t.Context())
52 require.NoError(t, err)
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)
59 require.NoError(t, subagent.Flush(t.Context()))
60 require.NoError(t, subagents.Close())
62 subagents = newSubagents(dir, newTestClock().Now, subagentNameRandom)
64 require.NoError(t, subagents.Close())
67 subagent, err = subagents.Get(t.Context(), "GreenOtter")
68 require.NoError(t, err)
70 again, err := subagents.Get(t.Context(), "GreenOtter")
71 require.NoError(t, err)
72 require.Same(t, subagent, again)
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)
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)