mugit/internal/git/compare_test.go (view raw)
| 1 | package git |
| 2 | |
| 3 | import ( |
| 4 | "testing" |
| 5 | |
| 6 | "olexsmir.xyz/x/is" |
| 7 | ) |
| 8 | |
| 9 | func TestRepo_Compare(t *testing.T) { |
| 10 | t.Run("compares two refs", func(t *testing.T) { |
| 11 | r := newTestRepo(t) |
| 12 | base := r.commitFile("README.md", "base\n", "base commit") |
| 13 | r.createBranch("develop", base) |
| 14 | |
| 15 | r.commitFile("master.txt", "master only\n", "master change") |
| 16 | r.checkoutBranch("develop", false) |
| 17 | r.commitFile("develop.txt", "develop only\n", "develop change") |
| 18 | |
| 19 | cmp, err := r.open().Compare("master", "develop") |
| 20 | is.Err(t, err, nil) |
| 21 | is.Equal(t, cmp.BaseRef, "master") |
| 22 | is.Equal(t, cmp.HeadRef, "develop") |
| 23 | is.Equal(t, cmp.Behind, 1) |
| 24 | is.Equal(t, cmp.Ahead, 1) |
| 25 | is.Equal(t, cmp.MergeBase, base.String()) |
| 26 | is.Equal(t, len(cmp.Commits), 1) |
| 27 | is.Equal(t, cmp.Commits[0].Message, "develop change") |
| 28 | is.Equal(t, cmp.Diff.Stat.FilesChanged, 1) |
| 29 | is.Equal(t, cmp.Diff.Diff[0].Name.New, "develop.txt") |
| 30 | }) |
| 31 | |
| 32 | t.Run("returns empty range when refs are equal", func(t *testing.T) { |
| 33 | r := newTestRepo(t) |
| 34 | r.commitFile("README.md", "base\n", "base commit") |
| 35 | |
| 36 | cmp, err := r.open().Compare("master", "master") |
| 37 | is.Err(t, err, nil) |
| 38 | is.Equal(t, cmp.Behind, 0) |
| 39 | is.Equal(t, cmp.Ahead, 0) |
| 40 | is.Equal(t, len(cmp.Commits), 0) |
| 41 | is.Equal(t, cmp.Diff.Stat.FilesChanged, 0) |
| 42 | }) |
| 43 | |
| 44 | t.Run("fails on invalid ref", func(t *testing.T) { |
| 45 | r := newTestRepo(t) |
| 46 | r.commitFile("README.md", "base\n", "base commit") |
| 47 | |
| 48 | _, err := r.open().Compare("master", "does-not-exist") |
| 49 | is.Err(t, err, "resolving head ref") |
| 50 | }) |
| 51 | } |