test(cli): cover autoCommitPluginMod commit and no-op paths
autoCommitPluginMod runs `git status --porcelain plugin.mod` then commits if dirty. Add two cases: dirty plugin.mod produces an "Add plugin.mod" commit, and a clean state leaves HEAD unchanged. Uses t.Chdir to scope CWD to the temp repo without polluting parent state.
This commit is contained in:
parent
ee76d76dc6
commit
421f5ee0cb
@ -38,6 +38,76 @@ func TestCheckRepoHasHEAD_WithCommitReturnsNil(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAutoCommitPluginMod_CommitsWhenDirty(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
runGit(t, dir, "init", "-q")
|
||||
if err := os.WriteFile(filepath.Join(dir, "README.md"), []byte("hi"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
runGit(t, dir, "add", "README.md")
|
||||
runGit(t, dir, "commit", "-qm", "init")
|
||||
|
||||
if err := os.WriteFile(filepath.Join(dir, "plugin.mod"),
|
||||
[]byte("[plugin]\nname = \"x\"\nscope = \"@s\"\nversion = \"0.1.0\"\n"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
t.Chdir(dir)
|
||||
if err := autoCommitPluginMod(); err != nil {
|
||||
t.Fatalf("autoCommitPluginMod: %v", err)
|
||||
}
|
||||
|
||||
subject := gitLogSubject(t, dir)
|
||||
if subject != "Add plugin.mod" {
|
||||
t.Errorf("expected latest commit subject 'Add plugin.mod', got %q", subject)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAutoCommitPluginMod_NoopWhenClean(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
runGit(t, dir, "init", "-q")
|
||||
if err := os.WriteFile(filepath.Join(dir, "plugin.mod"),
|
||||
[]byte("[plugin]\nname = \"x\"\nscope = \"@s\"\nversion = \"0.1.0\"\n"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
runGit(t, dir, "add", "plugin.mod")
|
||||
runGit(t, dir, "commit", "-qm", "seed")
|
||||
|
||||
beforeSHA := gitHeadSHA(t, dir)
|
||||
|
||||
t.Chdir(dir)
|
||||
if err := autoCommitPluginMod(); err != nil {
|
||||
t.Fatalf("autoCommitPluginMod: %v", err)
|
||||
}
|
||||
|
||||
afterSHA := gitHeadSHA(t, dir)
|
||||
if afterSHA != beforeSHA {
|
||||
t.Errorf("expected no new commit, HEAD moved %s -> %s", beforeSHA, afterSHA)
|
||||
}
|
||||
}
|
||||
|
||||
func gitLogSubject(t *testing.T, dir string) string {
|
||||
t.Helper()
|
||||
cmd := exec.Command("git", "log", "-1", "--pretty=%s")
|
||||
cmd.Dir = dir
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
t.Fatalf("git log: %v\n%s", err, out)
|
||||
}
|
||||
return strings.TrimSpace(string(out))
|
||||
}
|
||||
|
||||
func gitHeadSHA(t *testing.T, dir string) string {
|
||||
t.Helper()
|
||||
cmd := exec.Command("git", "rev-parse", "HEAD")
|
||||
cmd.Dir = dir
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
t.Fatalf("git rev-parse: %v\n%s", err, out)
|
||||
}
|
||||
return strings.TrimSpace(string(out))
|
||||
}
|
||||
|
||||
func runGit(t *testing.T, dir string, args ...string) {
|
||||
t.Helper()
|
||||
cmd := exec.Command("git", args...)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user