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) {
|
func runGit(t *testing.T, dir string, args ...string) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
cmd := exec.Command("git", args...)
|
cmd := exec.Command("git", args...)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user