From d97e8fe172d272d1718109234c7a4f24def7f871 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Wed, 24 Feb 2021 15:05:56 +0100 Subject: [PATCH] Add live tests for some methods in the `git` package We relied too much on stubs for these methods. These new tests actually invoke `git` commands in the context of a test repository. --- git/fixtures/.gitignore | 1 + git/fixtures/simple.git/HEAD | 1 + git/fixtures/simple.git/config | 9 +++++ git/fixtures/simple.git/index | Bin 0 -> 65 bytes git/fixtures/simple.git/logs/HEAD | 2 + git/fixtures/simple.git/logs/refs/heads/main | 2 + .../4b/825dc642cb6eb9a060e54bf8d69288fbee4904 | Bin 0 -> 15 bytes .../6f/1a2405cace1633d89a79c74c65f22fe78f9659 | Bin 0 -> 191 bytes .../d1/e0abfb7d158ed544a202a6958c62d4fc22e12f | 3 ++ git/fixtures/simple.git/refs/heads/main | 1 + git/git_test.go | 35 ++++++++++++++++++ 11 files changed, 54 insertions(+) create mode 100644 git/fixtures/.gitignore create mode 100644 git/fixtures/simple.git/HEAD create mode 100644 git/fixtures/simple.git/config create mode 100644 git/fixtures/simple.git/index create mode 100644 git/fixtures/simple.git/logs/HEAD create mode 100644 git/fixtures/simple.git/logs/refs/heads/main create mode 100644 git/fixtures/simple.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 create mode 100644 git/fixtures/simple.git/objects/6f/1a2405cace1633d89a79c74c65f22fe78f9659 create mode 100644 git/fixtures/simple.git/objects/d1/e0abfb7d158ed544a202a6958c62d4fc22e12f create mode 100644 git/fixtures/simple.git/refs/heads/main diff --git a/git/fixtures/.gitignore b/git/fixtures/.gitignore new file mode 100644 index 000000000..abae30d02 --- /dev/null +++ b/git/fixtures/.gitignore @@ -0,0 +1 @@ +*.git/COMMIT_EDITMSG diff --git a/git/fixtures/simple.git/HEAD b/git/fixtures/simple.git/HEAD new file mode 100644 index 000000000..b870d8262 --- /dev/null +++ b/git/fixtures/simple.git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/git/fixtures/simple.git/config b/git/fixtures/simple.git/config new file mode 100644 index 000000000..f0858dd73 --- /dev/null +++ b/git/fixtures/simple.git/config @@ -0,0 +1,9 @@ +[core] + repositoryformatversion = 0 + filemode = true + ;bare = true + ignorecase = true + precomposeunicode = true +[user] + name = Mona the Cat + email = monalisa@github.com diff --git a/git/fixtures/simple.git/index b/git/fixtures/simple.git/index new file mode 100644 index 0000000000000000000000000000000000000000..65d675154f23ffb2d0196e017d44a5e7017550f5 GIT binary patch literal 65 zcmZ?q402{*U|<4bhL9jvS0E+HV4z^Y<=qr}%;|LA&IJiiy? 1614174263 +0100 commit (initial): Initial commit +d1e0abfb7d158ed544a202a6958c62d4fc22e12f 6f1a2405cace1633d89a79c74c65f22fe78f9659 Mona the Cat 1614174275 +0100 commit: Second commit diff --git a/git/fixtures/simple.git/logs/refs/heads/main b/git/fixtures/simple.git/logs/refs/heads/main new file mode 100644 index 000000000..216887f9e --- /dev/null +++ b/git/fixtures/simple.git/logs/refs/heads/main @@ -0,0 +1,2 @@ +0000000000000000000000000000000000000000 d1e0abfb7d158ed544a202a6958c62d4fc22e12f Mona the Cat 1614174263 +0100 commit (initial): Initial commit +d1e0abfb7d158ed544a202a6958c62d4fc22e12f 6f1a2405cace1633d89a79c74c65f22fe78f9659 Mona the Cat 1614174275 +0100 commit: Second commit diff --git a/git/fixtures/simple.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 b/git/fixtures/simple.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 new file mode 100644 index 0000000000000000000000000000000000000000..adf64119a33d7621aeeaa505d30adb58afaa5559 GIT binary patch literal 15 Wcmb zVTQ@QwM_vh`=W;kP>SeF4um-cNi*AE#Z#)Wgc)P3NrYxg=7$g26^awfsivtoAEkIA zMvEL~A9KJ$H6x0{YWSgRKj7MT23-ZdSmC`5x^E|cE}O28^p<=302ds&iE#38vCdjE t-0@N6e{FM<-1h>1E5>}kHaL|J-S!2v!y@`TwDRCyhaSOcegWSFR-)K;Tv-4B literal 0 HcmV?d00001 diff --git a/git/fixtures/simple.git/objects/d1/e0abfb7d158ed544a202a6958c62d4fc22e12f b/git/fixtures/simple.git/objects/d1/e0abfb7d158ed544a202a6958c62d4fc22e12f new file mode 100644 index 000000000..ec3ada617 --- /dev/null +++ b/git/fixtures/simple.git/objects/d1/e0abfb7d158ed544a202a6958c62d4fc22e12f @@ -0,0 +1,3 @@ +xNK +0tS ILc +"+@M뢷7"^@ bZxFhb轴;lKr3<33Kc#-"k8Z.2d=^*)ES&iqɏiϋP jAy 3*H/ \ No newline at end of file diff --git a/git/fixtures/simple.git/refs/heads/main b/git/fixtures/simple.git/refs/heads/main new file mode 100644 index 000000000..8316cdaf5 --- /dev/null +++ b/git/fixtures/simple.git/refs/heads/main @@ -0,0 +1 @@ +6f1a2405cace1633d89a79c74c65f22fe78f9659 diff --git a/git/git_test.go b/git/git_test.go index 899ca3b49..1cd816fa3 100644 --- a/git/git_test.go +++ b/git/git_test.go @@ -1,12 +1,47 @@ package git import ( + "os" "reflect" "testing" "github.com/cli/cli/internal/run" ) +func setGitDir(t *testing.T, dir string) { + // TODO: also set XDG_CONFIG_HOME, GIT_CONFIG_NOSYSTEM + old_GIT_DIR := os.Getenv("GIT_DIR") + os.Setenv("GIT_DIR", dir) + t.Cleanup(func() { + os.Setenv("GIT_DIR", old_GIT_DIR) + }) +} + +func TestLastCommit(t *testing.T) { + setGitDir(t, "./fixtures/simple.git") + c, err := LastCommit() + if err != nil { + t.Fatalf("LastCommit error: %v", err) + } + if c.Sha != "6f1a2405cace1633d89a79c74c65f22fe78f9659" { + t.Errorf("expected sha %q, got %q", "6f1a2405cace1633d89a79c74c65f22fe78f9659", c.Sha) + } + if c.Title != "Second commit" { + t.Errorf("expected title %q, got %q", "Second commit", c.Title) + } +} + +func TestCommitBody(t *testing.T) { + setGitDir(t, "./fixtures/simple.git") + body, err := CommitBody("6f1a2405cace1633d89a79c74c65f22fe78f9659") + if err != nil { + t.Fatalf("CommitBody error: %v", err) + } + if body != "I'm starting to get the hang of things\n" { + t.Errorf("expected %q, got %q", "I'm starting to get the hang of things\n", body) + } +} + func Test_UncommittedChangeCount(t *testing.T) { type c struct { Label string