@@ -2,6 +2,8 @@ package util
22
33import (
44 "os"
5+ "os/exec"
6+ "path/filepath"
57 "reflect"
68 "testing"
79)
@@ -82,3 +84,100 @@ func TestConvertToMap(t *testing.T) {
8284 })
8385 }
8486}
87+
88+ func TestIsGitRepo (t * testing.T ) {
89+ type fields struct {
90+ setup func (t * testing.T )
91+ want bool
92+ }
93+
94+ testCases := []struct {
95+ name string
96+ fields fields
97+ }{
98+ {
99+ name : "inside git repo root" ,
100+ fields : fields {
101+ want : true ,
102+ setup : func (t * testing.T ) {
103+ t .Helper ()
104+
105+ tmpDir := t .TempDir ()
106+
107+ cmd := exec .Command ("git" , "init" )
108+ cmd .Dir = tmpDir
109+ if output , err := cmd .CombinedOutput (); err != nil {
110+ t .Fatalf ("failed to init git repo: %v, output: %s" , err , string (output ))
111+ }
112+
113+ if err := os .Chdir (tmpDir ); err != nil {
114+ t .Fatalf ("failed to chdir to repo root: %v" , err )
115+ }
116+ },
117+ },
118+ },
119+ {
120+ name : "inside git repo subdir" ,
121+ fields : fields {
122+ want : true ,
123+ setup : func (t * testing.T ) {
124+ t .Helper ()
125+
126+ tmpDir := t .TempDir ()
127+
128+ cmd := exec .Command ("git" , "init" )
129+ cmd .Dir = tmpDir
130+ if output , err := cmd .CombinedOutput (); err != nil {
131+ t .Fatalf ("failed to init git repo: %v, output: %s" , err , string (output ))
132+ }
133+
134+ subDir := filepath .Join (tmpDir , "subdir" , "nested" )
135+ if err := os .MkdirAll (subDir , 0o755 ); err != nil {
136+ t .Fatalf ("failed to create subdir: %v" , err )
137+ }
138+
139+ if err := os .Chdir (subDir ); err != nil {
140+ t .Fatalf ("failed to chdir to subdir: %v" , err )
141+ }
142+ },
143+ },
144+ },
145+ {
146+ name : "outside git repo" ,
147+ fields : fields {
148+ want : false ,
149+ setup : func (t * testing.T ) {
150+ t .Helper ()
151+
152+ tmpDir := t .TempDir ()
153+
154+ if err := os .Chdir (tmpDir ); err != nil {
155+ t .Fatalf ("failed to chdir to temp dir: %v" , err )
156+ }
157+ },
158+ },
159+ },
160+ }
161+
162+ for _ , tc := range testCases {
163+ tc := tc
164+ t .Run (tc .name , func (t * testing.T ) {
165+ origWD , err := os .Getwd ()
166+ if err != nil {
167+ t .Fatalf ("failed to get current working directory: %v" , err )
168+ }
169+ t .Cleanup (func () {
170+ _ = os .Chdir (origWD )
171+ })
172+
173+ if tc .fields .setup != nil {
174+ tc .fields .setup (t )
175+ }
176+
177+ got := IsGitRepo ()
178+ if got != tc .fields .want {
179+ t .Errorf ("IsGitRepo() = %v; want %v" , got , tc .fields .want )
180+ }
181+ })
182+ }
183+ }
0 commit comments