(t *testing.T)
| 560 | } |
| 561 | |
| 562 | func TestGetRepositorySlugFromRemotePreferringUpstream(t *testing.T) { |
| 563 | tmpDir := testutil.TempDir(t, "test-slug-upstream-*") |
| 564 | |
| 565 | originalDir, err := os.Getwd() |
| 566 | require.NoError(t, err, "get current directory for test setup") |
| 567 | defer func() { |
| 568 | if err := os.Chdir(originalDir); err != nil { |
| 569 | t.Logf("Warning: failed to restore directory: %v", err) |
| 570 | } |
| 571 | }() |
| 572 | |
| 573 | require.NoError(t, os.Chdir(tmpDir), "change to temp directory for test setup") |
| 574 | |
| 575 | if err := exec.Command("git", "init").Run(); err != nil { |
| 576 | t.Skip("Git not available") |
| 577 | } |
| 578 | |
| 579 | addRemote := func(t *testing.T, name, remoteURL string) { |
| 580 | t.Helper() |
| 581 | if err := exec.Command("git", "remote", "get-url", name).Run(); err == nil { |
| 582 | require.NoError(t, exec.Command("git", "remote", "remove", name).Run(), "remove existing %s remote", name) |
| 583 | } |
| 584 | require.NoError(t, exec.Command("git", "remote", "add", name, remoteURL).Run(), "add %s remote", name) |
| 585 | t.Cleanup(func() { |
| 586 | if err := exec.Command("git", "remote", "remove", name).Run(); err != nil { |
| 587 | t.Logf("Warning: failed to remove %s remote during cleanup: %v", name, err) |
| 588 | } |
| 589 | }) |
| 590 | } |
| 591 | |
| 592 | t.Run("prefers upstream when both origin and upstream exist", func(t *testing.T) { |
| 593 | addRemote(t, "origin", "https://github.com/fork/repo.git") |
| 594 | addRemote(t, "upstream", "https://github.com/upstream/repo.git") |
| 595 | |
| 596 | slug := getRepositorySlugFromRemotePreferringUpstream() |
| 597 | assert.Equal(t, "upstream/repo", slug, "getRepositorySlugFromRemotePreferringUpstream should prefer upstream") |
| 598 | }) |
| 599 | |
| 600 | t.Run("falls back to origin when upstream missing", func(t *testing.T) { |
| 601 | addRemote(t, "origin", "https://github.com/myorg/myrepo.git") |
| 602 | |
| 603 | slug := getRepositorySlugFromRemotePreferringUpstream() |
| 604 | assert.Equal(t, "myorg/myrepo", slug, "getRepositorySlugFromRemotePreferringUpstream should fall back to origin") |
| 605 | }) |
| 606 | |
| 607 | t.Run("falls back to origin when upstream is unparsable", func(t *testing.T) { |
| 608 | addRemote(t, "origin", "https://github.com/myorg/myrepo.git") |
| 609 | addRemote(t, "upstream", "https://example.com/upstream/repo.git") |
| 610 | |
| 611 | slug := getRepositorySlugFromRemotePreferringUpstream() |
| 612 | assert.Equal(t, "myorg/myrepo", slug, "getRepositorySlugFromRemotePreferringUpstream should fall back to origin when upstream is unparsable") |
| 613 | }) |
| 614 | } |
| 615 | |
| 616 | func TestGetRepositorySlugFromRemoteForPathPreferringUpstream(t *testing.T) { |
| 617 | tmpDir := testutil.TempDir(t, "test-slug-upstream-path-*") |
nothing calls this directly
no test coverage detected