b93e14ae88f05c6e01d25ab41d2ecb7456d769b3 / internal/git/git_test.go · 2330 bytes · raw
package git
import (
"os"
"os/exec"
"path/filepath"
"strings"
"testing"
)
func TestInitBare(t *testing.T) {
path := filepath.Join(t.TempDir(), "demo.git")
if err := InitBare(path, "main"); err != nil {
t.Fatalf("InitBare: %v", err)
}
head, err := os.ReadFile(filepath.Join(path, "HEAD"))
if err != nil {
t.Fatalf("read HEAD: %v", err)
}
if !strings.Contains(string(head), "ref: refs/heads/main") {
t.Errorf("HEAD = %q, want ref: refs/heads/main", head)
}
cmd := exec.Command("git", "rev-parse", "--is-bare-repository")
cmd.Dir = path
if out, err := cmd.CombinedOutput(); err != nil {
t.Fatalf("rev-parse: %v: %s", err, out)
} else if strings.TrimSpace(string(out)) != "true" {
t.Errorf("is-bare-repository = %q, want true", out)
}
}
func TestInitBareReportsFailure(t *testing.T) {
file := filepath.Join(t.TempDir(), "occupied")
if err := os.WriteFile(file, []byte("x"), 0o644); err != nil {
t.Fatalf("write file: %v", err)
}
if err := InitBare(file, "main"); err == nil {
t.Error("InitBare over a regular file = nil, want error")
}
}
func TestInitBareInstallsPostReceive(t *testing.T) {
path := filepath.Join(t.TempDir(), "demo.git")
if err := InitBare(path, "main"); err != nil {
t.Fatalf("InitBare: %v", err)
}
hook := filepath.Join(path, "hooks", "post-receive")
info, err := os.Stat(hook)
if err != nil {
t.Fatalf("stat post-receive: %v", err)
}
if info.Mode()&0o111 == 0 {
t.Error("post-receive is not executable")
}
script, err := os.ReadFile(hook)
if err != nil {
t.Fatalf("read post-receive: %v", err)
}
for _, want := range []string{"SIMPLEGIT_BIN", "hook --repo", "dirname"} {
if !strings.Contains(string(script), want) {
t.Errorf("post-receive lacks %q: %q", want, script)
}
}
}
func TestDefaultBranchRoundTrip(t *testing.T) {
path := filepath.Join(t.TempDir(), "demo.git")
if err := InitBare(path, "main"); err != nil {
t.Fatalf("InitBare: %v", err)
}
if branch, err := DefaultBranch(path); err != nil || branch != "main" {
t.Fatalf("DefaultBranch = %q, %v; want main", branch, err)
}
if err := SetDefaultBranch(path, "trunk"); err != nil {
t.Fatalf("SetDefaultBranch: %v", err)
}
if branch, err := DefaultBranch(path); err != nil || branch != "trunk" {
t.Errorf("DefaultBranch after set = %q, %v; want trunk", branch, err)
}
}