Files
agentic-coding-workflow/internal/infra/git/lsfiles_test.go
T
2026-06-22 08:55:57 +08:00

57 lines
1.9 KiB
Go

package git
import (
"context"
"os"
"path/filepath"
"sort"
"testing"
"github.com/stretchr/testify/require"
)
func TestListTrackedFiles(t *testing.T) {
gitAvailable(t)
dir := t.TempDir()
mustGit(t, dir, "init", "-b", "main")
mustGit(t, dir, "config", "user.email", "test@example.com")
mustGit(t, dir, "config", "user.name", "Test")
require.NoError(t, os.WriteFile(filepath.Join(dir, "a.go"), []byte("package a\n"), 0o644))
require.NoError(t, os.MkdirAll(filepath.Join(dir, "sub"), 0o755))
require.NoError(t, os.WriteFile(filepath.Join(dir, "sub", "b.txt"), []byte("b\n"), 0o644))
// Untracked + ignored files must NOT appear.
require.NoError(t, os.WriteFile(filepath.Join(dir, ".gitignore"), []byte("ignored.txt\n"), 0o644))
require.NoError(t, os.WriteFile(filepath.Join(dir, "ignored.txt"), []byte("x\n"), 0o644))
require.NoError(t, os.WriteFile(filepath.Join(dir, "untracked.txt"), []byte("y\n"), 0o644))
mustGit(t, dir, "add", "a.go", "sub/b.txt", ".gitignore")
mustGit(t, dir, "commit", "-m", "init")
r := newTestRunner(t)
files, err := r.ListTrackedFiles(context.Background(), dir)
require.NoError(t, err)
sort.Strings(files)
require.Equal(t, []string{".gitignore", "a.go", "sub/b.txt"}, files)
}
func TestDiffStat(t *testing.T) {
gitAvailable(t)
dir := t.TempDir()
mustGit(t, dir, "init", "-b", "main")
mustGit(t, dir, "config", "user.email", "test@example.com")
mustGit(t, dir, "config", "user.name", "Test")
require.NoError(t, os.WriteFile(filepath.Join(dir, "f.go"), []byte("package f\n\nfunc F() {}\n"), 0o644))
mustGit(t, dir, "add", "f.go")
mustGit(t, dir, "commit", "-m", "add F")
r := newTestRunner(t)
// HEAD resolves the just-made commit.
commits, err := r.Log(context.Background(), dir, 1)
require.NoError(t, err)
require.Len(t, commits, 1)
stat, err := r.DiffStat(context.Background(), dir, commits[0].Hash)
require.NoError(t, err)
require.Contains(t, stat, "f.go")
require.Contains(t, stat, "add F") // subject from --format
}