gitlab.com/lab-cli/lab@v0.14.0/internal/git/git_test.go (about) 1 package git 2 3 import ( 4 "log" 5 "os" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestMain(m *testing.M) { 13 err := os.Chdir(os.ExpandEnv("$GOPATH/src/github.com/zaquestion/lab/testdata")) 14 if err != nil { 15 log.Fatal(err) 16 } 17 os.Exit(m.Run()) 18 } 19 20 func TestGitDir(t *testing.T) { 21 dir, err := GitDir() 22 if err != nil { 23 t.Fatal(err) 24 } 25 expectedDir := os.ExpandEnv("$GOPATH/src/github.com/zaquestion/lab/testdata/.git") 26 require.Equal(t, expectedDir, dir) 27 } 28 29 func TestWorkingDir(t *testing.T) { 30 dir, err := WorkingDir() 31 if err != nil { 32 t.Fatal(err) 33 } 34 expectedDir := os.ExpandEnv("$GOPATH/src/github.com/zaquestion/lab/testdata") 35 require.Equal(t, expectedDir, dir) 36 } 37 38 func TestCommentChar(t *testing.T) { 39 require.Equal(t, "#", CommentChar()) 40 } 41 42 func TestLastCommitMessage(t *testing.T) { 43 lcm, err := LastCommitMessage() 44 if err != nil { 45 t.Fatal(err) 46 } 47 expectedLCM := "(ci) jobs with interleaved sleeps and prints" 48 require.Equal(t, expectedLCM, lcm) 49 } 50 51 func TestLog(t *testing.T) { 52 log, err := Log("HEAD~1", "HEAD") 53 if err != nil { 54 t.Fatal(err) 55 } 56 expectedSHA := "09b519c" 57 expectedAuthor := "Zaq? Wiedmann" 58 expectedMessage := "(ci) jobs with interleaved sleeps and prints" 59 assert.Contains(t, log, expectedSHA) 60 assert.Contains(t, log, expectedAuthor) 61 assert.Contains(t, log, expectedMessage) 62 } 63 64 func TestCurrentBranch(t *testing.T) { 65 branch, err := CurrentBranch() 66 if err != nil { 67 t.Fatal(err) 68 } 69 expectedBranch := "master" 70 require.Equal(t, expectedBranch, branch) 71 } 72 73 func TestPathWithNameSpace(t *testing.T) { 74 tests := []struct { 75 desc string 76 remote string 77 expected string 78 expectedErr string 79 }{ 80 { 81 desc: "ssh", 82 remote: "origin", 83 expected: "zaquestion/test", 84 expectedErr: "", 85 }, 86 { 87 desc: "http", 88 remote: "origin-http", 89 expected: "zaquestion/test", 90 expectedErr: "", 91 }, 92 { 93 desc: "https", 94 remote: "origin-https", 95 expected: "zaquestion/test", 96 expectedErr: "", 97 }, 98 { 99 desc: "https://token@gitlab.com/org/repo", 100 remote: "origin-https-token", 101 expected: "zaquestion/test", 102 expectedErr: "", 103 }, 104 { 105 desc: "git://", 106 remote: "origin-git", 107 expected: "zaquestion/test", 108 expectedErr: "", 109 }, 110 { 111 desc: "ssh://", 112 remote: "origin-ssh-alt", 113 expected: "zaquestion/test", 114 expectedErr: "", 115 }, 116 { 117 desc: "no .git suffix", 118 remote: "origin-no_dot_git", 119 expected: "zaquestion/test", 120 expectedErr: "", 121 }, 122 { 123 desc: "subdfolders-ssh", 124 remote: "origin-subfolder-ssh", 125 expected: "zaquestion/sub/folder/test", 126 expectedErr: "", 127 }, 128 { 129 desc: "subdfolders-git", 130 remote: "origin-subfolder-git", 131 expected: "zaquestion/sub/folder/test", 132 expectedErr: "", 133 }, 134 { 135 desc: "ssh-custom-port", 136 remote: "origin-custom-port", 137 expected: "zaquestion/test", 138 expectedErr: "", 139 }, 140 { 141 desc: "ssh-subfolder-custom-port", 142 remote: "origin-subfolder-custom-port", 143 expected: "zaquestion/sub/folder/test", 144 expectedErr: "", 145 }, 146 { 147 desc: "remote doesn't exist", 148 remote: "phoney", 149 expected: "", 150 expectedErr: "the key `remote.phoney.url` is not found", 151 }, 152 { 153 desc: "remote doesn't exist", 154 remote: "garbage", 155 expected: "", 156 expectedErr: "cannot parse remote: garbage url: garbageurl", 157 }, 158 } 159 160 for _, test := range tests { 161 test := test 162 t.Run(test.desc, func(t *testing.T) { 163 t.Parallel() 164 path, err := PathWithNameSpace(test.remote) 165 if test.expectedErr != "" { 166 assert.EqualError(t, err, test.expectedErr) 167 } else { 168 assert.Nil(t, err) 169 } 170 assert.Equal(t, test.expected, path) 171 }) 172 } 173 } 174 175 func TestRepoName(t *testing.T) { 176 repo, err := RepoName() 177 if err != nil { 178 t.Fatal(err) 179 } 180 expectedRepo := "test" 181 require.Equal(t, expectedRepo, repo) 182 } 183 184 func TestIsRemote(t *testing.T) { 185 res, err := IsRemote("origin") 186 if err != nil { 187 t.Fatal(err) 188 } 189 require.True(t, res) 190 } 191 192 func TestInsideGitRepo(t *testing.T) { 193 require.True(t, InsideGitRepo()) 194 }