github.com/rainforestapp/rainforest-cli@v2.12.0+incompatible/gittrigger_test.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "os" 6 "os/exec" 7 "reflect" 8 "strings" 9 "testing" 10 ) 11 12 const fakeRepoName = "git_testing_directory" 13 14 var testingDirectory string 15 16 func deleteFakeRepo(t *testing.T) { 17 os.Chdir(testingDirectory) 18 err := os.RemoveAll(fakeRepoName) 19 if err != nil { 20 t.Fatalf("Couldn't delete testing directory: %v.", fakeRepoName) 21 } 22 } 23 24 func makeFakeRepoWithCommit(t *testing.T, commitMsg string) { 25 // create empty directory for repo 26 testingDirectory, _ = os.Getwd() 27 err := os.Mkdir(fakeRepoName, 0777) 28 if err != nil { 29 t.Fatal("Couldn't create directory for testing needs.") 30 } 31 os.Chdir(fakeRepoName) 32 if err != nil { 33 deleteFakeRepo(t) 34 t.Fatal("Couldn't navigate to the directory for testing needs.") 35 } 36 37 // initialize repo 38 cmd := exec.Command("git", "init") 39 var out bytes.Buffer 40 cmd.Stdout = &out 41 err = cmd.Run() 42 if err != nil || !strings.Contains(out.String(), "Initialized") { 43 deleteFakeRepo(t) 44 t.Fatal("Couldn't initialize git repo for testing needs.") 45 } 46 47 // set username and email in local repo 48 cmd = exec.Command("git", "config", "user.name", "'Rainforest QA'") 49 out.Reset() 50 cmd.Stdout = &out 51 err = cmd.Run() 52 if err != nil { 53 deleteFakeRepo(t) 54 t.Fatal("Couldn't set the username in repo.") 55 } 56 cmd = exec.Command("git", "config", "user.email", "'test@rainforestqa.com'") 57 out.Reset() 58 cmd.Stdout = &out 59 err = cmd.Run() 60 if err != nil { 61 deleteFakeRepo(t) 62 t.Fatal("Couldn't set the email in repo.") 63 } 64 cmd = exec.Command("git", "config", "commit.gpgSign", "false") 65 out.Reset() 66 cmd.Stdout = &out 67 err = cmd.Run() 68 if err != nil { 69 deleteFakeRepo(t) 70 t.Fatal("Couldn't set the email in repo.") 71 } 72 73 // create empty commit 74 cmd = exec.Command("git", "commit", "--allow-empty", "-m", commitMsg) 75 out.Reset() 76 cmd.Stdout = &out 77 err = cmd.Run() 78 if err != nil || !strings.Contains(out.String(), commitMsg) { 79 deleteFakeRepo(t) 80 t.Fatal("Couldn't commit to the test repo.") 81 } 82 } 83 84 func TestNewGitTrigger(t *testing.T) { 85 const commitMsg = "foo barred baz" 86 makeFakeRepoWithCommit(t, commitMsg) 87 defer deleteFakeRepo(t) 88 git, err := newGitTrigger() 89 if err != nil { 90 t.Error("Unexpected error when doing newGitTrigger()") 91 } 92 if git.LastCommit != commitMsg { 93 t.Errorf("inproperly initialized gitTrigger with newGitTrigger: %v, expected: %v", git.LastCommit, commitMsg) 94 } 95 } 96 97 func TestGetLatestCommit(t *testing.T) { 98 const commitMsg = "test commit in a test repo" 99 fakeGit := gitTrigger{Trigger: "@rainforest"} 100 makeFakeRepoWithCommit(t, commitMsg) 101 defer deleteFakeRepo(t) 102 err := fakeGit.getLatestCommit() 103 if err != nil { 104 t.Error("Unexpected error when doing getLatestCommit()") 105 } 106 if fakeGit.LastCommit != commitMsg { 107 t.Errorf("got wrong commit from GetLatestCommit got: %v, expected: %v", fakeGit.LastCommit, commitMsg) 108 } 109 } 110 111 func TestCheckTrigger(t *testing.T) { 112 fakeGit := gitTrigger{Trigger: "@rainforest"} 113 var testCases = []struct { 114 fakeCommit string 115 want bool 116 }{ 117 { 118 fakeCommit: "Testing testing", 119 want: false, 120 }, 121 { 122 fakeCommit: "Testing @rainforest testing", 123 want: true, 124 }, 125 { 126 fakeCommit: "@rainfnf", 127 want: false, 128 }, 129 } 130 131 for _, tCase := range testCases { 132 fakeGit.LastCommit = tCase.fakeCommit 133 got := fakeGit.checkTrigger() 134 if !reflect.DeepEqual(tCase.want, got) { 135 t.Errorf("checkTrigger returned %+v, want %+v", got, tCase.want) 136 } 137 } 138 } 139 140 func TestGetTags(t *testing.T) { 141 fakeGit := gitTrigger{Trigger: "@rainforest"} 142 var testCases = []struct { 143 fakeCommit string 144 want []string 145 }{ 146 { 147 fakeCommit: "Testing testing", 148 want: []string{}, 149 }, 150 { 151 fakeCommit: "@rainforest #foo, #bar", 152 want: []string{"foo", "bar"}, 153 }, 154 { 155 fakeCommit: "@rainforest #foo #bar-baz #qwe_asd", 156 want: []string{"foo", "bar-baz", "qwe_asd"}, 157 }, 158 } 159 160 for _, tCase := range testCases { 161 fakeGit.LastCommit = tCase.fakeCommit 162 got := fakeGit.getTags() 163 if !reflect.DeepEqual(tCase.want, got) { 164 t.Errorf("getTags returned %+v, want %+v", got, tCase.want) 165 } 166 } 167 }