Update TestEditCommand to test the core editing functionality directly using a Grok client instead of executing the full command. This makes the test non-interactive and focuses on the editing logic. Also, adjust the verification to trim whitespace before checking for the comment prefix.
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package cmd
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"gmgauthier.com/grokkit/internal/grok"
|
|
)
|
|
|
|
func TestEditCommand(t *testing.T) {
|
|
// Create temporary test file
|
|
tmpfile, err := os.CreateTemp("", "test_edit_*.go")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer os.Remove(tmpfile.Name())
|
|
|
|
original := []byte("package main\n\nfunc hello() {}\n")
|
|
os.WriteFile(tmpfile.Name(), original, 0644)
|
|
|
|
// Test the core editing logic directly (non-interactive)
|
|
instruction := "add a comment at the top"
|
|
client := grok.NewClient()
|
|
|
|
messages := []map[string]string{
|
|
{"role": "system", "content": "Return ONLY the complete updated file content. The VERY FIRST LINE must be a comment starting with //."},
|
|
{"role": "user", "content": "File: test.go\n\nOriginal content:\n" + string(original) + "\n\nTask: " + instruction},
|
|
}
|
|
|
|
raw := client.StreamSilent(messages, "grok-4-1-fast-non-reasoning")
|
|
newContent := grok.CleanCodeResponse(raw)
|
|
|
|
// Apply the result (this is what the real command does after confirmation)
|
|
os.WriteFile(tmpfile.Name(), []byte(newContent), 0644)
|
|
|
|
// Verify
|
|
content, _ := os.ReadFile(tmpfile.Name())
|
|
if !strings.HasPrefix(strings.TrimSpace(string(content)), "//") {
|
|
t.Errorf("Expected a comment at the very top. Got:\n%s", content)
|
|
}
|
|
}
|