diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-28 10:50:21 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-28 10:50:21 +0300 |
| commit | 3b8be6195108a602c11761ee89c95cd6dc908703 (patch) | |
| tree | 29097befa3f7f7790c205e032408e6dedc72b103 /internal/release/release_ai_tool_test.go | |
| parent | bff9775a92d653d74e575fd6fc1398ca4505ea30 (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.go | 64 |
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 + } +} |
