1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
package release
import (
"os/exec"
"reflect"
"testing"
"codeberg.org/snonux/gitsyncer/internal/aitool"
)
func TestAvailableReleaseNotesTools_DefaultChainWithFallback(t *testing.T) {
t.Parallel()
manager := NewManager("")
got := manager.availableReleaseNotesTools(fakeLookPathRelease("ollama", "claude"))
want := []aitool.Tool{aitool.ToolOpencode, aitool.ToolClaude}
if !reflect.DeepEqual(got, want) {
t.Fatalf("availableReleaseNotesTools() = %#v, want %#v", got, want)
}
}
func TestAvailableReleaseNotesTools_HonorsConfiguredPreferenceWithFallback(t *testing.T) {
t.Parallel()
manager := NewManager("")
manager.SetAITool("hexai")
got := manager.availableReleaseNotesTools(fakeLookPathRelease("claude", "amp"))
want := []aitool.Tool{aitool.ToolClaude, aitool.ToolAmp}
if !reflect.DeepEqual(got, want) {
t.Fatalf("availableReleaseNotesTools() = %#v, want %#v", got, want)
}
}
func TestAvailableReleaseNotesTools_AmpChainOnly(t *testing.T) {
t.Parallel()
manager := NewManager("")
manager.SetAITool("amp")
got := manager.availableReleaseNotesTools(fakeLookPathRelease("ollama", "amp"))
want := []aitool.Tool{aitool.ToolAmp}
if !reflect.DeepEqual(got, want) {
t.Fatalf("availableReleaseNotesTools() = %#v, want %#v", got, want)
}
}
func fakeLookPathRelease(tools ...string) func(string) (string, error) {
available := make(map[string]struct{}, len(tools))
for _, tool := range tools {
available[tool] = struct{}{}
}
return func(file string) (string, error) {
if _, ok := available[file]; ok {
return "/usr/bin/" + file, nil
}
return "", exec.ErrNotFound
}
}
|