1package agent
2
3import (
4 "bytes"
5 "context"
6 "runtime"
7 "strings"
8 "testing"
9
10 "github.com/patriceckhart/zot/packages/core"
11 "github.com/patriceckhart/zot/packages/provider"
12)
13
14func TestStreamTextSinkDoesNotRepeatCompletedMessage(t *testing.T) {
15 var out bytes.Buffer
16 sink, finish := newStreamTextSink(&out)
17 sink(core.EvAssistantStart{})
18 sink(core.EvTextDelta{Delta: "streamed"})
19 sink(core.EvAssistantMessage{Message: provider.Message{
20 Role: provider.RoleAssistant,
21 Content: []provider.Content{provider.TextBlock{Text: "streamed"}},
22 }})
23 finish()
24 if got := out.String(); got != "streamed\n" {
25 t.Fatalf("output = %q, want streamed\\n", got)
26 }
27}
28
29func TestRunZotfileStartupPreShellFailure(t *testing.T) {
30 pre := "!false"
31 if runtime.GOOS == "windows" {
32 pre = "!exit 1"
33 }
34 err := runZotfileStartupPre(context.Background(), pre, t.TempDir(), nil, nil, nil, nil)
35 if err == nil {
36 t.Fatal("expected entry.pre shell failure")
37 }
38 if !strings.Contains(err.Error(), "entry.pre") {
39 t.Fatalf("error = %v, want entry.pre context", err)
40 }
41}
42
43func TestRunZotfileStartupPreEmpty(t *testing.T) {
44 if err := runZotfileStartupPre(context.Background(), " ", t.TempDir(), nil, nil, nil, nil); err != nil {
45 t.Fatalf("empty pre: %v", err)
46 }
47}
48
49func TestRunZotfileStartupPreShellStreams(t *testing.T) {
50 cmd := "!printf streamed-pre"
51 if runtime.GOOS == "windows" {
52 cmd = "!echo streamed-pre"
53 }
54 var out strings.Builder
55 if err := runZotfileStartupPre(context.Background(), cmd, t.TempDir(), nil, nil, nil, &out); err != nil {
56 t.Fatal(err)
57 }
58 if !strings.Contains(out.String(), "streamed-pre") {
59 t.Fatalf("shell output not streamed: %q", out.String())
60 }
61}