github.com/fsmiamoto/ck@v0.0.2-0.20200603013204-6b305c3a6c30/git/git_test.go (about) 1 package git 2 3 import ( 4 "log" 5 "os" 6 "reflect" 7 "sort" 8 "testing" 9 "time" 10 11 gogit "github.com/go-git/go-git/v5" 12 "github.com/go-git/go-git/v5/plumbing" 13 "github.com/go-git/go-git/v5/plumbing/object" 14 ) 15 16 const testingDirectory = ".tests" 17 18 var testBranches = []string{"development", "staging", "feat/abc", "master"} 19 20 var repo *gogit.Repository 21 22 func TestMain(m *testing.M) { 23 check(setup()) 24 os.Exit(m.Run()) 25 } 26 27 func TestBranchNames(t *testing.T) { 28 branches, err := branchNamesFromRepo(repo) 29 30 assertNoError(t, err) 31 32 sort.Strings(testBranches) 33 sort.Strings(branches) 34 35 if !reflect.DeepEqual(branches, testBranches) { 36 t.Errorf("Expected %v but got %v", testBranches, branches) 37 } 38 } 39 40 func TestCheckout(t *testing.T) { 41 tests := []struct { 42 name string 43 branch string 44 expectError bool 45 }{ 46 {"existing branch", "feat/abc", false}, 47 {"non-existing branch", "nani", true}, 48 } 49 50 for _, tt := range tests { 51 err := checkoutInRepo(repo, tt.branch) 52 53 if tt.expectError { 54 if err == nil { 55 t.Errorf("Expected an error but got none") 56 } 57 continue 58 } 59 60 assertNoError(t, err) 61 62 ref, err := repo.Head() 63 assertNoError(t, err) 64 65 if ref.Name().Short() != tt.branch { 66 t.Errorf("Expected HEAD to be at %v but is at %v", tt.branch, ref.Name().Short()) 67 } 68 } 69 70 } 71 72 func assertNoError(t *testing.T, err error) { 73 if err != nil { 74 t.Errorf("Expected no error but got one: %v", err) 75 } 76 } 77 78 func check(err error) { 79 if err != nil { 80 log.Fatal(err) 81 } 82 } 83 84 func setup() error { 85 os.RemoveAll(testingDirectory) 86 87 err := os.Mkdir(testingDirectory, 0700) 88 if err != nil { 89 return err 90 } 91 92 os.Chdir(testingDirectory) 93 94 err = os.RemoveAll(".git") 95 if err != nil { 96 return err 97 } 98 99 r, err := gogit.PlainInit(".", false) 100 if err != nil { 101 return err 102 } 103 104 file, err := os.Create("test.txt") 105 if err != nil { 106 return err 107 } 108 109 file.WriteString("Hello World!") 110 err = file.Close() 111 if err != nil { 112 return err 113 } 114 115 w, err := r.Worktree() 116 if err != nil { 117 return err 118 } 119 120 w.Add(".") 121 122 _, err = w.Commit("initial commit", &gogit.CommitOptions{ 123 Author: &object.Signature{ 124 Name: "Levi Ackermann", 125 Email: "lackermann@email.com", 126 When: time.Now(), 127 }, 128 }) 129 130 if err != nil { 131 return err 132 } 133 134 for _, b := range testBranches { 135 headRef, err := r.Head() 136 if err != nil { 137 return err 138 } 139 140 ref := plumbing.NewReferenceFromStrings("refs/heads/"+b, headRef.Hash().String()) 141 err = r.Storer.SetReference(ref) 142 if err != nil { 143 return err 144 } 145 } 146 repo = r 147 return nil 148 }