Implement Phase 4 test coverage
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
package gitutil
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func requireGit(t *testing.T) {
|
||||
t.Helper()
|
||||
if _, err := exec.LookPath("git"); err != nil {
|
||||
t.Skip("git not installed")
|
||||
}
|
||||
}
|
||||
|
||||
func TestRunFailureIncludesCommandOutput(t *testing.T) {
|
||||
requireGit(t)
|
||||
err := Run("", "definitely-not-a-git-command")
|
||||
if err == nil {
|
||||
t.Fatal("expected git command to fail")
|
||||
}
|
||||
if !strings.Contains(err.Error(), "git definitely-not-a-git-command failed") {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestInitBareBranchExistsAndRefs(t *testing.T) {
|
||||
requireGit(t)
|
||||
root := t.TempDir()
|
||||
bare := filepath.Join(root, "repo.git")
|
||||
if err := InitBare(bare); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
head, err := os.ReadFile(filepath.Join(bare, "HEAD"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if strings.TrimSpace(string(head)) != "ref: refs/heads/main" {
|
||||
t.Fatalf("HEAD = %q", string(head))
|
||||
}
|
||||
if BranchExists(bare, "main") {
|
||||
t.Fatal("new empty bare repo should not have a main branch commit yet")
|
||||
}
|
||||
if BranchExists(bare, "bad branch") {
|
||||
t.Fatal("invalid branch should not exist")
|
||||
}
|
||||
|
||||
work := filepath.Join(root, "work")
|
||||
if err := Run("", "clone", bare, work); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, args := range [][]string{
|
||||
{"config", "user.name", "Test User"},
|
||||
{"config", "user.email", "test@example.com"},
|
||||
} {
|
||||
if err := Run(work, args...); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if err := os.WriteFile(filepath.Join(work, "README.md"), []byte("hello\n"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := Run(work, "add", "README.md"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := Run(work, "commit", "-m", "initial commit"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := Run(work, "push", "origin", "HEAD:main"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := Run(work, "tag", "v1.0.0"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := Run(work, "push", "origin", "v1.0.0"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !BranchExists(bare, "main") {
|
||||
t.Fatal("main branch should exist after push")
|
||||
}
|
||||
branches, err := Refs(bare, "refs/heads")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(branches) != 1 || branches[0].Name != "main" || branches[0].Message != "initial commit" {
|
||||
t.Fatalf("unexpected branches: %#v", branches)
|
||||
}
|
||||
tags, err := Refs(bare, "refs/tags")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(tags) != 1 || tags[0].Name != "v1.0.0" {
|
||||
t.Fatalf("unexpected tags: %#v", tags)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRefsInvalidRepo(t *testing.T) {
|
||||
requireGit(t)
|
||||
if _, err := Refs(filepath.Join(t.TempDir(), "missing.git"), "refs/heads"); err == nil {
|
||||
t.Fatal("expected missing repo refs to fail")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user