github.com/tsuty/git-user@v1.0.0/git_test.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "os/exec" 8 "testing" 9 ) 10 11 func insideWorkTree() (cleanupFunc func()) { 12 dir, _ := ioutil.TempDir(os.TempDir(), "git-user_test") 13 if _, found := os.LookupEnv("DEBUG"); found { 14 fmt.Println("# insideWorkTree", dir) 15 } 16 os.Chdir(dir) 17 exec.Command("git", "init").Run() 18 return func() { 19 os.RemoveAll(dir) 20 } 21 } 22 23 func outsideWorkTree() (cleanupFunc func()) { 24 dir, _ := ioutil.TempDir(os.TempDir(), "git-user_test") 25 if _, found := os.LookupEnv("DEBUG"); found { 26 fmt.Println("# outsideWorkTree", dir) 27 } 28 os.Chdir(dir) 29 return func() { 30 os.RemoveAll(dir) 31 } 32 } 33 34 func TestGit_GetLocalUserEmail(t *testing.T) { 35 tests := []struct { 36 name string 37 want string 38 init func() func() 39 }{ 40 { 41 "valid", 42 "tsuty@example.com", 43 func() func() { 44 fn := insideWorkTree() 45 exec.Command("git", "config", "--local", "user.email", "tsuty@example.com").Run() 46 return fn 47 }, 48 }, 49 { 50 "invalid", 51 "", 52 func() func() { 53 return insideWorkTree() 54 }, 55 }, 56 } 57 for _, tt := range tests { 58 t.Run(tt.name, func(t *testing.T) { 59 gi := &Git{} 60 fn := tt.init() 61 defer fn() 62 if got := gi.GetLocalUserEmail(); got != tt.want { 63 t.Errorf("GetLocalUserEmail() = %v, want %v", got, tt.want) 64 } 65 }) 66 } 67 } 68 69 func TestGit_GetLocalUserName(t *testing.T) { 70 tests := []struct { 71 name string 72 want string 73 init func() func() 74 }{ 75 { 76 "valid", 77 "Mike Wazowski", 78 func() func() { 79 fn := insideWorkTree() 80 exec.Command("git", "config", "--local", "user.name", "Mike Wazowski").Run() 81 return fn 82 }, 83 }, 84 { 85 "invalid", 86 "", 87 func() func() { 88 return insideWorkTree() 89 }, 90 }, 91 } 92 for _, tt := range tests { 93 t.Run(tt.name, func(t *testing.T) { 94 gi := &Git{} 95 fn := tt.init() 96 defer fn() 97 if got := gi.GetLocalUserName(); got != tt.want { 98 t.Errorf("GetLocalUserName() = %v, want %v", got, tt.want) 99 } 100 }) 101 } 102 } 103 104 func TestGit_GetLocalUserSigningKey(t *testing.T) { 105 tests := []struct { 106 name string 107 want string 108 init func() func() 109 }{ 110 { 111 "valid", 112 "AAABBBCCCDDD", 113 func() func() { 114 fn := insideWorkTree() 115 exec.Command("git", "config", "--local", "user.signingkey", "AAABBBCCCDDD").Run() 116 return fn 117 }, 118 }, 119 { 120 "invalid", 121 "", 122 func() func() { 123 return insideWorkTree() 124 }, 125 }, 126 } 127 for _, tt := range tests { 128 t.Run(tt.name, func(t *testing.T) { 129 gi := &Git{} 130 fn := tt.init() 131 defer fn() 132 if got := gi.GetLocalUserSigningKey(); got != tt.want { 133 t.Errorf("GetLocalUserSigningKey() = %v, want %v", got, tt.want) 134 } 135 }) 136 } 137 } 138 139 func TestGit_GetRemoteOriginURL(t *testing.T) { 140 tests := []struct { 141 name string 142 want string 143 init func() func() 144 }{ 145 { 146 "valid", 147 "git@example.com:foo/bar", 148 func() func() { 149 fn := insideWorkTree() 150 exec.Command("git", "remote", "add", "origin", "git@example.com:foo/bar").Run() 151 return fn 152 }, 153 }, 154 { 155 "invalid", 156 "", 157 func() func() { 158 return insideWorkTree() 159 }, 160 }, 161 } 162 for _, tt := range tests { 163 t.Run(tt.name, func(t *testing.T) { 164 gi := &Git{} 165 fn := tt.init() 166 defer fn() 167 if got := gi.GetRemoteOriginURL(); got != tt.want { 168 t.Errorf("GetRemoteOriginURL() got = %v, want %v", got, tt.want) 169 } 170 }) 171 } 172 } 173 174 func TestGit_IsInsideWorkTree(t *testing.T) { 175 tests := []struct { 176 name string 177 want bool 178 init func() func() 179 }{ 180 { 181 "valid", 182 true, 183 func() func() { 184 return insideWorkTree() 185 }, 186 }, 187 { 188 "invalid", 189 false, 190 func() func() { 191 return outsideWorkTree() 192 }, 193 }, 194 } 195 for _, tt := range tests { 196 t.Run(tt.name, func(t *testing.T) { 197 gi := &Git{} 198 fn := tt.init() 199 defer fn() 200 if got := gi.IsInsideWorkTree(); got != tt.want { 201 t.Errorf("IsInsideWorkTree() got = %v, want %v", got, tt.want) 202 } 203 }) 204 } 205 } 206 207 func TestGit_SetLocalUserEmail(t *testing.T) { 208 type args struct { 209 email string 210 } 211 tests := []struct { 212 name string 213 args args 214 wantErr bool 215 want string 216 init func() func() 217 }{ 218 { 219 "valid", 220 args{email: "tsuty@example.com"}, 221 false, 222 "tsuty@example.com", 223 func() func() { 224 return insideWorkTree() 225 }, 226 }, 227 { 228 "invalid", 229 args{email: "tsuty@example.com"}, 230 true, 231 "", 232 func() func() { 233 return outsideWorkTree() 234 }, 235 }, 236 } 237 for _, tt := range tests { 238 t.Run(tt.name, func(t *testing.T) { 239 gi := &Git{} 240 fn := tt.init() 241 defer fn() 242 err := gi.SetLocalUserEmail(tt.args.email) 243 if (err != nil) != tt.wantErr { 244 t.Errorf("SetLocalUserEmail() error = %v, wantErr %v", err, tt.wantErr) 245 } else { 246 if got := gi.GetLocalUserEmail(); got != tt.want { 247 t.Errorf("GetLocalUserEmail() = %v, want %v", got, tt.want) 248 } 249 } 250 }) 251 } 252 } 253 254 func TestGit_SetLocalUserName(t *testing.T) { 255 type args struct { 256 name string 257 } 258 tests := []struct { 259 name string 260 args args 261 wantErr bool 262 want string 263 init func() func() 264 }{ 265 { 266 "valid", 267 args{name: "Mike Wazowski"}, 268 false, 269 "Mike Wazowski", 270 func() func() { 271 return insideWorkTree() 272 }, 273 }, 274 { 275 "invalid", 276 args{name: "Mike Wazowski"}, 277 true, 278 "", 279 func() func() { 280 return outsideWorkTree() 281 }, 282 }, 283 } 284 for _, tt := range tests { 285 t.Run(tt.name, func(t *testing.T) { 286 gi := &Git{} 287 fn := tt.init() 288 defer fn() 289 err := gi.SetLocalUserName(tt.args.name) 290 if (err != nil) != tt.wantErr { 291 t.Errorf("SetLocalUserName() error = %v, wantErr %v", err, tt.wantErr) 292 } else { 293 if got := gi.GetLocalUserName(); got != tt.want { 294 t.Errorf("GetLocalUserName() = %v, want %v", got, tt.want) 295 } 296 } 297 }) 298 } 299 } 300 301 func TestGit_SetLocalUserSigningKey(t *testing.T) { 302 type args struct { 303 signingkey string 304 } 305 tests := []struct { 306 name string 307 args args 308 wantErr bool 309 want string 310 init func() func() 311 }{ 312 { 313 "valid", 314 args{signingkey: "aaabbbcccddeeefff"}, 315 false, 316 "aaabbbcccddeeefff", 317 func() func() { 318 return insideWorkTree() 319 }, 320 }, 321 { 322 "invalid", 323 args{signingkey: "aaabbbcccddeeefff"}, 324 true, 325 "", 326 func() func() { 327 return outsideWorkTree() 328 }, 329 }, 330 } 331 for _, tt := range tests { 332 t.Run(tt.name, func(t *testing.T) { 333 gi := &Git{} 334 fn := tt.init() 335 defer fn() 336 337 err := gi.SetLocalUserSigningKey(tt.args.signingkey) 338 if (err != nil) != tt.wantErr { 339 t.Errorf("SetLocalUserSigningKey() error = %v, wantErr %v", err, tt.wantErr) 340 } else { 341 if got := gi.GetLocalUserSigningKey(); got != tt.want { 342 t.Errorf("GetLocalUserSigningKey() = %v, want %v", got, tt.want) 343 } 344 } 345 }) 346 } 347 } 348 349 func TestGit_UnsetLocalUserEmail(t *testing.T) { 350 tests := []struct { 351 name string 352 wantErr bool 353 want string 354 init func() func() 355 }{ 356 { 357 "valid", 358 false, 359 "", 360 func() func() { 361 fn := insideWorkTree() 362 exec.Command("git", "config", "--local", "user.email", "tsuty@example.com").Run() 363 return fn 364 }, 365 }, 366 { 367 "invalid", 368 true, 369 "", 370 func() func() { 371 return insideWorkTree() 372 }, 373 }, 374 } 375 for _, tt := range tests { 376 t.Run(tt.name, func(t *testing.T) { 377 gi := &Git{} 378 fn := tt.init() 379 defer fn() 380 if err := gi.UnsetLocalUserEmail(); (err != nil) != tt.wantErr { 381 t.Errorf("UnsetLocalUserEmail() error = %v, wantErr %v", err, tt.wantErr) 382 } 383 if got := gi.GetLocalUserEmail(); got != tt.want { 384 t.Errorf("GetLocalUserEmail() got = %v, want %v", got, tt.want) 385 } 386 }) 387 } 388 } 389 390 func TestGit_UnsetLocalUserName(t *testing.T) { 391 tests := []struct { 392 name string 393 wantErr bool 394 want string 395 init func() func() 396 }{ 397 { 398 "valid", 399 false, 400 "", 401 func() func() { 402 fn := insideWorkTree() 403 exec.Command("git", "config", "--local", "user.name", "Mike Wazowski").Run() 404 return fn 405 }, 406 }, 407 { 408 "invalid", 409 true, 410 "", 411 func() func() { 412 return insideWorkTree() 413 }, 414 }, 415 } 416 for _, tt := range tests { 417 t.Run(tt.name, func(t *testing.T) { 418 gi := &Git{} 419 fn := tt.init() 420 defer fn() 421 if err := gi.UnsetLocalUserName(); (err != nil) != tt.wantErr { 422 t.Errorf("UnsetLocalUserName() error = %v, wantErr %v", err, tt.wantErr) 423 } 424 if got := gi.GetLocalUserName(); got != tt.want { 425 t.Errorf("UnsetLocalUserEmail() got = %v, want %v", got, tt.want) 426 } 427 }) 428 } 429 } 430 431 func TestGit_UnsetLocalUserSigningKey(t *testing.T) { 432 tests := []struct { 433 name string 434 wantErr bool 435 want string 436 init func() func() 437 }{ 438 { 439 "valid", 440 false, 441 "", 442 func() func() { 443 fn := insideWorkTree() 444 exec.Command("git", "config", "--local", "user.signingkey", "aaabbbcccddeeefff").Run() 445 return fn 446 }, 447 }, 448 { 449 "invalid", 450 true, 451 "", 452 func() func() { 453 return insideWorkTree() 454 }, 455 }, 456 } 457 for _, tt := range tests { 458 t.Run(tt.name, func(t *testing.T) { 459 gi := &Git{} 460 fn := tt.init() 461 defer fn() 462 if err := gi.UnsetLocalUserSigningKey(); (err != nil) != tt.wantErr { 463 t.Errorf("UnsetLocalUserSigningKey() error = %v, wantErr %v", err, tt.wantErr) 464 } 465 if got := gi.GetLocalUserSigningKey(); got != tt.want { 466 t.Errorf("GetLocalUserSigningKey() got = %v, want %v", got, tt.want) 467 } 468 }) 469 } 470 }