summaryrefslogtreecommitdiff
path: root/internal/hexaiaction/custom_exec_more_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/hexaiaction/custom_exec_more_test.go')
-rw-r--r--internal/hexaiaction/custom_exec_more_test.go48
1 files changed, 48 insertions, 0 deletions
diff --git a/internal/hexaiaction/custom_exec_more_test.go b/internal/hexaiaction/custom_exec_more_test.go
new file mode 100644
index 0000000..657d0d8
--- /dev/null
+++ b/internal/hexaiaction/custom_exec_more_test.go
@@ -0,0 +1,48 @@
+package hexaiaction
+
+import (
+ "context"
+ "strings"
+ "testing"
+
+ "codeberg.org/snonux/hexai/internal/appconfig"
+ "codeberg.org/snonux/hexai/internal/llm"
+)
+
+// capDoer captures last LLM messages for assertions.
+type capDoer struct{ last []llm.Message }
+func (c *capDoer) Chat(_ context.Context, msgs []llm.Message, _ ...llm.RequestOption) (string, error) { c.last = append([]llm.Message{}, msgs...); return "OK", nil }
+func (*capDoer) DefaultModel() string { return "m" }
+
+func TestExecuteAction_Custom_ClearsSelection(t *testing.T) {
+ cfg := appconfig.Load(nil)
+ parts := InputParts{Selection: "code"}
+ selectedCustom = &appconfig.CustomAction{ID: "x", Title: "X", Instruction: "Do it"}
+ _, _ = executeAction(context.Background(), ActionCustom, parts, cfg, fakeDoer{"OK"}, nil)
+ if selectedCustom != nil {
+ t.Fatalf("expected selectedCustom cleared after execution")
+ }
+}
+
+func TestRunCustom_UserTemplate_InjectsDiagnostics(t *testing.T) {
+ cfg := appconfig.Load(nil)
+ parts := InputParts{Selection: "code", Diagnostics: []string{"L1", "L2"}}
+ ca := appconfig.CustomAction{ID: "y", Title: "Y", User: "{{diagnostics}}\n{{selection}}"}
+ cap := &capDoer{}
+ _, err := runCustom(context.Background(), cfg, cap, ca, parts)
+ if err != nil { t.Fatalf("runCustom error: %v", err) }
+ if len(cap.last) == 0 {
+ t.Fatalf("expected messages captured")
+ }
+ // user message should contain diagnostics and selection
+ found := false
+ for _, m := range cap.last {
+ if m.Role == "user" && strings.Contains(m.Content, "L1") && strings.Contains(m.Content, "code") {
+ found = true
+ }
+ }
+ if !found {
+ t.Fatalf("expected diagnostics and selection in user message: %+v", cap.last)
+ }
+}
+