summaryrefslogtreecommitdiff
path: root/internal/release/release_ai_tool_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-28 10:50:21 +0300
committerPaul Buetow <paul@buetow.org>2026-05-28 10:50:21 +0300
commit3b8be6195108a602c11761ee89c95cd6dc908703 (patch)
tree29097befa3f7f7790c205e032408e6dedc72b103 /internal/release/release_ai_tool_test.go
parentbff9775a92d653d74e575fd6fc1398ca4505ea30 (diff)
fix(release): honor manager aiTool dispatch (cq)
Diffstat (limited to 'internal/release/release_ai_tool_test.go')
-rw-r--r--internal/release/release_ai_tool_test.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/internal/release/release_ai_tool_test.go b/internal/release/release_ai_tool_test.go
new file mode 100644
index 0000000..1d15280
--- /dev/null
+++ b/internal/release/release_ai_tool_test.go
@@ -0,0 +1,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
+ }
+}