(t *testing.T)
| 494 | } |
| 495 | |
| 496 | func TestResolveRemoteURL(t *testing.T) { |
| 497 | tmpDir := testutil.TempDir(t, "test-resolve-remote-*") |
| 498 | |
| 499 | originalDir, err := os.Getwd() |
| 500 | require.NoError(t, err, "get current directory for test setup") |
| 501 | defer func() { |
| 502 | if err := os.Chdir(originalDir); err != nil { |
| 503 | t.Logf("Warning: failed to restore directory: %v", err) |
| 504 | } |
| 505 | }() |
| 506 | |
| 507 | require.NoError(t, os.Chdir(tmpDir), "change to temp directory for test setup") |
| 508 | |
| 509 | // Initialize a git repo |
| 510 | if err := exec.Command("git", "init").Run(); err != nil { |
| 511 | t.Skip("Git not available") |
| 512 | } |
| 513 | |
| 514 | t.Run("no remotes returns error", func(t *testing.T) { |
| 515 | _, _, err := resolveRemoteURL("") |
| 516 | assert.Error(t, err, "resolveRemoteURL should return an error when no remotes are configured") |
| 517 | }) |
| 518 | |
| 519 | t.Run("origin remote is used when present", func(t *testing.T) { |
| 520 | require.NoError(t, exec.Command("git", "remote", "add", "origin", "https://github.com/owner/repo.git").Run(), "add origin remote") |
| 521 | defer func() { _ = exec.Command("git", "remote", "remove", "origin").Run() }() |
| 522 | |
| 523 | url, name, err := resolveRemoteURL("") |
| 524 | require.NoError(t, err, "resolve remote URL with origin present") |
| 525 | assert.Equal(t, "origin", name, "resolveRemoteURL should prefer the origin remote") |
| 526 | assert.Equal(t, "https://github.com/owner/repo.git", url, "resolveRemoteURL should return the origin remote URL") |
| 527 | }) |
| 528 | |
| 529 | t.Run("single non-origin remote is used as fallback", func(t *testing.T) { |
| 530 | require.NoError(t, exec.Command("git", "remote", "add", "myorg", "https://github.com/myorg/repo.git").Run(), "add fallback remote") |
| 531 | defer func() { _ = exec.Command("git", "remote", "remove", "myorg").Run() }() |
| 532 | |
| 533 | url, name, err := resolveRemoteURL("") |
| 534 | require.NoError(t, err, "resolve remote URL with a single non-origin remote") |
| 535 | assert.Equal(t, "myorg", name, "resolveRemoteURL should use the only configured non-origin remote") |
| 536 | assert.Equal(t, "https://github.com/myorg/repo.git", url, "resolveRemoteURL should return the only configured non-origin remote URL") |
| 537 | }) |
| 538 | |
| 539 | t.Run("multiple non-origin remotes returns error", func(t *testing.T) { |
| 540 | require.NoError(t, exec.Command("git", "remote", "add", "remote1", "https://github.com/org1/repo.git").Run(), "add first non-origin remote") |
| 541 | defer func() { _ = exec.Command("git", "remote", "remove", "remote1").Run() }() |
| 542 | require.NoError(t, exec.Command("git", "remote", "add", "remote2", "https://github.com/org2/repo.git").Run(), "add second non-origin remote") |
| 543 | defer func() { _ = exec.Command("git", "remote", "remove", "remote2").Run() }() |
| 544 | |
| 545 | _, _, err := resolveRemoteURL("") |
| 546 | assert.Error(t, err, "resolveRemoteURL should return an error when multiple non-origin remotes are configured") |
| 547 | }) |
| 548 | |
| 549 | t.Run("origin takes precedence when multiple remotes exist", func(t *testing.T) { |
| 550 | require.NoError(t, exec.Command("git", "remote", "add", "origin", "https://github.com/owner/repo.git").Run(), "add origin remote") |
| 551 | defer func() { _ = exec.Command("git", "remote", "remove", "origin").Run() }() |
| 552 | require.NoError(t, exec.Command("git", "remote", "add", "upstream", "https://github.com/upstream/repo.git").Run(), "add upstream remote") |
| 553 | defer func() { _ = exec.Command("git", "remote", "remove", "upstream").Run() }() |
nothing calls this directly
no test coverage detected