grokkit/cmd/edit_test.go
Greg Gauthier 918ccc01c8
All checks were successful
CI / Test (push) Successful in 31s
CI / Lint (push) Successful in 25s
CI / Build (push) Successful in 22s
Release / Create Release (push) Successful in 36s
refactor(tests): improve error handling and defer usage
- Add error checking for os.Setenv and io operations in test files
- Use anonymous functions in defer to ignore errors from os.Remove, os.Setenv, etc.
- Minor formatting and consistency fixes in tests and client code
2026-03-02 21:33:11 +00:00

47 lines
1.3 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 func() { _ = os.Remove(tmpfile.Name()) }()
original := []byte("package main\n\nfunc hello() {}\n")
if err := os.WriteFile(tmpfile.Name(), original, 0644); err != nil {
t.Fatal(err)
}
// 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)
if err := os.WriteFile(tmpfile.Name(), []byte(newContent), 0644); err != nil {
t.Fatal(err)
}
// 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)
}
}